]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Adds Segwit support for Vertcoin.
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
7 * Bootstrap v3.3.7 (http://getbootstrap.com)
8 * Copyright 2011-2016 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 */
11 /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
12 html {
13 font-family: sans-serif;
14 -webkit-text-size-adjust: 100%;
15 -ms-text-size-adjust: 100%;
16 }
17 body {
18 margin: 0;
19 }
20 article,
21 aside,
22 details,
23 figcaption,
24 figure,
25 footer,
26 header,
27 hgroup,
28 main,
29 menu,
30 nav,
31 section,
32 summary {
33 display: block;
34 }
35 audio,
36 canvas,
37 progress,
38 video {
39 display: inline-block;
40 vertical-align: baseline;
41 }
42 audio:not([controls]) {
43 display: none;
44 height: 0;
45 }
46 [hidden],
47 template {
48 display: none;
49 }
50 a {
51 background-color: transparent;
52 }
53 a:active,
54 a:hover {
55 outline: 0;
56 }
57 abbr[title] {
58 border-bottom: 1px dotted;
59 }
60 b,
61 strong {
62 font-weight: bold;
63 }
64 dfn {
65 font-style: italic;
66 }
67 h1 {
68 margin: .67em 0;
69 font-size: 2em;
70 }
71 mark {
72 color: #000;
73 background: #ff0;
74 }
75 small {
76 font-size: 80%;
77 }
78 sub,
79 sup {
80 position: relative;
81 font-size: 75%;
82 line-height: 0;
83 vertical-align: baseline;
84 }
85 sup {
86 top: -.5em;
87 }
88 sub {
89 bottom: -.25em;
90 }
91 img {
92 border: 0;
93 }
94 svg:not(:root) {
95 overflow: hidden;
96 }
97 figure {
98 margin: 1em 40px;
99 }
100 hr {
101 height: 0;
102 -webkit-box-sizing: content-box;
103 -moz-box-sizing: content-box;
104 box-sizing: content-box;
105 }
106 pre {
107 overflow: auto;
108 }
109 code,
110 kbd,
111 pre,
112 samp {
113 font-family: monospace, monospace;
114 font-size: 1em;
115 }
116 button,
117 input,
118 optgroup,
119 select,
120 textarea {
121 margin: 0;
122 font: inherit;
123 color: inherit;
124 }
125 button {
126 overflow: visible;
127 }
128 button,
129 select {
130 text-transform: none;
131 }
132 button,
133 html input[type="button"],
134 input[type="reset"],
135 input[type="submit"] {
136 -webkit-appearance: button;
137 cursor: pointer;
138 }
139 button[disabled],
140 html input[disabled] {
141 cursor: default;
142 }
143 button::-moz-focus-inner,
144 input::-moz-focus-inner {
145 padding: 0;
146 border: 0;
147 }
148 input {
149 line-height: normal;
150 }
151 input[type="checkbox"],
152 input[type="radio"] {
153 -webkit-box-sizing: border-box;
154 -moz-box-sizing: border-box;
155 box-sizing: border-box;
156 padding: 0;
157 }
158 input[type="number"]::-webkit-inner-spin-button,
159 input[type="number"]::-webkit-outer-spin-button {
160 height: auto;
161 }
162 input[type="search"] {
163 -webkit-box-sizing: content-box;
164 -moz-box-sizing: content-box;
165 box-sizing: content-box;
166 -webkit-appearance: textfield;
167 }
168 input[type="search"]::-webkit-search-cancel-button,
169 input[type="search"]::-webkit-search-decoration {
170 -webkit-appearance: none;
171 }
172 fieldset {
173 padding: .35em .625em .75em;
174 margin: 0 2px;
175 border: 1px solid #c0c0c0;
176 }
177 legend {
178 padding: 0;
179 border: 0;
180 }
181 textarea {
182 overflow: auto;
183 }
184 optgroup {
185 font-weight: bold;
186 }
187 table {
188 border-spacing: 0;
189 border-collapse: collapse;
190 }
191 td,
192 th {
193 padding: 0;
194 }
195 /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
196 @media print {
197 *,
198 *:before,
199 *:after {
200 color: #000 !important;
201 text-shadow: none !important;
202 background: transparent !important;
203 -webkit-box-shadow: none !important;
204 box-shadow: none !important;
205 }
206 a,
207 a:visited {
208 text-decoration: underline;
209 }
210 a[href]:after {
211 content: " (" attr(href) ")";
212 }
213 abbr[title]:after {
214 content: " (" attr(title) ")";
215 }
216 a[href^="#"]:after,
217 a[href^="javascript:"]:after {
218 content: "";
219 }
220 pre,
221 blockquote {
222 border: 1px solid #999;
223
224 page-break-inside: avoid;
225 }
226 thead {
227 display: table-header-group;
228 }
229 tr,
230 img {
231 page-break-inside: avoid;
232 }
233 img {
234 max-width: 100% !important;
235 }
236 p,
237 h2,
238 h3 {
239 orphans: 3;
240 widows: 3;
241 }
242 h2,
243 h3 {
244 page-break-after: avoid;
245 }
246 .navbar {
247 display: none;
248 }
249 .btn > .caret,
250 .dropup > .btn > .caret {
251 border-top-color: #000 !important;
252 }
253 .label {
254 border: 1px solid #000;
255 }
256 .table {
257 border-collapse: collapse !important;
258 }
259 .table td,
260 .table th {
261 background-color: #fff !important;
262 }
263 .table-bordered th,
264 .table-bordered td {
265 border: 1px solid #ddd !important;
266 }
267 }
268 @font-face {
269 font-family: 'Glyphicons Halflings';
270
271 src: url('../fonts/glyphicons-halflings-regular.eot');
272 src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
273 }
274 .glyphicon {
275 position: relative;
276 top: 1px;
277 display: inline-block;
278 font-family: 'Glyphicons Halflings';
279 font-style: normal;
280 font-weight: normal;
281 line-height: 1;
282
283 -webkit-font-smoothing: antialiased;
284 -moz-osx-font-smoothing: grayscale;
285 }
286 .glyphicon-asterisk:before {
287 content: "\002a";
288 }
289 .glyphicon-plus:before {
290 content: "\002b";
291 }
292 .glyphicon-euro:before,
293 .glyphicon-eur:before {
294 content: "\20ac";
295 }
296 .glyphicon-minus:before {
297 content: "\2212";
298 }
299 .glyphicon-cloud:before {
300 content: "\2601";
301 }
302 .glyphicon-envelope:before {
303 content: "\2709";
304 }
305 .glyphicon-pencil:before {
306 content: "\270f";
307 }
308 .glyphicon-glass:before {
309 content: "\e001";
310 }
311 .glyphicon-music:before {
312 content: "\e002";
313 }
314 .glyphicon-search:before {
315 content: "\e003";
316 }
317 .glyphicon-heart:before {
318 content: "\e005";
319 }
320 .glyphicon-star:before {
321 content: "\e006";
322 }
323 .glyphicon-star-empty:before {
324 content: "\e007";
325 }
326 .glyphicon-user:before {
327 content: "\e008";
328 }
329 .glyphicon-film:before {
330 content: "\e009";
331 }
332 .glyphicon-th-large:before {
333 content: "\e010";
334 }
335 .glyphicon-th:before {
336 content: "\e011";
337 }
338 .glyphicon-th-list:before {
339 content: "\e012";
340 }
341 .glyphicon-ok:before {
342 content: "\e013";
343 }
344 .glyphicon-remove:before {
345 content: "\e014";
346 }
347 .glyphicon-zoom-in:before {
348 content: "\e015";
349 }
350 .glyphicon-zoom-out:before {
351 content: "\e016";
352 }
353 .glyphicon-off:before {
354 content: "\e017";
355 }
356 .glyphicon-signal:before {
357 content: "\e018";
358 }
359 .glyphicon-cog:before {
360 content: "\e019";
361 }
362 .glyphicon-trash:before {
363 content: "\e020";
364 }
365 .glyphicon-home:before {
366 content: "\e021";
367 }
368 .glyphicon-file:before {
369 content: "\e022";
370 }
371 .glyphicon-time:before {
372 content: "\e023";
373 }
374 .glyphicon-road:before {
375 content: "\e024";
376 }
377 .glyphicon-download-alt:before {
378 content: "\e025";
379 }
380 .glyphicon-download:before {
381 content: "\e026";
382 }
383 .glyphicon-upload:before {
384 content: "\e027";
385 }
386 .glyphicon-inbox:before {
387 content: "\e028";
388 }
389 .glyphicon-play-circle:before {
390 content: "\e029";
391 }
392 .glyphicon-repeat:before {
393 content: "\e030";
394 }
395 .glyphicon-refresh:before {
396 content: "\e031";
397 }
398 .glyphicon-list-alt:before {
399 content: "\e032";
400 }
401 .glyphicon-lock:before {
402 content: "\e033";
403 }
404 .glyphicon-flag:before {
405 content: "\e034";
406 }
407 .glyphicon-headphones:before {
408 content: "\e035";
409 }
410 .glyphicon-volume-off:before {
411 content: "\e036";
412 }
413 .glyphicon-volume-down:before {
414 content: "\e037";
415 }
416 .glyphicon-volume-up:before {
417 content: "\e038";
418 }
419 .glyphicon-qrcode:before {
420 content: "\e039";
421 }
422 .glyphicon-barcode:before {
423 content: "\e040";
424 }
425 .glyphicon-tag:before {
426 content: "\e041";
427 }
428 .glyphicon-tags:before {
429 content: "\e042";
430 }
431 .glyphicon-book:before {
432 content: "\e043";
433 }
434 .glyphicon-bookmark:before {
435 content: "\e044";
436 }
437 .glyphicon-print:before {
438 content: "\e045";
439 }
440 .glyphicon-camera:before {
441 content: "\e046";
442 }
443 .glyphicon-font:before {
444 content: "\e047";
445 }
446 .glyphicon-bold:before {
447 content: "\e048";
448 }
449 .glyphicon-italic:before {
450 content: "\e049";
451 }
452 .glyphicon-text-height:before {
453 content: "\e050";
454 }
455 .glyphicon-text-width:before {
456 content: "\e051";
457 }
458 .glyphicon-align-left:before {
459 content: "\e052";
460 }
461 .glyphicon-align-center:before {
462 content: "\e053";
463 }
464 .glyphicon-align-right:before {
465 content: "\e054";
466 }
467 .glyphicon-align-justify:before {
468 content: "\e055";
469 }
470 .glyphicon-list:before {
471 content: "\e056";
472 }
473 .glyphicon-indent-left:before {
474 content: "\e057";
475 }
476 .glyphicon-indent-right:before {
477 content: "\e058";
478 }
479 .glyphicon-facetime-video:before {
480 content: "\e059";
481 }
482 .glyphicon-picture:before {
483 content: "\e060";
484 }
485 .glyphicon-map-marker:before {
486 content: "\e062";
487 }
488 .glyphicon-adjust:before {
489 content: "\e063";
490 }
491 .glyphicon-tint:before {
492 content: "\e064";
493 }
494 .glyphicon-edit:before {
495 content: "\e065";
496 }
497 .glyphicon-share:before {
498 content: "\e066";
499 }
500 .glyphicon-check:before {
501 content: "\e067";
502 }
503 .glyphicon-move:before {
504 content: "\e068";
505 }
506 .glyphicon-step-backward:before {
507 content: "\e069";
508 }
509 .glyphicon-fast-backward:before {
510 content: "\e070";
511 }
512 .glyphicon-backward:before {
513 content: "\e071";
514 }
515 .glyphicon-play:before {
516 content: "\e072";
517 }
518 .glyphicon-pause:before {
519 content: "\e073";
520 }
521 .glyphicon-stop:before {
522 content: "\e074";
523 }
524 .glyphicon-forward:before {
525 content: "\e075";
526 }
527 .glyphicon-fast-forward:before {
528 content: "\e076";
529 }
530 .glyphicon-step-forward:before {
531 content: "\e077";
532 }
533 .glyphicon-eject:before {
534 content: "\e078";
535 }
536 .glyphicon-chevron-left:before {
537 content: "\e079";
538 }
539 .glyphicon-chevron-right:before {
540 content: "\e080";
541 }
542 .glyphicon-plus-sign:before {
543 content: "\e081";
544 }
545 .glyphicon-minus-sign:before {
546 content: "\e082";
547 }
548 .glyphicon-remove-sign:before {
549 content: "\e083";
550 }
551 .glyphicon-ok-sign:before {
552 content: "\e084";
553 }
554 .glyphicon-question-sign:before {
555 content: "\e085";
556 }
557 .glyphicon-info-sign:before {
558 content: "\e086";
559 }
560 .glyphicon-screenshot:before {
561 content: "\e087";
562 }
563 .glyphicon-remove-circle:before {
564 content: "\e088";
565 }
566 .glyphicon-ok-circle:before {
567 content: "\e089";
568 }
569 .glyphicon-ban-circle:before {
570 content: "\e090";
571 }
572 .glyphicon-arrow-left:before {
573 content: "\e091";
574 }
575 .glyphicon-arrow-right:before {
576 content: "\e092";
577 }
578 .glyphicon-arrow-up:before {
579 content: "\e093";
580 }
581 .glyphicon-arrow-down:before {
582 content: "\e094";
583 }
584 .glyphicon-share-alt:before {
585 content: "\e095";
586 }
587 .glyphicon-resize-full:before {
588 content: "\e096";
589 }
590 .glyphicon-resize-small:before {
591 content: "\e097";
592 }
593 .glyphicon-exclamation-sign:before {
594 content: "\e101";
595 }
596 .glyphicon-gift:before {
597 content: "\e102";
598 }
599 .glyphicon-leaf:before {
600 content: "\e103";
601 }
602 .glyphicon-fire:before {
603 content: "\e104";
604 }
605 .glyphicon-eye-open:before {
606 content: "\e105";
607 }
608 .glyphicon-eye-close:before {
609 content: "\e106";
610 }
611 .glyphicon-warning-sign:before {
612 content: "\e107";
613 }
614 .glyphicon-plane:before {
615 content: "\e108";
616 }
617 .glyphicon-calendar:before {
618 content: "\e109";
619 }
620 .glyphicon-random:before {
621 content: "\e110";
622 }
623 .glyphicon-comment:before {
624 content: "\e111";
625 }
626 .glyphicon-magnet:before {
627 content: "\e112";
628 }
629 .glyphicon-chevron-up:before {
630 content: "\e113";
631 }
632 .glyphicon-chevron-down:before {
633 content: "\e114";
634 }
635 .glyphicon-retweet:before {
636 content: "\e115";
637 }
638 .glyphicon-shopping-cart:before {
639 content: "\e116";
640 }
641 .glyphicon-folder-close:before {
642 content: "\e117";
643 }
644 .glyphicon-folder-open:before {
645 content: "\e118";
646 }
647 .glyphicon-resize-vertical:before {
648 content: "\e119";
649 }
650 .glyphicon-resize-horizontal:before {
651 content: "\e120";
652 }
653 .glyphicon-hdd:before {
654 content: "\e121";
655 }
656 .glyphicon-bullhorn:before {
657 content: "\e122";
658 }
659 .glyphicon-bell:before {
660 content: "\e123";
661 }
662 .glyphicon-certificate:before {
663 content: "\e124";
664 }
665 .glyphicon-thumbs-up:before {
666 content: "\e125";
667 }
668 .glyphicon-thumbs-down:before {
669 content: "\e126";
670 }
671 .glyphicon-hand-right:before {
672 content: "\e127";
673 }
674 .glyphicon-hand-left:before {
675 content: "\e128";
676 }
677 .glyphicon-hand-up:before {
678 content: "\e129";
679 }
680 .glyphicon-hand-down:before {
681 content: "\e130";
682 }
683 .glyphicon-circle-arrow-right:before {
684 content: "\e131";
685 }
686 .glyphicon-circle-arrow-left:before {
687 content: "\e132";
688 }
689 .glyphicon-circle-arrow-up:before {
690 content: "\e133";
691 }
692 .glyphicon-circle-arrow-down:before {
693 content: "\e134";
694 }
695 .glyphicon-globe:before {
696 content: "\e135";
697 }
698 .glyphicon-wrench:before {
699 content: "\e136";
700 }
701 .glyphicon-tasks:before {
702 content: "\e137";
703 }
704 .glyphicon-filter:before {
705 content: "\e138";
706 }
707 .glyphicon-briefcase:before {
708 content: "\e139";
709 }
710 .glyphicon-fullscreen:before {
711 content: "\e140";
712 }
713 .glyphicon-dashboard:before {
714 content: "\e141";
715 }
716 .glyphicon-paperclip:before {
717 content: "\e142";
718 }
719 .glyphicon-heart-empty:before {
720 content: "\e143";
721 }
722 .glyphicon-link:before {
723 content: "\e144";
724 }
725 .glyphicon-phone:before {
726 content: "\e145";
727 }
728 .glyphicon-pushpin:before {
729 content: "\e146";
730 }
731 .glyphicon-usd:before {
732 content: "\e148";
733 }
734 .glyphicon-gbp:before {
735 content: "\e149";
736 }
737 .glyphicon-sort:before {
738 content: "\e150";
739 }
740 .glyphicon-sort-by-alphabet:before {
741 content: "\e151";
742 }
743 .glyphicon-sort-by-alphabet-alt:before {
744 content: "\e152";
745 }
746 .glyphicon-sort-by-order:before {
747 content: "\e153";
748 }
749 .glyphicon-sort-by-order-alt:before {
750 content: "\e154";
751 }
752 .glyphicon-sort-by-attributes:before {
753 content: "\e155";
754 }
755 .glyphicon-sort-by-attributes-alt:before {
756 content: "\e156";
757 }
758 .glyphicon-unchecked:before {
759 content: "\e157";
760 }
761 .glyphicon-expand:before {
762 content: "\e158";
763 }
764 .glyphicon-collapse-down:before {
765 content: "\e159";
766 }
767 .glyphicon-collapse-up:before {
768 content: "\e160";
769 }
770 .glyphicon-log-in:before {
771 content: "\e161";
772 }
773 .glyphicon-flash:before {
774 content: "\e162";
775 }
776 .glyphicon-log-out:before {
777 content: "\e163";
778 }
779 .glyphicon-new-window:before {
780 content: "\e164";
781 }
782 .glyphicon-record:before {
783 content: "\e165";
784 }
785 .glyphicon-save:before {
786 content: "\e166";
787 }
788 .glyphicon-open:before {
789 content: "\e167";
790 }
791 .glyphicon-saved:before {
792 content: "\e168";
793 }
794 .glyphicon-import:before {
795 content: "\e169";
796 }
797 .glyphicon-export:before {
798 content: "\e170";
799 }
800 .glyphicon-send:before {
801 content: "\e171";
802 }
803 .glyphicon-floppy-disk:before {
804 content: "\e172";
805 }
806 .glyphicon-floppy-saved:before {
807 content: "\e173";
808 }
809 .glyphicon-floppy-remove:before {
810 content: "\e174";
811 }
812 .glyphicon-floppy-save:before {
813 content: "\e175";
814 }
815 .glyphicon-floppy-open:before {
816 content: "\e176";
817 }
818 .glyphicon-credit-card:before {
819 content: "\e177";
820 }
821 .glyphicon-transfer:before {
822 content: "\e178";
823 }
824 .glyphicon-cutlery:before {
825 content: "\e179";
826 }
827 .glyphicon-header:before {
828 content: "\e180";
829 }
830 .glyphicon-compressed:before {
831 content: "\e181";
832 }
833 .glyphicon-earphone:before {
834 content: "\e182";
835 }
836 .glyphicon-phone-alt:before {
837 content: "\e183";
838 }
839 .glyphicon-tower:before {
840 content: "\e184";
841 }
842 .glyphicon-stats:before {
843 content: "\e185";
844 }
845 .glyphicon-sd-video:before {
846 content: "\e186";
847 }
848 .glyphicon-hd-video:before {
849 content: "\e187";
850 }
851 .glyphicon-subtitles:before {
852 content: "\e188";
853 }
854 .glyphicon-sound-stereo:before {
855 content: "\e189";
856 }
857 .glyphicon-sound-dolby:before {
858 content: "\e190";
859 }
860 .glyphicon-sound-5-1:before {
861 content: "\e191";
862 }
863 .glyphicon-sound-6-1:before {
864 content: "\e192";
865 }
866 .glyphicon-sound-7-1:before {
867 content: "\e193";
868 }
869 .glyphicon-copyright-mark:before {
870 content: "\e194";
871 }
872 .glyphicon-registration-mark:before {
873 content: "\e195";
874 }
875 .glyphicon-cloud-download:before {
876 content: "\e197";
877 }
878 .glyphicon-cloud-upload:before {
879 content: "\e198";
880 }
881 .glyphicon-tree-conifer:before {
882 content: "\e199";
883 }
884 .glyphicon-tree-deciduous:before {
885 content: "\e200";
886 }
887 .glyphicon-cd:before {
888 content: "\e201";
889 }
890 .glyphicon-save-file:before {
891 content: "\e202";
892 }
893 .glyphicon-open-file:before {
894 content: "\e203";
895 }
896 .glyphicon-level-up:before {
897 content: "\e204";
898 }
899 .glyphicon-copy:before {
900 content: "\e205";
901 }
902 .glyphicon-paste:before {
903 content: "\e206";
904 }
905 .glyphicon-alert:before {
906 content: "\e209";
907 }
908 .glyphicon-equalizer:before {
909 content: "\e210";
910 }
911 .glyphicon-king:before {
912 content: "\e211";
913 }
914 .glyphicon-queen:before {
915 content: "\e212";
916 }
917 .glyphicon-pawn:before {
918 content: "\e213";
919 }
920 .glyphicon-bishop:before {
921 content: "\e214";
922 }
923 .glyphicon-knight:before {
924 content: "\e215";
925 }
926 .glyphicon-baby-formula:before {
927 content: "\e216";
928 }
929 .glyphicon-tent:before {
930 content: "\26fa";
931 }
932 .glyphicon-blackboard:before {
933 content: "\e218";
934 }
935 .glyphicon-bed:before {
936 content: "\e219";
937 }
938 .glyphicon-apple:before {
939 content: "\f8ff";
940 }
941 .glyphicon-erase:before {
942 content: "\e221";
943 }
944 .glyphicon-hourglass:before {
945 content: "\231b";
946 }
947 .glyphicon-lamp:before {
948 content: "\e223";
949 }
950 .glyphicon-duplicate:before {
951 content: "\e224";
952 }
953 .glyphicon-piggy-bank:before {
954 content: "\e225";
955 }
956 .glyphicon-scissors:before {
957 content: "\e226";
958 }
959 .glyphicon-bitcoin:before {
960 content: "\e227";
961 }
962 .glyphicon-btc:before {
963 content: "\e227";
964 }
965 .glyphicon-xbt:before {
966 content: "\e227";
967 }
968 .glyphicon-yen:before {
969 content: "\00a5";
970 }
971 .glyphicon-jpy:before {
972 content: "\00a5";
973 }
974 .glyphicon-ruble:before {
975 content: "\20bd";
976 }
977 .glyphicon-rub:before {
978 content: "\20bd";
979 }
980 .glyphicon-scale:before {
981 content: "\e230";
982 }
983 .glyphicon-ice-lolly:before {
984 content: "\e231";
985 }
986 .glyphicon-ice-lolly-tasted:before {
987 content: "\e232";
988 }
989 .glyphicon-education:before {
990 content: "\e233";
991 }
992 .glyphicon-option-horizontal:before {
993 content: "\e234";
994 }
995 .glyphicon-option-vertical:before {
996 content: "\e235";
997 }
998 .glyphicon-menu-hamburger:before {
999 content: "\e236";
1000 }
1001 .glyphicon-modal-window:before {
1002 content: "\e237";
1003 }
1004 .glyphicon-oil:before {
1005 content: "\e238";
1006 }
1007 .glyphicon-grain:before {
1008 content: "\e239";
1009 }
1010 .glyphicon-sunglasses:before {
1011 content: "\e240";
1012 }
1013 .glyphicon-text-size:before {
1014 content: "\e241";
1015 }
1016 .glyphicon-text-color:before {
1017 content: "\e242";
1018 }
1019 .glyphicon-text-background:before {
1020 content: "\e243";
1021 }
1022 .glyphicon-object-align-top:before {
1023 content: "\e244";
1024 }
1025 .glyphicon-object-align-bottom:before {
1026 content: "\e245";
1027 }
1028 .glyphicon-object-align-horizontal:before {
1029 content: "\e246";
1030 }
1031 .glyphicon-object-align-left:before {
1032 content: "\e247";
1033 }
1034 .glyphicon-object-align-vertical:before {
1035 content: "\e248";
1036 }
1037 .glyphicon-object-align-right:before {
1038 content: "\e249";
1039 }
1040 .glyphicon-triangle-right:before {
1041 content: "\e250";
1042 }
1043 .glyphicon-triangle-left:before {
1044 content: "\e251";
1045 }
1046 .glyphicon-triangle-bottom:before {
1047 content: "\e252";
1048 }
1049 .glyphicon-triangle-top:before {
1050 content: "\e253";
1051 }
1052 .glyphicon-console:before {
1053 content: "\e254";
1054 }
1055 .glyphicon-superscript:before {
1056 content: "\e255";
1057 }
1058 .glyphicon-subscript:before {
1059 content: "\e256";
1060 }
1061 .glyphicon-menu-left:before {
1062 content: "\e257";
1063 }
1064 .glyphicon-menu-right:before {
1065 content: "\e258";
1066 }
1067 .glyphicon-menu-down:before {
1068 content: "\e259";
1069 }
1070 .glyphicon-menu-up:before {
1071 content: "\e260";
1072 }
1073 * {
1074 -webkit-box-sizing: border-box;
1075 -moz-box-sizing: border-box;
1076 box-sizing: border-box;
1077 }
1078 *:before,
1079 *:after {
1080 -webkit-box-sizing: border-box;
1081 -moz-box-sizing: border-box;
1082 box-sizing: border-box;
1083 }
1084 html {
1085 font-size: 10px;
1086
1087 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1088 }
1089 body {
1090 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
1091 font-size: 14px;
1092 line-height: 1.42857143;
1093 color: #333;
1094 background-color: #fff;
1095 }
1096 input,
1097 button,
1098 select,
1099 textarea {
1100 font-family: inherit;
1101 font-size: inherit;
1102 line-height: inherit;
1103 }
1104 a {
1105 color: #337ab7;
1106 text-decoration: none;
1107 }
1108 a:hover,
1109 a:focus {
1110 color: #23527c;
1111 text-decoration: underline;
1112 }
1113 a:focus {
1114 outline: 5px auto -webkit-focus-ring-color;
1115 outline-offset: -2px;
1116 }
1117 figure {
1118 margin: 0;
1119 }
1120 img {
1121 vertical-align: middle;
1122 }
1123 .img-responsive,
1124 .thumbnail > img,
1125 .thumbnail a > img,
1126 .carousel-inner > .item > img,
1127 .carousel-inner > .item > a > img {
1128 display: block;
1129 max-width: 100%;
1130 height: auto;
1131 }
1132 .img-rounded {
1133 border-radius: 6px;
1134 }
1135 .img-thumbnail {
1136 display: inline-block;
1137 max-width: 100%;
1138 height: auto;
1139 padding: 4px;
1140 line-height: 1.42857143;
1141 background-color: #fff;
1142 border: 1px solid #ddd;
1143 border-radius: 4px;
1144 -webkit-transition: all .2s ease-in-out;
1145 -o-transition: all .2s ease-in-out;
1146 transition: all .2s ease-in-out;
1147 }
1148 .img-circle {
1149 border-radius: 50%;
1150 }
1151 hr {
1152 margin-top: 20px;
1153 margin-bottom: 20px;
1154 border: 0;
1155 border-top: 1px solid #eee;
1156 }
1157 .sr-only {
1158 position: absolute;
1159 width: 1px;
1160 height: 1px;
1161 padding: 0;
1162 margin: -1px;
1163 overflow: hidden;
1164 clip: rect(0, 0, 0, 0);
1165 border: 0;
1166 }
1167 .sr-only-focusable:active,
1168 .sr-only-focusable:focus {
1169 position: static;
1170 width: auto;
1171 height: auto;
1172 margin: 0;
1173 overflow: visible;
1174 clip: auto;
1175 }
1176 [role="button"] {
1177 cursor: pointer;
1178 }
1179 h1,
1180 h2,
1181 h3,
1182 h4,
1183 h5,
1184 h6,
1185 .h1,
1186 .h2,
1187 .h3,
1188 .h4,
1189 .h5,
1190 .h6 {
1191 font-family: inherit;
1192 font-weight: 500;
1193 line-height: 1.1;
1194 color: inherit;
1195 }
1196 h1 small,
1197 h2 small,
1198 h3 small,
1199 h4 small,
1200 h5 small,
1201 h6 small,
1202 .h1 small,
1203 .h2 small,
1204 .h3 small,
1205 .h4 small,
1206 .h5 small,
1207 .h6 small,
1208 h1 .small,
1209 h2 .small,
1210 h3 .small,
1211 h4 .small,
1212 h5 .small,
1213 h6 .small,
1214 .h1 .small,
1215 .h2 .small,
1216 .h3 .small,
1217 .h4 .small,
1218 .h5 .small,
1219 .h6 .small {
1220 font-weight: normal;
1221 line-height: 1;
1222 color: #777;
1223 }
1224 h1,
1225 .h1,
1226 h2,
1227 .h2,
1228 h3,
1229 .h3 {
1230 margin-top: 20px;
1231 margin-bottom: 10px;
1232 }
1233 h1 small,
1234 .h1 small,
1235 h2 small,
1236 .h2 small,
1237 h3 small,
1238 .h3 small,
1239 h1 .small,
1240 .h1 .small,
1241 h2 .small,
1242 .h2 .small,
1243 h3 .small,
1244 .h3 .small {
1245 font-size: 65%;
1246 }
1247 h4,
1248 .h4,
1249 h5,
1250 .h5,
1251 h6,
1252 .h6 {
1253 margin-top: 10px;
1254 margin-bottom: 10px;
1255 }
1256 h4 small,
1257 .h4 small,
1258 h5 small,
1259 .h5 small,
1260 h6 small,
1261 .h6 small,
1262 h4 .small,
1263 .h4 .small,
1264 h5 .small,
1265 .h5 .small,
1266 h6 .small,
1267 .h6 .small {
1268 font-size: 75%;
1269 }
1270 h1,
1271 .h1 {
1272 font-size: 36px;
1273 }
1274 h2,
1275 .h2 {
1276 font-size: 30px;
1277 }
1278 h3,
1279 .h3 {
1280 font-size: 24px;
1281 }
1282 h4,
1283 .h4 {
1284 font-size: 18px;
1285 }
1286 h5,
1287 .h5 {
1288 font-size: 14px;
1289 }
1290 h6,
1291 .h6 {
1292 font-size: 12px;
1293 }
1294 p {
1295 margin: 0 0 10px;
1296 }
1297 .lead {
1298 margin-bottom: 20px;
1299 font-size: 16px;
1300 font-weight: 300;
1301 line-height: 1.4;
1302 }
1303 @media (min-width: 768px) {
1304 .lead {
1305 font-size: 21px;
1306 }
1307 }
1308 small,
1309 .small {
1310 font-size: 85%;
1311 }
1312 mark,
1313 .mark {
1314 padding: .2em;
1315 background-color: #fcf8e3;
1316 }
1317 .text-left {
1318 text-align: left;
1319 }
1320 .text-right {
1321 text-align: right;
1322 }
1323 .text-center {
1324 text-align: center;
1325 }
1326 .text-justify {
1327 text-align: justify;
1328 }
1329 .text-nowrap {
1330 white-space: nowrap;
1331 }
1332 .text-lowercase {
1333 text-transform: lowercase;
1334 }
1335 .text-uppercase {
1336 text-transform: uppercase;
1337 }
1338 .text-capitalize {
1339 text-transform: capitalize;
1340 }
1341 .text-muted {
1342 color: #777;
1343 }
1344 .text-primary {
1345 color: #337ab7;
1346 }
1347 a.text-primary:hover,
1348 a.text-primary:focus {
1349 color: #286090;
1350 }
1351 .text-success {
1352 color: #3c763d;
1353 }
1354 a.text-success:hover,
1355 a.text-success:focus {
1356 color: #2b542c;
1357 }
1358 .text-info {
1359 color: #31708f;
1360 }
1361 a.text-info:hover,
1362 a.text-info:focus {
1363 color: #245269;
1364 }
1365 .text-warning {
1366 color: #8a6d3b;
1367 }
1368 a.text-warning:hover,
1369 a.text-warning:focus {
1370 color: #66512c;
1371 }
1372 .text-danger {
1373 color: #a94442;
1374 }
1375 a.text-danger:hover,
1376 a.text-danger:focus {
1377 color: #843534;
1378 }
1379 .bg-primary {
1380 color: #fff;
1381 background-color: #337ab7;
1382 }
1383 a.bg-primary:hover,
1384 a.bg-primary:focus {
1385 background-color: #286090;
1386 }
1387 .bg-success {
1388 background-color: #dff0d8;
1389 }
1390 a.bg-success:hover,
1391 a.bg-success:focus {
1392 background-color: #c1e2b3;
1393 }
1394 .bg-info {
1395 background-color: #d9edf7;
1396 }
1397 a.bg-info:hover,
1398 a.bg-info:focus {
1399 background-color: #afd9ee;
1400 }
1401 .bg-warning {
1402 background-color: #fcf8e3;
1403 }
1404 a.bg-warning:hover,
1405 a.bg-warning:focus {
1406 background-color: #f7ecb5;
1407 }
1408 .bg-danger {
1409 background-color: #f2dede;
1410 }
1411 a.bg-danger:hover,
1412 a.bg-danger:focus {
1413 background-color: #e4b9b9;
1414 }
1415 .page-header {
1416 padding-bottom: 9px;
1417 margin: 40px 0 20px;
1418 border-bottom: 1px solid #eee;
1419 }
1420 ul,
1421 ol {
1422 margin-top: 0;
1423 margin-bottom: 10px;
1424 }
1425 ul ul,
1426 ol ul,
1427 ul ol,
1428 ol ol {
1429 margin-bottom: 0;
1430 }
1431 .list-unstyled {
1432 padding-left: 0;
1433 list-style: none;
1434 }
1435 .list-inline {
1436 padding-left: 0;
1437 margin-left: -5px;
1438 list-style: none;
1439 }
1440 .list-inline > li {
1441 display: inline-block;
1442 padding-right: 5px;
1443 padding-left: 5px;
1444 }
1445 dl {
1446 margin-top: 0;
1447 margin-bottom: 20px;
1448 }
1449 dt,
1450 dd {
1451 line-height: 1.42857143;
1452 }
1453 dt {
1454 font-weight: bold;
1455 }
1456 dd {
1457 margin-left: 0;
1458 }
1459 @media (min-width: 768px) {
1460 .dl-horizontal dt {
1461 float: left;
1462 width: 160px;
1463 overflow: hidden;
1464 clear: left;
1465 text-align: right;
1466 text-overflow: ellipsis;
1467 white-space: nowrap;
1468 }
1469 .dl-horizontal dd {
1470 margin-left: 180px;
1471 }
1472 }
1473 abbr[title],
1474 abbr[data-original-title] {
1475 cursor: help;
1476 border-bottom: 1px dotted #777;
1477 }
1478 .initialism {
1479 font-size: 90%;
1480 text-transform: uppercase;
1481 }
1482 blockquote {
1483 padding: 10px 20px;
1484 margin: 0 0 20px;
1485 font-size: 17.5px;
1486 border-left: 5px solid #eee;
1487 }
1488 blockquote p:last-child,
1489 blockquote ul:last-child,
1490 blockquote ol:last-child {
1491 margin-bottom: 0;
1492 }
1493 blockquote footer,
1494 blockquote small,
1495 blockquote .small {
1496 display: block;
1497 font-size: 80%;
1498 line-height: 1.42857143;
1499 color: #777;
1500 }
1501 blockquote footer:before,
1502 blockquote small:before,
1503 blockquote .small:before {
1504 content: '\2014 \00A0';
1505 }
1506 .blockquote-reverse,
1507 blockquote.pull-right {
1508 padding-right: 15px;
1509 padding-left: 0;
1510 text-align: right;
1511 border-right: 5px solid #eee;
1512 border-left: 0;
1513 }
1514 .blockquote-reverse footer:before,
1515 blockquote.pull-right footer:before,
1516 .blockquote-reverse small:before,
1517 blockquote.pull-right small:before,
1518 .blockquote-reverse .small:before,
1519 blockquote.pull-right .small:before {
1520 content: '';
1521 }
1522 .blockquote-reverse footer:after,
1523 blockquote.pull-right footer:after,
1524 .blockquote-reverse small:after,
1525 blockquote.pull-right small:after,
1526 .blockquote-reverse .small:after,
1527 blockquote.pull-right .small:after {
1528 content: '\00A0 \2014';
1529 }
1530 address {
1531 margin-bottom: 20px;
1532 font-style: normal;
1533 line-height: 1.42857143;
1534 }
1535 code,
1536 kbd,
1537 pre,
1538 samp {
1539 font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1540 }
1541 code {
1542 padding: 2px 4px;
1543 font-size: 90%;
1544 color: #c7254e;
1545 background-color: #f9f2f4;
1546 border-radius: 4px;
1547 }
1548 kbd {
1549 padding: 2px 4px;
1550 font-size: 90%;
1551 color: #fff;
1552 background-color: #333;
1553 border-radius: 3px;
1554 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1555 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1556 }
1557 kbd kbd {
1558 padding: 0;
1559 font-size: 100%;
1560 font-weight: bold;
1561 -webkit-box-shadow: none;
1562 box-shadow: none;
1563 }
1564 pre {
1565 display: block;
1566 padding: 9.5px;
1567 margin: 0 0 10px;
1568 font-size: 13px;
1569 line-height: 1.42857143;
1570 color: #333;
1571 word-break: break-all;
1572 word-wrap: break-word;
1573 background-color: #f5f5f5;
1574 border: 1px solid #ccc;
1575 border-radius: 4px;
1576 }
1577 pre code {
1578 padding: 0;
1579 font-size: inherit;
1580 color: inherit;
1581 white-space: pre-wrap;
1582 background-color: transparent;
1583 border-radius: 0;
1584 }
1585 .pre-scrollable {
1586 max-height: 340px;
1587 overflow-y: scroll;
1588 }
1589 .container {
1590 padding-right: 15px;
1591 padding-left: 15px;
1592 margin-right: auto;
1593 margin-left: auto;
1594 }
1595 @media (min-width: 768px) {
1596 .container {
1597 width: 750px;
1598 }
1599 }
1600 @media (min-width: 992px) {
1601 .container {
1602 width: 970px;
1603 }
1604 }
1605 @media (min-width: 1200px) {
1606 .container {
1607 width: 1170px;
1608 }
1609 }
1610 .container-fluid {
1611 padding-right: 15px;
1612 padding-left: 15px;
1613 margin-right: auto;
1614 margin-left: auto;
1615 }
1616 .row {
1617 margin-right: -15px;
1618 margin-left: -15px;
1619 }
1620 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
1621 position: relative;
1622 min-height: 1px;
1623 padding-right: 15px;
1624 padding-left: 15px;
1625 }
1626 .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
1627 float: left;
1628 }
1629 .col-xs-12 {
1630 width: 100%;
1631 }
1632 .col-xs-11 {
1633 width: 91.66666667%;
1634 }
1635 .col-xs-10 {
1636 width: 83.33333333%;
1637 }
1638 .col-xs-9 {
1639 width: 75%;
1640 }
1641 .col-xs-8 {
1642 width: 66.66666667%;
1643 }
1644 .col-xs-7 {
1645 width: 58.33333333%;
1646 }
1647 .col-xs-6 {
1648 width: 50%;
1649 }
1650 .col-xs-5 {
1651 width: 41.66666667%;
1652 }
1653 .col-xs-4 {
1654 width: 33.33333333%;
1655 }
1656 .col-xs-3 {
1657 width: 25%;
1658 }
1659 .col-xs-2 {
1660 width: 16.66666667%;
1661 }
1662 .col-xs-1 {
1663 width: 8.33333333%;
1664 }
1665 .col-xs-pull-12 {
1666 right: 100%;
1667 }
1668 .col-xs-pull-11 {
1669 right: 91.66666667%;
1670 }
1671 .col-xs-pull-10 {
1672 right: 83.33333333%;
1673 }
1674 .col-xs-pull-9 {
1675 right: 75%;
1676 }
1677 .col-xs-pull-8 {
1678 right: 66.66666667%;
1679 }
1680 .col-xs-pull-7 {
1681 right: 58.33333333%;
1682 }
1683 .col-xs-pull-6 {
1684 right: 50%;
1685 }
1686 .col-xs-pull-5 {
1687 right: 41.66666667%;
1688 }
1689 .col-xs-pull-4 {
1690 right: 33.33333333%;
1691 }
1692 .col-xs-pull-3 {
1693 right: 25%;
1694 }
1695 .col-xs-pull-2 {
1696 right: 16.66666667%;
1697 }
1698 .col-xs-pull-1 {
1699 right: 8.33333333%;
1700 }
1701 .col-xs-pull-0 {
1702 right: auto;
1703 }
1704 .col-xs-push-12 {
1705 left: 100%;
1706 }
1707 .col-xs-push-11 {
1708 left: 91.66666667%;
1709 }
1710 .col-xs-push-10 {
1711 left: 83.33333333%;
1712 }
1713 .col-xs-push-9 {
1714 left: 75%;
1715 }
1716 .col-xs-push-8 {
1717 left: 66.66666667%;
1718 }
1719 .col-xs-push-7 {
1720 left: 58.33333333%;
1721 }
1722 .col-xs-push-6 {
1723 left: 50%;
1724 }
1725 .col-xs-push-5 {
1726 left: 41.66666667%;
1727 }
1728 .col-xs-push-4 {
1729 left: 33.33333333%;
1730 }
1731 .col-xs-push-3 {
1732 left: 25%;
1733 }
1734 .col-xs-push-2 {
1735 left: 16.66666667%;
1736 }
1737 .col-xs-push-1 {
1738 left: 8.33333333%;
1739 }
1740 .col-xs-push-0 {
1741 left: auto;
1742 }
1743 .col-xs-offset-12 {
1744 margin-left: 100%;
1745 }
1746 .col-xs-offset-11 {
1747 margin-left: 91.66666667%;
1748 }
1749 .col-xs-offset-10 {
1750 margin-left: 83.33333333%;
1751 }
1752 .col-xs-offset-9 {
1753 margin-left: 75%;
1754 }
1755 .col-xs-offset-8 {
1756 margin-left: 66.66666667%;
1757 }
1758 .col-xs-offset-7 {
1759 margin-left: 58.33333333%;
1760 }
1761 .col-xs-offset-6 {
1762 margin-left: 50%;
1763 }
1764 .col-xs-offset-5 {
1765 margin-left: 41.66666667%;
1766 }
1767 .col-xs-offset-4 {
1768 margin-left: 33.33333333%;
1769 }
1770 .col-xs-offset-3 {
1771 margin-left: 25%;
1772 }
1773 .col-xs-offset-2 {
1774 margin-left: 16.66666667%;
1775 }
1776 .col-xs-offset-1 {
1777 margin-left: 8.33333333%;
1778 }
1779 .col-xs-offset-0 {
1780 margin-left: 0;
1781 }
1782 @media (min-width: 768px) {
1783 .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
1784 float: left;
1785 }
1786 .col-sm-12 {
1787 width: 100%;
1788 }
1789 .col-sm-11 {
1790 width: 91.66666667%;
1791 }
1792 .col-sm-10 {
1793 width: 83.33333333%;
1794 }
1795 .col-sm-9 {
1796 width: 75%;
1797 }
1798 .col-sm-8 {
1799 width: 66.66666667%;
1800 }
1801 .col-sm-7 {
1802 width: 58.33333333%;
1803 }
1804 .col-sm-6 {
1805 width: 50%;
1806 }
1807 .col-sm-5 {
1808 width: 41.66666667%;
1809 }
1810 .col-sm-4 {
1811 width: 33.33333333%;
1812 }
1813 .col-sm-3 {
1814 width: 25%;
1815 }
1816 .col-sm-2 {
1817 width: 16.66666667%;
1818 }
1819 .col-sm-1 {
1820 width: 8.33333333%;
1821 }
1822 .col-sm-pull-12 {
1823 right: 100%;
1824 }
1825 .col-sm-pull-11 {
1826 right: 91.66666667%;
1827 }
1828 .col-sm-pull-10 {
1829 right: 83.33333333%;
1830 }
1831 .col-sm-pull-9 {
1832 right: 75%;
1833 }
1834 .col-sm-pull-8 {
1835 right: 66.66666667%;
1836 }
1837 .col-sm-pull-7 {
1838 right: 58.33333333%;
1839 }
1840 .col-sm-pull-6 {
1841 right: 50%;
1842 }
1843 .col-sm-pull-5 {
1844 right: 41.66666667%;
1845 }
1846 .col-sm-pull-4 {
1847 right: 33.33333333%;
1848 }
1849 .col-sm-pull-3 {
1850 right: 25%;
1851 }
1852 .col-sm-pull-2 {
1853 right: 16.66666667%;
1854 }
1855 .col-sm-pull-1 {
1856 right: 8.33333333%;
1857 }
1858 .col-sm-pull-0 {
1859 right: auto;
1860 }
1861 .col-sm-push-12 {
1862 left: 100%;
1863 }
1864 .col-sm-push-11 {
1865 left: 91.66666667%;
1866 }
1867 .col-sm-push-10 {
1868 left: 83.33333333%;
1869 }
1870 .col-sm-push-9 {
1871 left: 75%;
1872 }
1873 .col-sm-push-8 {
1874 left: 66.66666667%;
1875 }
1876 .col-sm-push-7 {
1877 left: 58.33333333%;
1878 }
1879 .col-sm-push-6 {
1880 left: 50%;
1881 }
1882 .col-sm-push-5 {
1883 left: 41.66666667%;
1884 }
1885 .col-sm-push-4 {
1886 left: 33.33333333%;
1887 }
1888 .col-sm-push-3 {
1889 left: 25%;
1890 }
1891 .col-sm-push-2 {
1892 left: 16.66666667%;
1893 }
1894 .col-sm-push-1 {
1895 left: 8.33333333%;
1896 }
1897 .col-sm-push-0 {
1898 left: auto;
1899 }
1900 .col-sm-offset-12 {
1901 margin-left: 100%;
1902 }
1903 .col-sm-offset-11 {
1904 margin-left: 91.66666667%;
1905 }
1906 .col-sm-offset-10 {
1907 margin-left: 83.33333333%;
1908 }
1909 .col-sm-offset-9 {
1910 margin-left: 75%;
1911 }
1912 .col-sm-offset-8 {
1913 margin-left: 66.66666667%;
1914 }
1915 .col-sm-offset-7 {
1916 margin-left: 58.33333333%;
1917 }
1918 .col-sm-offset-6 {
1919 margin-left: 50%;
1920 }
1921 .col-sm-offset-5 {
1922 margin-left: 41.66666667%;
1923 }
1924 .col-sm-offset-4 {
1925 margin-left: 33.33333333%;
1926 }
1927 .col-sm-offset-3 {
1928 margin-left: 25%;
1929 }
1930 .col-sm-offset-2 {
1931 margin-left: 16.66666667%;
1932 }
1933 .col-sm-offset-1 {
1934 margin-left: 8.33333333%;
1935 }
1936 .col-sm-offset-0 {
1937 margin-left: 0;
1938 }
1939 }
1940 @media (min-width: 992px) {
1941 .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1942 float: left;
1943 }
1944 .col-md-12 {
1945 width: 100%;
1946 }
1947 .col-md-11 {
1948 width: 91.66666667%;
1949 }
1950 .col-md-10 {
1951 width: 83.33333333%;
1952 }
1953 .col-md-9 {
1954 width: 75%;
1955 }
1956 .col-md-8 {
1957 width: 66.66666667%;
1958 }
1959 .col-md-7 {
1960 width: 58.33333333%;
1961 }
1962 .col-md-6 {
1963 width: 50%;
1964 }
1965 .col-md-5 {
1966 width: 41.66666667%;
1967 }
1968 .col-md-4 {
1969 width: 33.33333333%;
1970 }
1971 .col-md-3 {
1972 width: 25%;
1973 }
1974 .col-md-2 {
1975 width: 16.66666667%;
1976 }
1977 .col-md-1 {
1978 width: 8.33333333%;
1979 }
1980 .col-md-pull-12 {
1981 right: 100%;
1982 }
1983 .col-md-pull-11 {
1984 right: 91.66666667%;
1985 }
1986 .col-md-pull-10 {
1987 right: 83.33333333%;
1988 }
1989 .col-md-pull-9 {
1990 right: 75%;
1991 }
1992 .col-md-pull-8 {
1993 right: 66.66666667%;
1994 }
1995 .col-md-pull-7 {
1996 right: 58.33333333%;
1997 }
1998 .col-md-pull-6 {
1999 right: 50%;
2000 }
2001 .col-md-pull-5 {
2002 right: 41.66666667%;
2003 }
2004 .col-md-pull-4 {
2005 right: 33.33333333%;
2006 }
2007 .col-md-pull-3 {
2008 right: 25%;
2009 }
2010 .col-md-pull-2 {
2011 right: 16.66666667%;
2012 }
2013 .col-md-pull-1 {
2014 right: 8.33333333%;
2015 }
2016 .col-md-pull-0 {
2017 right: auto;
2018 }
2019 .col-md-push-12 {
2020 left: 100%;
2021 }
2022 .col-md-push-11 {
2023 left: 91.66666667%;
2024 }
2025 .col-md-push-10 {
2026 left: 83.33333333%;
2027 }
2028 .col-md-push-9 {
2029 left: 75%;
2030 }
2031 .col-md-push-8 {
2032 left: 66.66666667%;
2033 }
2034 .col-md-push-7 {
2035 left: 58.33333333%;
2036 }
2037 .col-md-push-6 {
2038 left: 50%;
2039 }
2040 .col-md-push-5 {
2041 left: 41.66666667%;
2042 }
2043 .col-md-push-4 {
2044 left: 33.33333333%;
2045 }
2046 .col-md-push-3 {
2047 left: 25%;
2048 }
2049 .col-md-push-2 {
2050 left: 16.66666667%;
2051 }
2052 .col-md-push-1 {
2053 left: 8.33333333%;
2054 }
2055 .col-md-push-0 {
2056 left: auto;
2057 }
2058 .col-md-offset-12 {
2059 margin-left: 100%;
2060 }
2061 .col-md-offset-11 {
2062 margin-left: 91.66666667%;
2063 }
2064 .col-md-offset-10 {
2065 margin-left: 83.33333333%;
2066 }
2067 .col-md-offset-9 {
2068 margin-left: 75%;
2069 }
2070 .col-md-offset-8 {
2071 margin-left: 66.66666667%;
2072 }
2073 .col-md-offset-7 {
2074 margin-left: 58.33333333%;
2075 }
2076 .col-md-offset-6 {
2077 margin-left: 50%;
2078 }
2079 .col-md-offset-5 {
2080 margin-left: 41.66666667%;
2081 }
2082 .col-md-offset-4 {
2083 margin-left: 33.33333333%;
2084 }
2085 .col-md-offset-3 {
2086 margin-left: 25%;
2087 }
2088 .col-md-offset-2 {
2089 margin-left: 16.66666667%;
2090 }
2091 .col-md-offset-1 {
2092 margin-left: 8.33333333%;
2093 }
2094 .col-md-offset-0 {
2095 margin-left: 0;
2096 }
2097 }
2098 @media (min-width: 1200px) {
2099 .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
2100 float: left;
2101 }
2102 .col-lg-12 {
2103 width: 100%;
2104 }
2105 .col-lg-11 {
2106 width: 91.66666667%;
2107 }
2108 .col-lg-10 {
2109 width: 83.33333333%;
2110 }
2111 .col-lg-9 {
2112 width: 75%;
2113 }
2114 .col-lg-8 {
2115 width: 66.66666667%;
2116 }
2117 .col-lg-7 {
2118 width: 58.33333333%;
2119 }
2120 .col-lg-6 {
2121 width: 50%;
2122 }
2123 .col-lg-5 {
2124 width: 41.66666667%;
2125 }
2126 .col-lg-4 {
2127 width: 33.33333333%;
2128 }
2129 .col-lg-3 {
2130 width: 25%;
2131 }
2132 .col-lg-2 {
2133 width: 16.66666667%;
2134 }
2135 .col-lg-1 {
2136 width: 8.33333333%;
2137 }
2138 .col-lg-pull-12 {
2139 right: 100%;
2140 }
2141 .col-lg-pull-11 {
2142 right: 91.66666667%;
2143 }
2144 .col-lg-pull-10 {
2145 right: 83.33333333%;
2146 }
2147 .col-lg-pull-9 {
2148 right: 75%;
2149 }
2150 .col-lg-pull-8 {
2151 right: 66.66666667%;
2152 }
2153 .col-lg-pull-7 {
2154 right: 58.33333333%;
2155 }
2156 .col-lg-pull-6 {
2157 right: 50%;
2158 }
2159 .col-lg-pull-5 {
2160 right: 41.66666667%;
2161 }
2162 .col-lg-pull-4 {
2163 right: 33.33333333%;
2164 }
2165 .col-lg-pull-3 {
2166 right: 25%;
2167 }
2168 .col-lg-pull-2 {
2169 right: 16.66666667%;
2170 }
2171 .col-lg-pull-1 {
2172 right: 8.33333333%;
2173 }
2174 .col-lg-pull-0 {
2175 right: auto;
2176 }
2177 .col-lg-push-12 {
2178 left: 100%;
2179 }
2180 .col-lg-push-11 {
2181 left: 91.66666667%;
2182 }
2183 .col-lg-push-10 {
2184 left: 83.33333333%;
2185 }
2186 .col-lg-push-9 {
2187 left: 75%;
2188 }
2189 .col-lg-push-8 {
2190 left: 66.66666667%;
2191 }
2192 .col-lg-push-7 {
2193 left: 58.33333333%;
2194 }
2195 .col-lg-push-6 {
2196 left: 50%;
2197 }
2198 .col-lg-push-5 {
2199 left: 41.66666667%;
2200 }
2201 .col-lg-push-4 {
2202 left: 33.33333333%;
2203 }
2204 .col-lg-push-3 {
2205 left: 25%;
2206 }
2207 .col-lg-push-2 {
2208 left: 16.66666667%;
2209 }
2210 .col-lg-push-1 {
2211 left: 8.33333333%;
2212 }
2213 .col-lg-push-0 {
2214 left: auto;
2215 }
2216 .col-lg-offset-12 {
2217 margin-left: 100%;
2218 }
2219 .col-lg-offset-11 {
2220 margin-left: 91.66666667%;
2221 }
2222 .col-lg-offset-10 {
2223 margin-left: 83.33333333%;
2224 }
2225 .col-lg-offset-9 {
2226 margin-left: 75%;
2227 }
2228 .col-lg-offset-8 {
2229 margin-left: 66.66666667%;
2230 }
2231 .col-lg-offset-7 {
2232 margin-left: 58.33333333%;
2233 }
2234 .col-lg-offset-6 {
2235 margin-left: 50%;
2236 }
2237 .col-lg-offset-5 {
2238 margin-left: 41.66666667%;
2239 }
2240 .col-lg-offset-4 {
2241 margin-left: 33.33333333%;
2242 }
2243 .col-lg-offset-3 {
2244 margin-left: 25%;
2245 }
2246 .col-lg-offset-2 {
2247 margin-left: 16.66666667%;
2248 }
2249 .col-lg-offset-1 {
2250 margin-left: 8.33333333%;
2251 }
2252 .col-lg-offset-0 {
2253 margin-left: 0;
2254 }
2255 }
2256 table {
2257 background-color: transparent;
2258 }
2259 caption {
2260 padding-top: 8px;
2261 padding-bottom: 8px;
2262 color: #777;
2263 text-align: left;
2264 }
2265 th {
2266 text-align: left;
2267 }
2268 .table {
2269 width: 100%;
2270 max-width: 100%;
2271 margin-bottom: 20px;
2272 }
2273 .table > thead > tr > th,
2274 .table > tbody > tr > th,
2275 .table > tfoot > tr > th,
2276 .table > thead > tr > td,
2277 .table > tbody > tr > td,
2278 .table > tfoot > tr > td {
2279 padding: 8px;
2280 line-height: 1.42857143;
2281 vertical-align: top;
2282 border-top: 1px solid #ddd;
2283 }
2284 .table > thead > tr > th {
2285 vertical-align: bottom;
2286 border-bottom: 2px solid #ddd;
2287 }
2288 .table > caption + thead > tr:first-child > th,
2289 .table > colgroup + thead > tr:first-child > th,
2290 .table > thead:first-child > tr:first-child > th,
2291 .table > caption + thead > tr:first-child > td,
2292 .table > colgroup + thead > tr:first-child > td,
2293 .table > thead:first-child > tr:first-child > td {
2294 border-top: 0;
2295 }
2296 .table > tbody + tbody {
2297 border-top: 2px solid #ddd;
2298 }
2299 .table .table {
2300 background-color: #fff;
2301 }
2302 .table-condensed > thead > tr > th,
2303 .table-condensed > tbody > tr > th,
2304 .table-condensed > tfoot > tr > th,
2305 .table-condensed > thead > tr > td,
2306 .table-condensed > tbody > tr > td,
2307 .table-condensed > tfoot > tr > td {
2308 padding: 5px;
2309 }
2310 .table-bordered {
2311 border: 1px solid #ddd;
2312 }
2313 .table-bordered > thead > tr > th,
2314 .table-bordered > tbody > tr > th,
2315 .table-bordered > tfoot > tr > th,
2316 .table-bordered > thead > tr > td,
2317 .table-bordered > tbody > tr > td,
2318 .table-bordered > tfoot > tr > td {
2319 border: 1px solid #ddd;
2320 }
2321 .table-bordered > thead > tr > th,
2322 .table-bordered > thead > tr > td {
2323 border-bottom-width: 2px;
2324 }
2325 .table-striped > tbody > tr:nth-of-type(odd) {
2326 background-color: #f9f9f9;
2327 }
2328 .table-hover > tbody > tr:hover {
2329 background-color: #f5f5f5;
2330 }
2331 table col[class*="col-"] {
2332 position: static;
2333 display: table-column;
2334 float: none;
2335 }
2336 table td[class*="col-"],
2337 table th[class*="col-"] {
2338 position: static;
2339 display: table-cell;
2340 float: none;
2341 }
2342 .table > thead > tr > td.active,
2343 .table > tbody > tr > td.active,
2344 .table > tfoot > tr > td.active,
2345 .table > thead > tr > th.active,
2346 .table > tbody > tr > th.active,
2347 .table > tfoot > tr > th.active,
2348 .table > thead > tr.active > td,
2349 .table > tbody > tr.active > td,
2350 .table > tfoot > tr.active > td,
2351 .table > thead > tr.active > th,
2352 .table > tbody > tr.active > th,
2353 .table > tfoot > tr.active > th {
2354 background-color: #f5f5f5;
2355 }
2356 .table-hover > tbody > tr > td.active:hover,
2357 .table-hover > tbody > tr > th.active:hover,
2358 .table-hover > tbody > tr.active:hover > td,
2359 .table-hover > tbody > tr:hover > .active,
2360 .table-hover > tbody > tr.active:hover > th {
2361 background-color: #e8e8e8;
2362 }
2363 .table > thead > tr > td.success,
2364 .table > tbody > tr > td.success,
2365 .table > tfoot > tr > td.success,
2366 .table > thead > tr > th.success,
2367 .table > tbody > tr > th.success,
2368 .table > tfoot > tr > th.success,
2369 .table > thead > tr.success > td,
2370 .table > tbody > tr.success > td,
2371 .table > tfoot > tr.success > td,
2372 .table > thead > tr.success > th,
2373 .table > tbody > tr.success > th,
2374 .table > tfoot > tr.success > th {
2375 background-color: #dff0d8;
2376 }
2377 .table-hover > tbody > tr > td.success:hover,
2378 .table-hover > tbody > tr > th.success:hover,
2379 .table-hover > tbody > tr.success:hover > td,
2380 .table-hover > tbody > tr:hover > .success,
2381 .table-hover > tbody > tr.success:hover > th {
2382 background-color: #d0e9c6;
2383 }
2384 .table > thead > tr > td.info,
2385 .table > tbody > tr > td.info,
2386 .table > tfoot > tr > td.info,
2387 .table > thead > tr > th.info,
2388 .table > tbody > tr > th.info,
2389 .table > tfoot > tr > th.info,
2390 .table > thead > tr.info > td,
2391 .table > tbody > tr.info > td,
2392 .table > tfoot > tr.info > td,
2393 .table > thead > tr.info > th,
2394 .table > tbody > tr.info > th,
2395 .table > tfoot > tr.info > th {
2396 background-color: #d9edf7;
2397 }
2398 .table-hover > tbody > tr > td.info:hover,
2399 .table-hover > tbody > tr > th.info:hover,
2400 .table-hover > tbody > tr.info:hover > td,
2401 .table-hover > tbody > tr:hover > .info,
2402 .table-hover > tbody > tr.info:hover > th {
2403 background-color: #c4e3f3;
2404 }
2405 .table > thead > tr > td.warning,
2406 .table > tbody > tr > td.warning,
2407 .table > tfoot > tr > td.warning,
2408 .table > thead > tr > th.warning,
2409 .table > tbody > tr > th.warning,
2410 .table > tfoot > tr > th.warning,
2411 .table > thead > tr.warning > td,
2412 .table > tbody > tr.warning > td,
2413 .table > tfoot > tr.warning > td,
2414 .table > thead > tr.warning > th,
2415 .table > tbody > tr.warning > th,
2416 .table > tfoot > tr.warning > th {
2417 background-color: #fcf8e3;
2418 }
2419 .table-hover > tbody > tr > td.warning:hover,
2420 .table-hover > tbody > tr > th.warning:hover,
2421 .table-hover > tbody > tr.warning:hover > td,
2422 .table-hover > tbody > tr:hover > .warning,
2423 .table-hover > tbody > tr.warning:hover > th {
2424 background-color: #faf2cc;
2425 }
2426 .table > thead > tr > td.danger,
2427 .table > tbody > tr > td.danger,
2428 .table > tfoot > tr > td.danger,
2429 .table > thead > tr > th.danger,
2430 .table > tbody > tr > th.danger,
2431 .table > tfoot > tr > th.danger,
2432 .table > thead > tr.danger > td,
2433 .table > tbody > tr.danger > td,
2434 .table > tfoot > tr.danger > td,
2435 .table > thead > tr.danger > th,
2436 .table > tbody > tr.danger > th,
2437 .table > tfoot > tr.danger > th {
2438 background-color: #f2dede;
2439 }
2440 .table-hover > tbody > tr > td.danger:hover,
2441 .table-hover > tbody > tr > th.danger:hover,
2442 .table-hover > tbody > tr.danger:hover > td,
2443 .table-hover > tbody > tr:hover > .danger,
2444 .table-hover > tbody > tr.danger:hover > th {
2445 background-color: #ebcccc;
2446 }
2447 .table-responsive {
2448 min-height: .01%;
2449 overflow-x: auto;
2450 }
2451 @media screen and (max-width: 767px) {
2452 .table-responsive {
2453 width: 100%;
2454 margin-bottom: 15px;
2455 overflow-y: hidden;
2456 -ms-overflow-style: -ms-autohiding-scrollbar;
2457 border: 1px solid #ddd;
2458 }
2459 .table-responsive > .table {
2460 margin-bottom: 0;
2461 }
2462 .table-responsive > .table > thead > tr > th,
2463 .table-responsive > .table > tbody > tr > th,
2464 .table-responsive > .table > tfoot > tr > th,
2465 .table-responsive > .table > thead > tr > td,
2466 .table-responsive > .table > tbody > tr > td,
2467 .table-responsive > .table > tfoot > tr > td {
2468 white-space: nowrap;
2469 }
2470 .table-responsive > .table-bordered {
2471 border: 0;
2472 }
2473 .table-responsive > .table-bordered > thead > tr > th:first-child,
2474 .table-responsive > .table-bordered > tbody > tr > th:first-child,
2475 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2476 .table-responsive > .table-bordered > thead > tr > td:first-child,
2477 .table-responsive > .table-bordered > tbody > tr > td:first-child,
2478 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2479 border-left: 0;
2480 }
2481 .table-responsive > .table-bordered > thead > tr > th:last-child,
2482 .table-responsive > .table-bordered > tbody > tr > th:last-child,
2483 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2484 .table-responsive > .table-bordered > thead > tr > td:last-child,
2485 .table-responsive > .table-bordered > tbody > tr > td:last-child,
2486 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2487 border-right: 0;
2488 }
2489 .table-responsive > .table-bordered > tbody > tr:last-child > th,
2490 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2491 .table-responsive > .table-bordered > tbody > tr:last-child > td,
2492 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2493 border-bottom: 0;
2494 }
2495 }
2496 fieldset {
2497 min-width: 0;
2498 padding: 0;
2499 margin: 0;
2500 border: 0;
2501 }
2502 legend {
2503 display: block;
2504 width: 100%;
2505 padding: 0;
2506 margin-bottom: 20px;
2507 font-size: 21px;
2508 line-height: inherit;
2509 color: #333;
2510 border: 0;
2511 border-bottom: 1px solid #e5e5e5;
2512 }
2513 label {
2514 display: inline-block;
2515 max-width: 100%;
2516 margin-bottom: 5px;
2517 font-weight: bold;
2518 }
2519 input[type="search"] {
2520 -webkit-box-sizing: border-box;
2521 -moz-box-sizing: border-box;
2522 box-sizing: border-box;
2523 }
2524 input[type="radio"],
2525 input[type="checkbox"] {
2526 margin: 4px 0 0;
2527 margin-top: 1px \9;
2528 line-height: normal;
2529 }
2530 input[type="file"] {
2531 display: block;
2532 }
2533 input[type="range"] {
2534 display: block;
2535 width: 100%;
2536 }
2537 select[multiple],
2538 select[size] {
2539 height: auto;
2540 }
2541 input[type="file"]:focus,
2542 input[type="radio"]:focus,
2543 input[type="checkbox"]:focus {
2544 outline: 5px auto -webkit-focus-ring-color;
2545 outline-offset: -2px;
2546 }
2547 output {
2548 display: block;
2549 padding-top: 7px;
2550 font-size: 14px;
2551 line-height: 1.42857143;
2552 color: #555;
2553 }
2554 .form-control {
2555 display: block;
2556 width: 100%;
2557 height: 34px;
2558 padding: 6px 12px;
2559 font-size: 14px;
2560 line-height: 1.42857143;
2561 color: #555;
2562 background-color: #fff;
2563 background-image: none;
2564 border: 1px solid #ccc;
2565 border-radius: 4px;
2566 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2567 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2568 -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
2569 -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2570 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2571 }
2572 .form-control:focus {
2573 border-color: #66afe9;
2574 outline: 0;
2575 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2576 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2577 }
2578 .form-control::-moz-placeholder {
2579 color: #999;
2580 opacity: 1;
2581 }
2582 .form-control:-ms-input-placeholder {
2583 color: #999;
2584 }
2585 .form-control::-webkit-input-placeholder {
2586 color: #999;
2587 }
2588 .form-control::-ms-expand {
2589 background-color: transparent;
2590 border: 0;
2591 }
2592 .form-control[disabled],
2593 .form-control[readonly],
2594 fieldset[disabled] .form-control {
2595 background-color: #eee;
2596 opacity: 1;
2597 }
2598 .form-control[disabled],
2599 fieldset[disabled] .form-control {
2600 cursor: not-allowed;
2601 }
2602 textarea.form-control {
2603 height: auto;
2604 }
2605 input[type="search"] {
2606 -webkit-appearance: none;
2607 }
2608 @media screen and (-webkit-min-device-pixel-ratio: 0) {
2609 input[type="date"].form-control,
2610 input[type="time"].form-control,
2611 input[type="datetime-local"].form-control,
2612 input[type="month"].form-control {
2613 line-height: 34px;
2614 }
2615 input[type="date"].input-sm,
2616 input[type="time"].input-sm,
2617 input[type="datetime-local"].input-sm,
2618 input[type="month"].input-sm,
2619 .input-group-sm input[type="date"],
2620 .input-group-sm input[type="time"],
2621 .input-group-sm input[type="datetime-local"],
2622 .input-group-sm input[type="month"] {
2623 line-height: 30px;
2624 }
2625 input[type="date"].input-lg,
2626 input[type="time"].input-lg,
2627 input[type="datetime-local"].input-lg,
2628 input[type="month"].input-lg,
2629 .input-group-lg input[type="date"],
2630 .input-group-lg input[type="time"],
2631 .input-group-lg input[type="datetime-local"],
2632 .input-group-lg input[type="month"] {
2633 line-height: 46px;
2634 }
2635 }
2636 .form-group {
2637 margin-bottom: 15px;
2638 }
2639 .radio,
2640 .checkbox {
2641 position: relative;
2642 display: block;
2643 margin-top: 10px;
2644 margin-bottom: 10px;
2645 }
2646 .radio label,
2647 .checkbox label {
2648 min-height: 20px;
2649 padding-left: 20px;
2650 margin-bottom: 0;
2651 font-weight: normal;
2652 cursor: pointer;
2653 }
2654 .radio input[type="radio"],
2655 .radio-inline input[type="radio"],
2656 .checkbox input[type="checkbox"],
2657 .checkbox-inline input[type="checkbox"] {
2658 position: absolute;
2659 margin-top: 4px \9;
2660 margin-left: -20px;
2661 }
2662 .radio + .radio,
2663 .checkbox + .checkbox {
2664 margin-top: -5px;
2665 }
2666 .radio-inline,
2667 .checkbox-inline {
2668 position: relative;
2669 display: inline-block;
2670 padding-left: 20px;
2671 margin-bottom: 0;
2672 font-weight: normal;
2673 vertical-align: middle;
2674 cursor: pointer;
2675 }
2676 .radio-inline + .radio-inline,
2677 .checkbox-inline + .checkbox-inline {
2678 margin-top: 0;
2679 margin-left: 10px;
2680 }
2681 input[type="radio"][disabled],
2682 input[type="checkbox"][disabled],
2683 input[type="radio"].disabled,
2684 input[type="checkbox"].disabled,
2685 fieldset[disabled] input[type="radio"],
2686 fieldset[disabled] input[type="checkbox"] {
2687 cursor: not-allowed;
2688 }
2689 .radio-inline.disabled,
2690 .checkbox-inline.disabled,
2691 fieldset[disabled] .radio-inline,
2692 fieldset[disabled] .checkbox-inline {
2693 cursor: not-allowed;
2694 }
2695 .radio.disabled label,
2696 .checkbox.disabled label,
2697 fieldset[disabled] .radio label,
2698 fieldset[disabled] .checkbox label {
2699 cursor: not-allowed;
2700 }
2701 .form-control-static {
2702 min-height: 34px;
2703 padding-top: 7px;
2704 padding-bottom: 7px;
2705 margin-bottom: 0;
2706 }
2707 .form-control-static.input-lg,
2708 .form-control-static.input-sm {
2709 padding-right: 0;
2710 padding-left: 0;
2711 }
2712 .input-sm {
2713 height: 30px;
2714 padding: 5px 10px;
2715 font-size: 12px;
2716 line-height: 1.5;
2717 border-radius: 3px;
2718 }
2719 select.input-sm {
2720 height: 30px;
2721 line-height: 30px;
2722 }
2723 textarea.input-sm,
2724 select[multiple].input-sm {
2725 height: auto;
2726 }
2727 .form-group-sm .form-control {
2728 height: 30px;
2729 padding: 5px 10px;
2730 font-size: 12px;
2731 line-height: 1.5;
2732 border-radius: 3px;
2733 }
2734 .form-group-sm select.form-control {
2735 height: 30px;
2736 line-height: 30px;
2737 }
2738 .form-group-sm textarea.form-control,
2739 .form-group-sm select[multiple].form-control {
2740 height: auto;
2741 }
2742 .form-group-sm .form-control-static {
2743 height: 30px;
2744 min-height: 32px;
2745 padding: 6px 10px;
2746 font-size: 12px;
2747 line-height: 1.5;
2748 }
2749 .input-lg {
2750 height: 46px;
2751 padding: 10px 16px;
2752 font-size: 18px;
2753 line-height: 1.3333333;
2754 border-radius: 6px;
2755 }
2756 select.input-lg {
2757 height: 46px;
2758 line-height: 46px;
2759 }
2760 textarea.input-lg,
2761 select[multiple].input-lg {
2762 height: auto;
2763 }
2764 .form-group-lg .form-control {
2765 height: 46px;
2766 padding: 10px 16px;
2767 font-size: 18px;
2768 line-height: 1.3333333;
2769 border-radius: 6px;
2770 }
2771 .form-group-lg select.form-control {
2772 height: 46px;
2773 line-height: 46px;
2774 }
2775 .form-group-lg textarea.form-control,
2776 .form-group-lg select[multiple].form-control {
2777 height: auto;
2778 }
2779 .form-group-lg .form-control-static {
2780 height: 46px;
2781 min-height: 38px;
2782 padding: 11px 16px;
2783 font-size: 18px;
2784 line-height: 1.3333333;
2785 }
2786 .has-feedback {
2787 position: relative;
2788 }
2789 .has-feedback .form-control {
2790 padding-right: 42.5px;
2791 }
2792 .form-control-feedback {
2793 position: absolute;
2794 top: 0;
2795 right: 0;
2796 z-index: 2;
2797 display: block;
2798 width: 34px;
2799 height: 34px;
2800 line-height: 34px;
2801 text-align: center;
2802 pointer-events: none;
2803 }
2804 .input-lg + .form-control-feedback,
2805 .input-group-lg + .form-control-feedback,
2806 .form-group-lg .form-control + .form-control-feedback {
2807 width: 46px;
2808 height: 46px;
2809 line-height: 46px;
2810 }
2811 .input-sm + .form-control-feedback,
2812 .input-group-sm + .form-control-feedback,
2813 .form-group-sm .form-control + .form-control-feedback {
2814 width: 30px;
2815 height: 30px;
2816 line-height: 30px;
2817 }
2818 .has-success .help-block,
2819 .has-success .control-label,
2820 .has-success .radio,
2821 .has-success .checkbox,
2822 .has-success .radio-inline,
2823 .has-success .checkbox-inline,
2824 .has-success.radio label,
2825 .has-success.checkbox label,
2826 .has-success.radio-inline label,
2827 .has-success.checkbox-inline label {
2828 color: #3c763d;
2829 }
2830 .has-success .form-control {
2831 border-color: #3c763d;
2832 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2833 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2834 }
2835 .has-success .form-control:focus {
2836 border-color: #2b542c;
2837 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2838 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2839 }
2840 .has-success .input-group-addon {
2841 color: #3c763d;
2842 background-color: #dff0d8;
2843 border-color: #3c763d;
2844 }
2845 .has-success .form-control-feedback {
2846 color: #3c763d;
2847 }
2848 .has-warning .help-block,
2849 .has-warning .control-label,
2850 .has-warning .radio,
2851 .has-warning .checkbox,
2852 .has-warning .radio-inline,
2853 .has-warning .checkbox-inline,
2854 .has-warning.radio label,
2855 .has-warning.checkbox label,
2856 .has-warning.radio-inline label,
2857 .has-warning.checkbox-inline label {
2858 color: #8a6d3b;
2859 }
2860 .has-warning .form-control {
2861 border-color: #8a6d3b;
2862 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2863 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2864 }
2865 .has-warning .form-control:focus {
2866 border-color: #66512c;
2867 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2868 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2869 }
2870 .has-warning .input-group-addon {
2871 color: #8a6d3b;
2872 background-color: #fcf8e3;
2873 border-color: #8a6d3b;
2874 }
2875 .has-warning .form-control-feedback {
2876 color: #8a6d3b;
2877 }
2878 .has-error .help-block,
2879 .has-error .control-label,
2880 .has-error .radio,
2881 .has-error .checkbox,
2882 .has-error .radio-inline,
2883 .has-error .checkbox-inline,
2884 .has-error.radio label,
2885 .has-error.checkbox label,
2886 .has-error.radio-inline label,
2887 .has-error.checkbox-inline label {
2888 color: #a94442;
2889 }
2890 .has-error .form-control {
2891 border-color: #a94442;
2892 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2893 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2894 }
2895 .has-error .form-control:focus {
2896 border-color: #843534;
2897 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2898 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2899 }
2900 .has-error .input-group-addon {
2901 color: #a94442;
2902 background-color: #f2dede;
2903 border-color: #a94442;
2904 }
2905 .has-error .form-control-feedback {
2906 color: #a94442;
2907 }
2908 .has-feedback label ~ .form-control-feedback {
2909 top: 25px;
2910 }
2911 .has-feedback label.sr-only ~ .form-control-feedback {
2912 top: 0;
2913 }
2914 .help-block {
2915 display: block;
2916 margin-top: 5px;
2917 margin-bottom: 10px;
2918 color: #737373;
2919 }
2920 @media (min-width: 768px) {
2921 .form-inline .form-group {
2922 display: inline-block;
2923 margin-bottom: 0;
2924 vertical-align: middle;
2925 }
2926 .form-inline .form-control {
2927 display: inline-block;
2928 width: auto;
2929 vertical-align: middle;
2930 }
2931 .form-inline .form-control-static {
2932 display: inline-block;
2933 }
2934 .form-inline .input-group {
2935 display: inline-table;
2936 vertical-align: middle;
2937 }
2938 .form-inline .input-group .input-group-addon,
2939 .form-inline .input-group .input-group-btn,
2940 .form-inline .input-group .form-control {
2941 width: auto;
2942 }
2943 .form-inline .input-group > .form-control {
2944 width: 100%;
2945 }
2946 .form-inline .control-label {
2947 margin-bottom: 0;
2948 vertical-align: middle;
2949 }
2950 .form-inline .radio,
2951 .form-inline .checkbox {
2952 display: inline-block;
2953 margin-top: 0;
2954 margin-bottom: 0;
2955 vertical-align: middle;
2956 }
2957 .form-inline .radio label,
2958 .form-inline .checkbox label {
2959 padding-left: 0;
2960 }
2961 .form-inline .radio input[type="radio"],
2962 .form-inline .checkbox input[type="checkbox"] {
2963 position: relative;
2964 margin-left: 0;
2965 }
2966 .form-inline .has-feedback .form-control-feedback {
2967 top: 0;
2968 }
2969 }
2970 .form-horizontal .radio,
2971 .form-horizontal .checkbox,
2972 .form-horizontal .radio-inline,
2973 .form-horizontal .checkbox-inline {
2974 padding-top: 7px;
2975 margin-top: 0;
2976 margin-bottom: 0;
2977 }
2978 .form-horizontal .radio,
2979 .form-horizontal .checkbox {
2980 min-height: 27px;
2981 }
2982 .form-horizontal .form-group {
2983 margin-right: -15px;
2984 margin-left: -15px;
2985 }
2986 @media (min-width: 768px) {
2987 .form-horizontal .control-label {
2988 padding-top: 7px;
2989 margin-bottom: 0;
2990 text-align: right;
2991 }
2992 }
2993 .form-horizontal .has-feedback .form-control-feedback {
2994 right: 15px;
2995 }
2996 @media (min-width: 768px) {
2997 .form-horizontal .form-group-lg .control-label {
2998 padding-top: 11px;
2999 font-size: 18px;
3000 }
3001 }
3002 @media (min-width: 768px) {
3003 .form-horizontal .form-group-sm .control-label {
3004 padding-top: 6px;
3005 font-size: 12px;
3006 }
3007 }
3008 .btn {
3009 display: inline-block;
3010 padding: 6px 12px;
3011 margin-bottom: 0;
3012 font-size: 14px;
3013 font-weight: normal;
3014 line-height: 1.42857143;
3015 text-align: center;
3016 white-space: nowrap;
3017 vertical-align: middle;
3018 -ms-touch-action: manipulation;
3019 touch-action: manipulation;
3020 cursor: pointer;
3021 -webkit-user-select: none;
3022 -moz-user-select: none;
3023 -ms-user-select: none;
3024 user-select: none;
3025 background-image: none;
3026 border: 1px solid transparent;
3027 border-radius: 4px;
3028 }
3029 .btn:focus,
3030 .btn:active:focus,
3031 .btn.active:focus,
3032 .btn.focus,
3033 .btn:active.focus,
3034 .btn.active.focus {
3035 outline: 5px auto -webkit-focus-ring-color;
3036 outline-offset: -2px;
3037 }
3038 .btn:hover,
3039 .btn:focus,
3040 .btn.focus {
3041 color: #333;
3042 text-decoration: none;
3043 }
3044 .btn:active,
3045 .btn.active {
3046 background-image: none;
3047 outline: 0;
3048 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3049 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3050 }
3051 .btn.disabled,
3052 .btn[disabled],
3053 fieldset[disabled] .btn {
3054 cursor: not-allowed;
3055 filter: alpha(opacity=65);
3056 -webkit-box-shadow: none;
3057 box-shadow: none;
3058 opacity: .65;
3059 }
3060 a.btn.disabled,
3061 fieldset[disabled] a.btn {
3062 pointer-events: none;
3063 }
3064 .btn-default {
3065 color: #333;
3066 background-color: #fff;
3067 border-color: #ccc;
3068 }
3069 .btn-default:focus,
3070 .btn-default.focus {
3071 color: #333;
3072 background-color: #e6e6e6;
3073 border-color: #8c8c8c;
3074 }
3075 .btn-default:hover {
3076 color: #333;
3077 background-color: #e6e6e6;
3078 border-color: #adadad;
3079 }
3080 .btn-default:active,
3081 .btn-default.active,
3082 .open > .dropdown-toggle.btn-default {
3083 color: #333;
3084 background-color: #e6e6e6;
3085 border-color: #adadad;
3086 }
3087 .btn-default:active:hover,
3088 .btn-default.active:hover,
3089 .open > .dropdown-toggle.btn-default:hover,
3090 .btn-default:active:focus,
3091 .btn-default.active:focus,
3092 .open > .dropdown-toggle.btn-default:focus,
3093 .btn-default:active.focus,
3094 .btn-default.active.focus,
3095 .open > .dropdown-toggle.btn-default.focus {
3096 color: #333;
3097 background-color: #d4d4d4;
3098 border-color: #8c8c8c;
3099 }
3100 .btn-default:active,
3101 .btn-default.active,
3102 .open > .dropdown-toggle.btn-default {
3103 background-image: none;
3104 }
3105 .btn-default.disabled:hover,
3106 .btn-default[disabled]:hover,
3107 fieldset[disabled] .btn-default:hover,
3108 .btn-default.disabled:focus,
3109 .btn-default[disabled]:focus,
3110 fieldset[disabled] .btn-default:focus,
3111 .btn-default.disabled.focus,
3112 .btn-default[disabled].focus,
3113 fieldset[disabled] .btn-default.focus {
3114 background-color: #fff;
3115 border-color: #ccc;
3116 }
3117 .btn-default .badge {
3118 color: #fff;
3119 background-color: #333;
3120 }
3121 .btn-primary {
3122 color: #fff;
3123 background-color: #337ab7;
3124 border-color: #2e6da4;
3125 }
3126 .btn-primary:focus,
3127 .btn-primary.focus {
3128 color: #fff;
3129 background-color: #286090;
3130 border-color: #122b40;
3131 }
3132 .btn-primary:hover {
3133 color: #fff;
3134 background-color: #286090;
3135 border-color: #204d74;
3136 }
3137 .btn-primary:active,
3138 .btn-primary.active,
3139 .open > .dropdown-toggle.btn-primary {
3140 color: #fff;
3141 background-color: #286090;
3142 border-color: #204d74;
3143 }
3144 .btn-primary:active:hover,
3145 .btn-primary.active:hover,
3146 .open > .dropdown-toggle.btn-primary:hover,
3147 .btn-primary:active:focus,
3148 .btn-primary.active:focus,
3149 .open > .dropdown-toggle.btn-primary:focus,
3150 .btn-primary:active.focus,
3151 .btn-primary.active.focus,
3152 .open > .dropdown-toggle.btn-primary.focus {
3153 color: #fff;
3154 background-color: #204d74;
3155 border-color: #122b40;
3156 }
3157 .btn-primary:active,
3158 .btn-primary.active,
3159 .open > .dropdown-toggle.btn-primary {
3160 background-image: none;
3161 }
3162 .btn-primary.disabled:hover,
3163 .btn-primary[disabled]:hover,
3164 fieldset[disabled] .btn-primary:hover,
3165 .btn-primary.disabled:focus,
3166 .btn-primary[disabled]:focus,
3167 fieldset[disabled] .btn-primary:focus,
3168 .btn-primary.disabled.focus,
3169 .btn-primary[disabled].focus,
3170 fieldset[disabled] .btn-primary.focus {
3171 background-color: #337ab7;
3172 border-color: #2e6da4;
3173 }
3174 .btn-primary .badge {
3175 color: #337ab7;
3176 background-color: #fff;
3177 }
3178 .btn-success {
3179 color: #fff;
3180 background-color: #5cb85c;
3181 border-color: #4cae4c;
3182 }
3183 .btn-success:focus,
3184 .btn-success.focus {
3185 color: #fff;
3186 background-color: #449d44;
3187 border-color: #255625;
3188 }
3189 .btn-success:hover {
3190 color: #fff;
3191 background-color: #449d44;
3192 border-color: #398439;
3193 }
3194 .btn-success:active,
3195 .btn-success.active,
3196 .open > .dropdown-toggle.btn-success {
3197 color: #fff;
3198 background-color: #449d44;
3199 border-color: #398439;
3200 }
3201 .btn-success:active:hover,
3202 .btn-success.active:hover,
3203 .open > .dropdown-toggle.btn-success:hover,
3204 .btn-success:active:focus,
3205 .btn-success.active:focus,
3206 .open > .dropdown-toggle.btn-success:focus,
3207 .btn-success:active.focus,
3208 .btn-success.active.focus,
3209 .open > .dropdown-toggle.btn-success.focus {
3210 color: #fff;
3211 background-color: #398439;
3212 border-color: #255625;
3213 }
3214 .btn-success:active,
3215 .btn-success.active,
3216 .open > .dropdown-toggle.btn-success {
3217 background-image: none;
3218 }
3219 .btn-success.disabled:hover,
3220 .btn-success[disabled]:hover,
3221 fieldset[disabled] .btn-success:hover,
3222 .btn-success.disabled:focus,
3223 .btn-success[disabled]:focus,
3224 fieldset[disabled] .btn-success:focus,
3225 .btn-success.disabled.focus,
3226 .btn-success[disabled].focus,
3227 fieldset[disabled] .btn-success.focus {
3228 background-color: #5cb85c;
3229 border-color: #4cae4c;
3230 }
3231 .btn-success .badge {
3232 color: #5cb85c;
3233 background-color: #fff;
3234 }
3235 .btn-info {
3236 color: #fff;
3237 background-color: #5bc0de;
3238 border-color: #46b8da;
3239 }
3240 .btn-info:focus,
3241 .btn-info.focus {
3242 color: #fff;
3243 background-color: #31b0d5;
3244 border-color: #1b6d85;
3245 }
3246 .btn-info:hover {
3247 color: #fff;
3248 background-color: #31b0d5;
3249 border-color: #269abc;
3250 }
3251 .btn-info:active,
3252 .btn-info.active,
3253 .open > .dropdown-toggle.btn-info {
3254 color: #fff;
3255 background-color: #31b0d5;
3256 border-color: #269abc;
3257 }
3258 .btn-info:active:hover,
3259 .btn-info.active:hover,
3260 .open > .dropdown-toggle.btn-info:hover,
3261 .btn-info:active:focus,
3262 .btn-info.active:focus,
3263 .open > .dropdown-toggle.btn-info:focus,
3264 .btn-info:active.focus,
3265 .btn-info.active.focus,
3266 .open > .dropdown-toggle.btn-info.focus {
3267 color: #fff;
3268 background-color: #269abc;
3269 border-color: #1b6d85;
3270 }
3271 .btn-info:active,
3272 .btn-info.active,
3273 .open > .dropdown-toggle.btn-info {
3274 background-image: none;
3275 }
3276 .btn-info.disabled:hover,
3277 .btn-info[disabled]:hover,
3278 fieldset[disabled] .btn-info:hover,
3279 .btn-info.disabled:focus,
3280 .btn-info[disabled]:focus,
3281 fieldset[disabled] .btn-info:focus,
3282 .btn-info.disabled.focus,
3283 .btn-info[disabled].focus,
3284 fieldset[disabled] .btn-info.focus {
3285 background-color: #5bc0de;
3286 border-color: #46b8da;
3287 }
3288 .btn-info .badge {
3289 color: #5bc0de;
3290 background-color: #fff;
3291 }
3292 .btn-warning {
3293 color: #fff;
3294 background-color: #f0ad4e;
3295 border-color: #eea236;
3296 }
3297 .btn-warning:focus,
3298 .btn-warning.focus {
3299 color: #fff;
3300 background-color: #ec971f;
3301 border-color: #985f0d;
3302 }
3303 .btn-warning:hover {
3304 color: #fff;
3305 background-color: #ec971f;
3306 border-color: #d58512;
3307 }
3308 .btn-warning:active,
3309 .btn-warning.active,
3310 .open > .dropdown-toggle.btn-warning {
3311 color: #fff;
3312 background-color: #ec971f;
3313 border-color: #d58512;
3314 }
3315 .btn-warning:active:hover,
3316 .btn-warning.active:hover,
3317 .open > .dropdown-toggle.btn-warning:hover,
3318 .btn-warning:active:focus,
3319 .btn-warning.active:focus,
3320 .open > .dropdown-toggle.btn-warning:focus,
3321 .btn-warning:active.focus,
3322 .btn-warning.active.focus,
3323 .open > .dropdown-toggle.btn-warning.focus {
3324 color: #fff;
3325 background-color: #d58512;
3326 border-color: #985f0d;
3327 }
3328 .btn-warning:active,
3329 .btn-warning.active,
3330 .open > .dropdown-toggle.btn-warning {
3331 background-image: none;
3332 }
3333 .btn-warning.disabled:hover,
3334 .btn-warning[disabled]:hover,
3335 fieldset[disabled] .btn-warning:hover,
3336 .btn-warning.disabled:focus,
3337 .btn-warning[disabled]:focus,
3338 fieldset[disabled] .btn-warning:focus,
3339 .btn-warning.disabled.focus,
3340 .btn-warning[disabled].focus,
3341 fieldset[disabled] .btn-warning.focus {
3342 background-color: #f0ad4e;
3343 border-color: #eea236;
3344 }
3345 .btn-warning .badge {
3346 color: #f0ad4e;
3347 background-color: #fff;
3348 }
3349 .btn-danger {
3350 color: #fff;
3351 background-color: #d9534f;
3352 border-color: #d43f3a;
3353 }
3354 .btn-danger:focus,
3355 .btn-danger.focus {
3356 color: #fff;
3357 background-color: #c9302c;
3358 border-color: #761c19;
3359 }
3360 .btn-danger:hover {
3361 color: #fff;
3362 background-color: #c9302c;
3363 border-color: #ac2925;
3364 }
3365 .btn-danger:active,
3366 .btn-danger.active,
3367 .open > .dropdown-toggle.btn-danger {
3368 color: #fff;
3369 background-color: #c9302c;
3370 border-color: #ac2925;
3371 }
3372 .btn-danger:active:hover,
3373 .btn-danger.active:hover,
3374 .open > .dropdown-toggle.btn-danger:hover,
3375 .btn-danger:active:focus,
3376 .btn-danger.active:focus,
3377 .open > .dropdown-toggle.btn-danger:focus,
3378 .btn-danger:active.focus,
3379 .btn-danger.active.focus,
3380 .open > .dropdown-toggle.btn-danger.focus {
3381 color: #fff;
3382 background-color: #ac2925;
3383 border-color: #761c19;
3384 }
3385 .btn-danger:active,
3386 .btn-danger.active,
3387 .open > .dropdown-toggle.btn-danger {
3388 background-image: none;
3389 }
3390 .btn-danger.disabled:hover,
3391 .btn-danger[disabled]:hover,
3392 fieldset[disabled] .btn-danger:hover,
3393 .btn-danger.disabled:focus,
3394 .btn-danger[disabled]:focus,
3395 fieldset[disabled] .btn-danger:focus,
3396 .btn-danger.disabled.focus,
3397 .btn-danger[disabled].focus,
3398 fieldset[disabled] .btn-danger.focus {
3399 background-color: #d9534f;
3400 border-color: #d43f3a;
3401 }
3402 .btn-danger .badge {
3403 color: #d9534f;
3404 background-color: #fff;
3405 }
3406 .btn-link {
3407 font-weight: normal;
3408 color: #337ab7;
3409 border-radius: 0;
3410 }
3411 .btn-link,
3412 .btn-link:active,
3413 .btn-link.active,
3414 .btn-link[disabled],
3415 fieldset[disabled] .btn-link {
3416 background-color: transparent;
3417 -webkit-box-shadow: none;
3418 box-shadow: none;
3419 }
3420 .btn-link,
3421 .btn-link:hover,
3422 .btn-link:focus,
3423 .btn-link:active {
3424 border-color: transparent;
3425 }
3426 .btn-link:hover,
3427 .btn-link:focus {
3428 color: #23527c;
3429 text-decoration: underline;
3430 background-color: transparent;
3431 }
3432 .btn-link[disabled]:hover,
3433 fieldset[disabled] .btn-link:hover,
3434 .btn-link[disabled]:focus,
3435 fieldset[disabled] .btn-link:focus {
3436 color: #777;
3437 text-decoration: none;
3438 }
3439 .btn-lg,
3440 .btn-group-lg > .btn {
3441 padding: 10px 16px;
3442 font-size: 18px;
3443 line-height: 1.3333333;
3444 border-radius: 6px;
3445 }
3446 .btn-sm,
3447 .btn-group-sm > .btn {
3448 padding: 5px 10px;
3449 font-size: 12px;
3450 line-height: 1.5;
3451 border-radius: 3px;
3452 }
3453 .btn-xs,
3454 .btn-group-xs > .btn {
3455 padding: 1px 5px;
3456 font-size: 12px;
3457 line-height: 1.5;
3458 border-radius: 3px;
3459 }
3460 .btn-block {
3461 display: block;
3462 width: 100%;
3463 }
3464 .btn-block + .btn-block {
3465 margin-top: 5px;
3466 }
3467 input[type="submit"].btn-block,
3468 input[type="reset"].btn-block,
3469 input[type="button"].btn-block {
3470 width: 100%;
3471 }
3472 .fade {
3473 opacity: 0;
3474 -webkit-transition: opacity .15s linear;
3475 -o-transition: opacity .15s linear;
3476 transition: opacity .15s linear;
3477 }
3478 .fade.in {
3479 opacity: 1;
3480 }
3481 .collapse {
3482 display: none;
3483 }
3484 .collapse.in {
3485 display: block;
3486 }
3487 tr.collapse.in {
3488 display: table-row;
3489 }
3490 tbody.collapse.in {
3491 display: table-row-group;
3492 }
3493 .collapsing {
3494 position: relative;
3495 height: 0;
3496 overflow: hidden;
3497 -webkit-transition-timing-function: ease;
3498 -o-transition-timing-function: ease;
3499 transition-timing-function: ease;
3500 -webkit-transition-duration: .35s;
3501 -o-transition-duration: .35s;
3502 transition-duration: .35s;
3503 -webkit-transition-property: height, visibility;
3504 -o-transition-property: height, visibility;
3505 transition-property: height, visibility;
3506 }
3507 .caret {
3508 display: inline-block;
3509 width: 0;
3510 height: 0;
3511 margin-left: 2px;
3512 vertical-align: middle;
3513 border-top: 4px dashed;
3514 border-top: 4px solid \9;
3515 border-right: 4px solid transparent;
3516 border-left: 4px solid transparent;
3517 }
3518 .dropup,
3519 .dropdown {
3520 position: relative;
3521 }
3522 .dropdown-toggle:focus {
3523 outline: 0;
3524 }
3525 .dropdown-menu {
3526 position: absolute;
3527 top: 100%;
3528 left: 0;
3529 z-index: 1000;
3530 display: none;
3531 float: left;
3532 min-width: 160px;
3533 padding: 5px 0;
3534 margin: 2px 0 0;
3535 font-size: 14px;
3536 text-align: left;
3537 list-style: none;
3538 background-color: #fff;
3539 -webkit-background-clip: padding-box;
3540 background-clip: padding-box;
3541 border: 1px solid #ccc;
3542 border: 1px solid rgba(0, 0, 0, .15);
3543 border-radius: 4px;
3544 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3545 box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3546 }
3547 .dropdown-menu.pull-right {
3548 right: 0;
3549 left: auto;
3550 }
3551 .dropdown-menu .divider {
3552 height: 1px;
3553 margin: 9px 0;
3554 overflow: hidden;
3555 background-color: #e5e5e5;
3556 }
3557 .dropdown-menu > li > a {
3558 display: block;
3559 padding: 3px 20px;
3560 clear: both;
3561 font-weight: normal;
3562 line-height: 1.42857143;
3563 color: #333;
3564 white-space: nowrap;
3565 }
3566 .dropdown-menu > li > a:hover,
3567 .dropdown-menu > li > a:focus {
3568 color: #262626;
3569 text-decoration: none;
3570 background-color: #f5f5f5;
3571 }
3572 .dropdown-menu > .active > a,
3573 .dropdown-menu > .active > a:hover,
3574 .dropdown-menu > .active > a:focus {
3575 color: #fff;
3576 text-decoration: none;
3577 background-color: #337ab7;
3578 outline: 0;
3579 }
3580 .dropdown-menu > .disabled > a,
3581 .dropdown-menu > .disabled > a:hover,
3582 .dropdown-menu > .disabled > a:focus {
3583 color: #777;
3584 }
3585 .dropdown-menu > .disabled > a:hover,
3586 .dropdown-menu > .disabled > a:focus {
3587 text-decoration: none;
3588 cursor: not-allowed;
3589 background-color: transparent;
3590 background-image: none;
3591 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3592 }
3593 .open > .dropdown-menu {
3594 display: block;
3595 }
3596 .open > a {
3597 outline: 0;
3598 }
3599 .dropdown-menu-right {
3600 right: 0;
3601 left: auto;
3602 }
3603 .dropdown-menu-left {
3604 right: auto;
3605 left: 0;
3606 }
3607 .dropdown-header {
3608 display: block;
3609 padding: 3px 20px;
3610 font-size: 12px;
3611 line-height: 1.42857143;
3612 color: #777;
3613 white-space: nowrap;
3614 }
3615 .dropdown-backdrop {
3616 position: fixed;
3617 top: 0;
3618 right: 0;
3619 bottom: 0;
3620 left: 0;
3621 z-index: 990;
3622 }
3623 .pull-right > .dropdown-menu {
3624 right: 0;
3625 left: auto;
3626 }
3627 .dropup .caret,
3628 .navbar-fixed-bottom .dropdown .caret {
3629 content: "";
3630 border-top: 0;
3631 border-bottom: 4px dashed;
3632 border-bottom: 4px solid \9;
3633 }
3634 .dropup .dropdown-menu,
3635 .navbar-fixed-bottom .dropdown .dropdown-menu {
3636 top: auto;
3637 bottom: 100%;
3638 margin-bottom: 2px;
3639 }
3640 @media (min-width: 768px) {
3641 .navbar-right .dropdown-menu {
3642 right: 0;
3643 left: auto;
3644 }
3645 .navbar-right .dropdown-menu-left {
3646 right: auto;
3647 left: 0;
3648 }
3649 }
3650 .btn-group,
3651 .btn-group-vertical {
3652 position: relative;
3653 display: inline-block;
3654 vertical-align: middle;
3655 }
3656 .btn-group > .btn,
3657 .btn-group-vertical > .btn {
3658 position: relative;
3659 float: left;
3660 }
3661 .btn-group > .btn:hover,
3662 .btn-group-vertical > .btn:hover,
3663 .btn-group > .btn:focus,
3664 .btn-group-vertical > .btn:focus,
3665 .btn-group > .btn:active,
3666 .btn-group-vertical > .btn:active,
3667 .btn-group > .btn.active,
3668 .btn-group-vertical > .btn.active {
3669 z-index: 2;
3670 }
3671 .btn-group .btn + .btn,
3672 .btn-group .btn + .btn-group,
3673 .btn-group .btn-group + .btn,
3674 .btn-group .btn-group + .btn-group {
3675 margin-left: -1px;
3676 }
3677 .btn-toolbar {
3678 margin-left: -5px;
3679 }
3680 .btn-toolbar .btn,
3681 .btn-toolbar .btn-group,
3682 .btn-toolbar .input-group {
3683 float: left;
3684 }
3685 .btn-toolbar > .btn,
3686 .btn-toolbar > .btn-group,
3687 .btn-toolbar > .input-group {
3688 margin-left: 5px;
3689 }
3690 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3691 border-radius: 0;
3692 }
3693 .btn-group > .btn:first-child {
3694 margin-left: 0;
3695 }
3696 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3697 border-top-right-radius: 0;
3698 border-bottom-right-radius: 0;
3699 }
3700 .btn-group > .btn:last-child:not(:first-child),
3701 .btn-group > .dropdown-toggle:not(:first-child) {
3702 border-top-left-radius: 0;
3703 border-bottom-left-radius: 0;
3704 }
3705 .btn-group > .btn-group {
3706 float: left;
3707 }
3708 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3709 border-radius: 0;
3710 }
3711 .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
3712 .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3713 border-top-right-radius: 0;
3714 border-bottom-right-radius: 0;
3715 }
3716 .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
3717 border-top-left-radius: 0;
3718 border-bottom-left-radius: 0;
3719 }
3720 .btn-group .dropdown-toggle:active,
3721 .btn-group.open .dropdown-toggle {
3722 outline: 0;
3723 }
3724 .btn-group > .btn + .dropdown-toggle {
3725 padding-right: 8px;
3726 padding-left: 8px;
3727 }
3728 .btn-group > .btn-lg + .dropdown-toggle {
3729 padding-right: 12px;
3730 padding-left: 12px;
3731 }
3732 .btn-group.open .dropdown-toggle {
3733 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3734 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3735 }
3736 .btn-group.open .dropdown-toggle.btn-link {
3737 -webkit-box-shadow: none;
3738 box-shadow: none;
3739 }
3740 .btn .caret {
3741 margin-left: 0;
3742 }
3743 .btn-lg .caret {
3744 border-width: 5px 5px 0;
3745 border-bottom-width: 0;
3746 }
3747 .dropup .btn-lg .caret {
3748 border-width: 0 5px 5px;
3749 }
3750 .btn-group-vertical > .btn,
3751 .btn-group-vertical > .btn-group,
3752 .btn-group-vertical > .btn-group > .btn {
3753 display: block;
3754 float: none;
3755 width: 100%;
3756 max-width: 100%;
3757 }
3758 .btn-group-vertical > .btn-group > .btn {
3759 float: none;
3760 }
3761 .btn-group-vertical > .btn + .btn,
3762 .btn-group-vertical > .btn + .btn-group,
3763 .btn-group-vertical > .btn-group + .btn,
3764 .btn-group-vertical > .btn-group + .btn-group {
3765 margin-top: -1px;
3766 margin-left: 0;
3767 }
3768 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3769 border-radius: 0;
3770 }
3771 .btn-group-vertical > .btn:first-child:not(:last-child) {
3772 border-top-left-radius: 4px;
3773 border-top-right-radius: 4px;
3774 border-bottom-right-radius: 0;
3775 border-bottom-left-radius: 0;
3776 }
3777 .btn-group-vertical > .btn:last-child:not(:first-child) {
3778 border-top-left-radius: 0;
3779 border-top-right-radius: 0;
3780 border-bottom-right-radius: 4px;
3781 border-bottom-left-radius: 4px;
3782 }
3783 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3784 border-radius: 0;
3785 }
3786 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3787 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3788 border-bottom-right-radius: 0;
3789 border-bottom-left-radius: 0;
3790 }
3791 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3792 border-top-left-radius: 0;
3793 border-top-right-radius: 0;
3794 }
3795 .btn-group-justified {
3796 display: table;
3797 width: 100%;
3798 table-layout: fixed;
3799 border-collapse: separate;
3800 }
3801 .btn-group-justified > .btn,
3802 .btn-group-justified > .btn-group {
3803 display: table-cell;
3804 float: none;
3805 width: 1%;
3806 }
3807 .btn-group-justified > .btn-group .btn {
3808 width: 100%;
3809 }
3810 .btn-group-justified > .btn-group .dropdown-menu {
3811 left: auto;
3812 }
3813 [data-toggle="buttons"] > .btn input[type="radio"],
3814 [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
3815 [data-toggle="buttons"] > .btn input[type="checkbox"],
3816 [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
3817 position: absolute;
3818 clip: rect(0, 0, 0, 0);
3819 pointer-events: none;
3820 }
3821 .input-group {
3822 position: relative;
3823 display: table;
3824 border-collapse: separate;
3825 }
3826 .input-group[class*="col-"] {
3827 float: none;
3828 padding-right: 0;
3829 padding-left: 0;
3830 }
3831 .input-group .form-control {
3832 position: relative;
3833 z-index: 2;
3834 float: left;
3835 width: 100%;
3836 margin-bottom: 0;
3837 }
3838 .input-group .form-control:focus {
3839 z-index: 3;
3840 }
3841 .input-group-lg > .form-control,
3842 .input-group-lg > .input-group-addon,
3843 .input-group-lg > .input-group-btn > .btn {
3844 height: 46px;
3845 padding: 10px 16px;
3846 font-size: 18px;
3847 line-height: 1.3333333;
3848 border-radius: 6px;
3849 }
3850 select.input-group-lg > .form-control,
3851 select.input-group-lg > .input-group-addon,
3852 select.input-group-lg > .input-group-btn > .btn {
3853 height: 46px;
3854 line-height: 46px;
3855 }
3856 textarea.input-group-lg > .form-control,
3857 textarea.input-group-lg > .input-group-addon,
3858 textarea.input-group-lg > .input-group-btn > .btn,
3859 select[multiple].input-group-lg > .form-control,
3860 select[multiple].input-group-lg > .input-group-addon,
3861 select[multiple].input-group-lg > .input-group-btn > .btn {
3862 height: auto;
3863 }
3864 .input-group-sm > .form-control,
3865 .input-group-sm > .input-group-addon,
3866 .input-group-sm > .input-group-btn > .btn {
3867 height: 30px;
3868 padding: 5px 10px;
3869 font-size: 12px;
3870 line-height: 1.5;
3871 border-radius: 3px;
3872 }
3873 select.input-group-sm > .form-control,
3874 select.input-group-sm > .input-group-addon,
3875 select.input-group-sm > .input-group-btn > .btn {
3876 height: 30px;
3877 line-height: 30px;
3878 }
3879 textarea.input-group-sm > .form-control,
3880 textarea.input-group-sm > .input-group-addon,
3881 textarea.input-group-sm > .input-group-btn > .btn,
3882 select[multiple].input-group-sm > .form-control,
3883 select[multiple].input-group-sm > .input-group-addon,
3884 select[multiple].input-group-sm > .input-group-btn > .btn {
3885 height: auto;
3886 }
3887 .input-group-addon,
3888 .input-group-btn,
3889 .input-group .form-control {
3890 display: table-cell;
3891 }
3892 .input-group-addon:not(:first-child):not(:last-child),
3893 .input-group-btn:not(:first-child):not(:last-child),
3894 .input-group .form-control:not(:first-child):not(:last-child) {
3895 border-radius: 0;
3896 }
3897 .input-group-addon,
3898 .input-group-btn {
3899 width: 1%;
3900 white-space: nowrap;
3901 vertical-align: middle;
3902 }
3903 .input-group-addon {
3904 padding: 6px 12px;
3905 font-size: 14px;
3906 font-weight: normal;
3907 line-height: 1;
3908 color: #555;
3909 text-align: center;
3910 background-color: #eee;
3911 border: 1px solid #ccc;
3912 border-radius: 4px;
3913 }
3914 .input-group-addon.input-sm {
3915 padding: 5px 10px;
3916 font-size: 12px;
3917 border-radius: 3px;
3918 }
3919 .input-group-addon.input-lg {
3920 padding: 10px 16px;
3921 font-size: 18px;
3922 border-radius: 6px;
3923 }
3924 .input-group-addon input[type="radio"],
3925 .input-group-addon input[type="checkbox"] {
3926 margin-top: 0;
3927 }
3928 .input-group .form-control:first-child,
3929 .input-group-addon:first-child,
3930 .input-group-btn:first-child > .btn,
3931 .input-group-btn:first-child > .btn-group > .btn,
3932 .input-group-btn:first-child > .dropdown-toggle,
3933 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3934 .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3935 border-top-right-radius: 0;
3936 border-bottom-right-radius: 0;
3937 }
3938 .input-group-addon:first-child {
3939 border-right: 0;
3940 }
3941 .input-group .form-control:last-child,
3942 .input-group-addon:last-child,
3943 .input-group-btn:last-child > .btn,
3944 .input-group-btn:last-child > .btn-group > .btn,
3945 .input-group-btn:last-child > .dropdown-toggle,
3946 .input-group-btn:first-child > .btn:not(:first-child),
3947 .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3948 border-top-left-radius: 0;
3949 border-bottom-left-radius: 0;
3950 }
3951 .input-group-addon:last-child {
3952 border-left: 0;
3953 }
3954 .input-group-btn {
3955 position: relative;
3956 font-size: 0;
3957 white-space: nowrap;
3958 }
3959 .input-group-btn > .btn {
3960 position: relative;
3961 }
3962 .input-group-btn > .btn + .btn {
3963 margin-left: -1px;
3964 }
3965 .input-group-btn > .btn:hover,
3966 .input-group-btn > .btn:focus,
3967 .input-group-btn > .btn:active {
3968 z-index: 2;
3969 }
3970 .input-group-btn:first-child > .btn,
3971 .input-group-btn:first-child > .btn-group {
3972 margin-right: -1px;
3973 }
3974 .input-group-btn:last-child > .btn,
3975 .input-group-btn:last-child > .btn-group {
3976 z-index: 2;
3977 margin-left: -1px;
3978 }
3979 .nav {
3980 padding-left: 0;
3981 margin-bottom: 0;
3982 list-style: none;
3983 }
3984 .nav > li {
3985 position: relative;
3986 display: block;
3987 }
3988 .nav > li > a {
3989 position: relative;
3990 display: block;
3991 padding: 10px 15px;
3992 }
3993 .nav > li > a:hover,
3994 .nav > li > a:focus {
3995 text-decoration: none;
3996 background-color: #eee;
3997 }
3998 .nav > li.disabled > a {
3999 color: #777;
4000 }
4001 .nav > li.disabled > a:hover,
4002 .nav > li.disabled > a:focus {
4003 color: #777;
4004 text-decoration: none;
4005 cursor: not-allowed;
4006 background-color: transparent;
4007 }
4008 .nav .open > a,
4009 .nav .open > a:hover,
4010 .nav .open > a:focus {
4011 background-color: #eee;
4012 border-color: #337ab7;
4013 }
4014 .nav .nav-divider {
4015 height: 1px;
4016 margin: 9px 0;
4017 overflow: hidden;
4018 background-color: #e5e5e5;
4019 }
4020 .nav > li > a > img {
4021 max-width: none;
4022 }
4023 .nav-tabs {
4024 border-bottom: 1px solid #ddd;
4025 }
4026 .nav-tabs > li {
4027 float: left;
4028 margin-bottom: -1px;
4029 }
4030 .nav-tabs > li > a {
4031 margin-right: 2px;
4032 line-height: 1.42857143;
4033 border: 1px solid transparent;
4034 border-radius: 4px 4px 0 0;
4035 }
4036 .nav-tabs > li > a:hover {
4037 border-color: #eee #eee #ddd;
4038 }
4039 .nav-tabs > li.active > a,
4040 .nav-tabs > li.active > a:hover,
4041 .nav-tabs > li.active > a:focus {
4042 color: #555;
4043 cursor: default;
4044 background-color: #fff;
4045 border: 1px solid #ddd;
4046 border-bottom-color: transparent;
4047 }
4048 .nav-tabs.nav-justified {
4049 width: 100%;
4050 border-bottom: 0;
4051 }
4052 .nav-tabs.nav-justified > li {
4053 float: none;
4054 }
4055 .nav-tabs.nav-justified > li > a {
4056 margin-bottom: 5px;
4057 text-align: center;
4058 }
4059 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4060 top: auto;
4061 left: auto;
4062 }
4063 @media (min-width: 768px) {
4064 .nav-tabs.nav-justified > li {
4065 display: table-cell;
4066 width: 1%;
4067 }
4068 .nav-tabs.nav-justified > li > a {
4069 margin-bottom: 0;
4070 }
4071 }
4072 .nav-tabs.nav-justified > li > a {
4073 margin-right: 0;
4074 border-radius: 4px;
4075 }
4076 .nav-tabs.nav-justified > .active > a,
4077 .nav-tabs.nav-justified > .active > a:hover,
4078 .nav-tabs.nav-justified > .active > a:focus {
4079 border: 1px solid #ddd;
4080 }
4081 @media (min-width: 768px) {
4082 .nav-tabs.nav-justified > li > a {
4083 border-bottom: 1px solid #ddd;
4084 border-radius: 4px 4px 0 0;
4085 }
4086 .nav-tabs.nav-justified > .active > a,
4087 .nav-tabs.nav-justified > .active > a:hover,
4088 .nav-tabs.nav-justified > .active > a:focus {
4089 border-bottom-color: #fff;
4090 }
4091 }
4092 .nav-pills > li {
4093 float: left;
4094 }
4095 .nav-pills > li > a {
4096 border-radius: 4px;
4097 }
4098 .nav-pills > li + li {
4099 margin-left: 2px;
4100 }
4101 .nav-pills > li.active > a,
4102 .nav-pills > li.active > a:hover,
4103 .nav-pills > li.active > a:focus {
4104 color: #fff;
4105 background-color: #337ab7;
4106 }
4107 .nav-stacked > li {
4108 float: none;
4109 }
4110 .nav-stacked > li + li {
4111 margin-top: 2px;
4112 margin-left: 0;
4113 }
4114 .nav-justified {
4115 width: 100%;
4116 }
4117 .nav-justified > li {
4118 float: none;
4119 }
4120 .nav-justified > li > a {
4121 margin-bottom: 5px;
4122 text-align: center;
4123 }
4124 .nav-justified > .dropdown .dropdown-menu {
4125 top: auto;
4126 left: auto;
4127 }
4128 @media (min-width: 768px) {
4129 .nav-justified > li {
4130 display: table-cell;
4131 width: 1%;
4132 }
4133 .nav-justified > li > a {
4134 margin-bottom: 0;
4135 }
4136 }
4137 .nav-tabs-justified {
4138 border-bottom: 0;
4139 }
4140 .nav-tabs-justified > li > a {
4141 margin-right: 0;
4142 border-radius: 4px;
4143 }
4144 .nav-tabs-justified > .active > a,
4145 .nav-tabs-justified > .active > a:hover,
4146 .nav-tabs-justified > .active > a:focus {
4147 border: 1px solid #ddd;
4148 }
4149 @media (min-width: 768px) {
4150 .nav-tabs-justified > li > a {
4151 border-bottom: 1px solid #ddd;
4152 border-radius: 4px 4px 0 0;
4153 }
4154 .nav-tabs-justified > .active > a,
4155 .nav-tabs-justified > .active > a:hover,
4156 .nav-tabs-justified > .active > a:focus {
4157 border-bottom-color: #fff;
4158 }
4159 }
4160 .tab-content > .tab-pane {
4161 display: none;
4162 }
4163 .tab-content > .active {
4164 display: block;
4165 }
4166 .nav-tabs .dropdown-menu {
4167 margin-top: -1px;
4168 border-top-left-radius: 0;
4169 border-top-right-radius: 0;
4170 }
4171 .navbar {
4172 position: relative;
4173 min-height: 50px;
4174 margin-bottom: 20px;
4175 border: 1px solid transparent;
4176 }
4177 @media (min-width: 768px) {
4178 .navbar {
4179 border-radius: 4px;
4180 }
4181 }
4182 @media (min-width: 768px) {
4183 .navbar-header {
4184 float: left;
4185 }
4186 }
4187 .navbar-collapse {
4188 padding-right: 15px;
4189 padding-left: 15px;
4190 overflow-x: visible;
4191 -webkit-overflow-scrolling: touch;
4192 border-top: 1px solid transparent;
4193 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
4194 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
4195 }
4196 .navbar-collapse.in {
4197 overflow-y: auto;
4198 }
4199 @media (min-width: 768px) {
4200 .navbar-collapse {
4201 width: auto;
4202 border-top: 0;
4203 -webkit-box-shadow: none;
4204 box-shadow: none;
4205 }
4206 .navbar-collapse.collapse {
4207 display: block !important;
4208 height: auto !important;
4209 padding-bottom: 0;
4210 overflow: visible !important;
4211 }
4212 .navbar-collapse.in {
4213 overflow-y: visible;
4214 }
4215 .navbar-fixed-top .navbar-collapse,
4216 .navbar-static-top .navbar-collapse,
4217 .navbar-fixed-bottom .navbar-collapse {
4218 padding-right: 0;
4219 padding-left: 0;
4220 }
4221 }
4222 .navbar-fixed-top .navbar-collapse,
4223 .navbar-fixed-bottom .navbar-collapse {
4224 max-height: 340px;
4225 }
4226 @media (max-device-width: 480px) and (orientation: landscape) {
4227 .navbar-fixed-top .navbar-collapse,
4228 .navbar-fixed-bottom .navbar-collapse {
4229 max-height: 200px;
4230 }
4231 }
4232 .container > .navbar-header,
4233 .container-fluid > .navbar-header,
4234 .container > .navbar-collapse,
4235 .container-fluid > .navbar-collapse {
4236 margin-right: -15px;
4237 margin-left: -15px;
4238 }
4239 @media (min-width: 768px) {
4240 .container > .navbar-header,
4241 .container-fluid > .navbar-header,
4242 .container > .navbar-collapse,
4243 .container-fluid > .navbar-collapse {
4244 margin-right: 0;
4245 margin-left: 0;
4246 }
4247 }
4248 .navbar-static-top {
4249 z-index: 1000;
4250 border-width: 0 0 1px;
4251 }
4252 @media (min-width: 768px) {
4253 .navbar-static-top {
4254 border-radius: 0;
4255 }
4256 }
4257 .navbar-fixed-top,
4258 .navbar-fixed-bottom {
4259 position: fixed;
4260 right: 0;
4261 left: 0;
4262 z-index: 1030;
4263 }
4264 @media (min-width: 768px) {
4265 .navbar-fixed-top,
4266 .navbar-fixed-bottom {
4267 border-radius: 0;
4268 }
4269 }
4270 .navbar-fixed-top {
4271 top: 0;
4272 border-width: 0 0 1px;
4273 }
4274 .navbar-fixed-bottom {
4275 bottom: 0;
4276 margin-bottom: 0;
4277 border-width: 1px 0 0;
4278 }
4279 .navbar-brand {
4280 float: left;
4281 height: 50px;
4282 padding: 15px 15px;
4283 font-size: 18px;
4284 line-height: 20px;
4285 }
4286 .navbar-brand:hover,
4287 .navbar-brand:focus {
4288 text-decoration: none;
4289 }
4290 .navbar-brand > img {
4291 display: block;
4292 }
4293 @media (min-width: 768px) {
4294 .navbar > .container .navbar-brand,
4295 .navbar > .container-fluid .navbar-brand {
4296 margin-left: -15px;
4297 }
4298 }
4299 .navbar-toggle {
4300 position: relative;
4301 float: right;
4302 padding: 9px 10px;
4303 margin-top: 8px;
4304 margin-right: 15px;
4305 margin-bottom: 8px;
4306 background-color: transparent;
4307 background-image: none;
4308 border: 1px solid transparent;
4309 border-radius: 4px;
4310 }
4311 .navbar-toggle:focus {
4312 outline: 0;
4313 }
4314 .navbar-toggle .icon-bar {
4315 display: block;
4316 width: 22px;
4317 height: 2px;
4318 border-radius: 1px;
4319 }
4320 .navbar-toggle .icon-bar + .icon-bar {
4321 margin-top: 4px;
4322 }
4323 @media (min-width: 768px) {
4324 .navbar-toggle {
4325 display: none;
4326 }
4327 }
4328 .navbar-nav {
4329 margin: 7.5px -15px;
4330 }
4331 .navbar-nav > li > a {
4332 padding-top: 10px;
4333 padding-bottom: 10px;
4334 line-height: 20px;
4335 }
4336 @media (max-width: 767px) {
4337 .navbar-nav .open .dropdown-menu {
4338 position: static;
4339 float: none;
4340 width: auto;
4341 margin-top: 0;
4342 background-color: transparent;
4343 border: 0;
4344 -webkit-box-shadow: none;
4345 box-shadow: none;
4346 }
4347 .navbar-nav .open .dropdown-menu > li > a,
4348 .navbar-nav .open .dropdown-menu .dropdown-header {
4349 padding: 5px 15px 5px 25px;
4350 }
4351 .navbar-nav .open .dropdown-menu > li > a {
4352 line-height: 20px;
4353 }
4354 .navbar-nav .open .dropdown-menu > li > a:hover,
4355 .navbar-nav .open .dropdown-menu > li > a:focus {
4356 background-image: none;
4357 }
4358 }
4359 @media (min-width: 768px) {
4360 .navbar-nav {
4361 float: left;
4362 margin: 0;
4363 }
4364 .navbar-nav > li {
4365 float: left;
4366 }
4367 .navbar-nav > li > a {
4368 padding-top: 15px;
4369 padding-bottom: 15px;
4370 }
4371 }
4372 .navbar-form {
4373 padding: 10px 15px;
4374 margin-top: 8px;
4375 margin-right: -15px;
4376 margin-bottom: 8px;
4377 margin-left: -15px;
4378 border-top: 1px solid transparent;
4379 border-bottom: 1px solid transparent;
4380 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
4381 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
4382 }
4383 @media (min-width: 768px) {
4384 .navbar-form .form-group {
4385 display: inline-block;
4386 margin-bottom: 0;
4387 vertical-align: middle;
4388 }
4389 .navbar-form .form-control {
4390 display: inline-block;
4391 width: auto;
4392 vertical-align: middle;
4393 }
4394 .navbar-form .form-control-static {
4395 display: inline-block;
4396 }
4397 .navbar-form .input-group {
4398 display: inline-table;
4399 vertical-align: middle;
4400 }
4401 .navbar-form .input-group .input-group-addon,
4402 .navbar-form .input-group .input-group-btn,
4403 .navbar-form .input-group .form-control {
4404 width: auto;
4405 }
4406 .navbar-form .input-group > .form-control {
4407 width: 100%;
4408 }
4409 .navbar-form .control-label {
4410 margin-bottom: 0;
4411 vertical-align: middle;
4412 }
4413 .navbar-form .radio,
4414 .navbar-form .checkbox {
4415 display: inline-block;
4416 margin-top: 0;
4417 margin-bottom: 0;
4418 vertical-align: middle;
4419 }
4420 .navbar-form .radio label,
4421 .navbar-form .checkbox label {
4422 padding-left: 0;
4423 }
4424 .navbar-form .radio input[type="radio"],
4425 .navbar-form .checkbox input[type="checkbox"] {
4426 position: relative;
4427 margin-left: 0;
4428 }
4429 .navbar-form .has-feedback .form-control-feedback {
4430 top: 0;
4431 }
4432 }
4433 @media (max-width: 767px) {
4434 .navbar-form .form-group {
4435 margin-bottom: 5px;
4436 }
4437 .navbar-form .form-group:last-child {
4438 margin-bottom: 0;
4439 }
4440 }
4441 @media (min-width: 768px) {
4442 .navbar-form {
4443 width: auto;
4444 padding-top: 0;
4445 padding-bottom: 0;
4446 margin-right: 0;
4447 margin-left: 0;
4448 border: 0;
4449 -webkit-box-shadow: none;
4450 box-shadow: none;
4451 }
4452 }
4453 .navbar-nav > li > .dropdown-menu {
4454 margin-top: 0;
4455 border-top-left-radius: 0;
4456 border-top-right-radius: 0;
4457 }
4458 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4459 margin-bottom: 0;
4460 border-top-left-radius: 4px;
4461 border-top-right-radius: 4px;
4462 border-bottom-right-radius: 0;
4463 border-bottom-left-radius: 0;
4464 }
4465 .navbar-btn {
4466 margin-top: 8px;
4467 margin-bottom: 8px;
4468 }
4469 .navbar-btn.btn-sm {
4470 margin-top: 10px;
4471 margin-bottom: 10px;
4472 }
4473 .navbar-btn.btn-xs {
4474 margin-top: 14px;
4475 margin-bottom: 14px;
4476 }
4477 .navbar-text {
4478 margin-top: 15px;
4479 margin-bottom: 15px;
4480 }
4481 @media (min-width: 768px) {
4482 .navbar-text {
4483 float: left;
4484 margin-right: 15px;
4485 margin-left: 15px;
4486 }
4487 }
4488 @media (min-width: 768px) {
4489 .navbar-left {
4490 float: left !important;
4491 }
4492 .navbar-right {
4493 float: right !important;
4494 margin-right: -15px;
4495 }
4496 .navbar-right ~ .navbar-right {
4497 margin-right: 0;
4498 }
4499 }
4500 .navbar-default {
4501 background-color: #f8f8f8;
4502 border-color: #e7e7e7;
4503 }
4504 .navbar-default .navbar-brand {
4505 color: #777;
4506 }
4507 .navbar-default .navbar-brand:hover,
4508 .navbar-default .navbar-brand:focus {
4509 color: #5e5e5e;
4510 background-color: transparent;
4511 }
4512 .navbar-default .navbar-text {
4513 color: #777;
4514 }
4515 .navbar-default .navbar-nav > li > a {
4516 color: #777;
4517 }
4518 .navbar-default .navbar-nav > li > a:hover,
4519 .navbar-default .navbar-nav > li > a:focus {
4520 color: #333;
4521 background-color: transparent;
4522 }
4523 .navbar-default .navbar-nav > .active > a,
4524 .navbar-default .navbar-nav > .active > a:hover,
4525 .navbar-default .navbar-nav > .active > a:focus {
4526 color: #555;
4527 background-color: #e7e7e7;
4528 }
4529 .navbar-default .navbar-nav > .disabled > a,
4530 .navbar-default .navbar-nav > .disabled > a:hover,
4531 .navbar-default .navbar-nav > .disabled > a:focus {
4532 color: #ccc;
4533 background-color: transparent;
4534 }
4535 .navbar-default .navbar-toggle {
4536 border-color: #ddd;
4537 }
4538 .navbar-default .navbar-toggle:hover,
4539 .navbar-default .navbar-toggle:focus {
4540 background-color: #ddd;
4541 }
4542 .navbar-default .navbar-toggle .icon-bar {
4543 background-color: #888;
4544 }
4545 .navbar-default .navbar-collapse,
4546 .navbar-default .navbar-form {
4547 border-color: #e7e7e7;
4548 }
4549 .navbar-default .navbar-nav > .open > a,
4550 .navbar-default .navbar-nav > .open > a:hover,
4551 .navbar-default .navbar-nav > .open > a:focus {
4552 color: #555;
4553 background-color: #e7e7e7;
4554 }
4555 @media (max-width: 767px) {
4556 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4557 color: #777;
4558 }
4559 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4560 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4561 color: #333;
4562 background-color: transparent;
4563 }
4564 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4565 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4566 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4567 color: #555;
4568 background-color: #e7e7e7;
4569 }
4570 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4571 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4572 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4573 color: #ccc;
4574 background-color: transparent;
4575 }
4576 }
4577 .navbar-default .navbar-link {
4578 color: #777;
4579 }
4580 .navbar-default .navbar-link:hover {
4581 color: #333;
4582 }
4583 .navbar-default .btn-link {
4584 color: #777;
4585 }
4586 .navbar-default .btn-link:hover,
4587 .navbar-default .btn-link:focus {
4588 color: #333;
4589 }
4590 .navbar-default .btn-link[disabled]:hover,
4591 fieldset[disabled] .navbar-default .btn-link:hover,
4592 .navbar-default .btn-link[disabled]:focus,
4593 fieldset[disabled] .navbar-default .btn-link:focus {
4594 color: #ccc;
4595 }
4596 .navbar-inverse {
4597 background-color: #222;
4598 border-color: #080808;
4599 }
4600 .navbar-inverse .navbar-brand {
4601 color: #9d9d9d;
4602 }
4603 .navbar-inverse .navbar-brand:hover,
4604 .navbar-inverse .navbar-brand:focus {
4605 color: #fff;
4606 background-color: transparent;
4607 }
4608 .navbar-inverse .navbar-text {
4609 color: #9d9d9d;
4610 }
4611 .navbar-inverse .navbar-nav > li > a {
4612 color: #9d9d9d;
4613 }
4614 .navbar-inverse .navbar-nav > li > a:hover,
4615 .navbar-inverse .navbar-nav > li > a:focus {
4616 color: #fff;
4617 background-color: transparent;
4618 }
4619 .navbar-inverse .navbar-nav > .active > a,
4620 .navbar-inverse .navbar-nav > .active > a:hover,
4621 .navbar-inverse .navbar-nav > .active > a:focus {
4622 color: #fff;
4623 background-color: #080808;
4624 }
4625 .navbar-inverse .navbar-nav > .disabled > a,
4626 .navbar-inverse .navbar-nav > .disabled > a:hover,
4627 .navbar-inverse .navbar-nav > .disabled > a:focus {
4628 color: #444;
4629 background-color: transparent;
4630 }
4631 .navbar-inverse .navbar-toggle {
4632 border-color: #333;
4633 }
4634 .navbar-inverse .navbar-toggle:hover,
4635 .navbar-inverse .navbar-toggle:focus {
4636 background-color: #333;
4637 }
4638 .navbar-inverse .navbar-toggle .icon-bar {
4639 background-color: #fff;
4640 }
4641 .navbar-inverse .navbar-collapse,
4642 .navbar-inverse .navbar-form {
4643 border-color: #101010;
4644 }
4645 .navbar-inverse .navbar-nav > .open > a,
4646 .navbar-inverse .navbar-nav > .open > a:hover,
4647 .navbar-inverse .navbar-nav > .open > a:focus {
4648 color: #fff;
4649 background-color: #080808;
4650 }
4651 @media (max-width: 767px) {
4652 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4653 border-color: #080808;
4654 }
4655 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4656 background-color: #080808;
4657 }
4658 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4659 color: #9d9d9d;
4660 }
4661 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4662 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4663 color: #fff;
4664 background-color: transparent;
4665 }
4666 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4667 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4668 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4669 color: #fff;
4670 background-color: #080808;
4671 }
4672 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4673 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4674 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4675 color: #444;
4676 background-color: transparent;
4677 }
4678 }
4679 .navbar-inverse .navbar-link {
4680 color: #9d9d9d;
4681 }
4682 .navbar-inverse .navbar-link:hover {
4683 color: #fff;
4684 }
4685 .navbar-inverse .btn-link {
4686 color: #9d9d9d;
4687 }
4688 .navbar-inverse .btn-link:hover,
4689 .navbar-inverse .btn-link:focus {
4690 color: #fff;
4691 }
4692 .navbar-inverse .btn-link[disabled]:hover,
4693 fieldset[disabled] .navbar-inverse .btn-link:hover,
4694 .navbar-inverse .btn-link[disabled]:focus,
4695 fieldset[disabled] .navbar-inverse .btn-link:focus {
4696 color: #444;
4697 }
4698 .breadcrumb {
4699 padding: 8px 15px;
4700 margin-bottom: 20px;
4701 list-style: none;
4702 background-color: #f5f5f5;
4703 border-radius: 4px;
4704 }
4705 .breadcrumb > li {
4706 display: inline-block;
4707 }
4708 .breadcrumb > li + li:before {
4709 padding: 0 5px;
4710 color: #ccc;
4711 content: "/\00a0";
4712 }
4713 .breadcrumb > .active {
4714 color: #777;
4715 }
4716 .pagination {
4717 display: inline-block;
4718 padding-left: 0;
4719 margin: 20px 0;
4720 border-radius: 4px;
4721 }
4722 .pagination > li {
4723 display: inline;
4724 }
4725 .pagination > li > a,
4726 .pagination > li > span {
4727 position: relative;
4728 float: left;
4729 padding: 6px 12px;
4730 margin-left: -1px;
4731 line-height: 1.42857143;
4732 color: #337ab7;
4733 text-decoration: none;
4734 background-color: #fff;
4735 border: 1px solid #ddd;
4736 }
4737 .pagination > li:first-child > a,
4738 .pagination > li:first-child > span {
4739 margin-left: 0;
4740 border-top-left-radius: 4px;
4741 border-bottom-left-radius: 4px;
4742 }
4743 .pagination > li:last-child > a,
4744 .pagination > li:last-child > span {
4745 border-top-right-radius: 4px;
4746 border-bottom-right-radius: 4px;
4747 }
4748 .pagination > li > a:hover,
4749 .pagination > li > span:hover,
4750 .pagination > li > a:focus,
4751 .pagination > li > span:focus {
4752 z-index: 2;
4753 color: #23527c;
4754 background-color: #eee;
4755 border-color: #ddd;
4756 }
4757 .pagination > .active > a,
4758 .pagination > .active > span,
4759 .pagination > .active > a:hover,
4760 .pagination > .active > span:hover,
4761 .pagination > .active > a:focus,
4762 .pagination > .active > span:focus {
4763 z-index: 3;
4764 color: #fff;
4765 cursor: default;
4766 background-color: #337ab7;
4767 border-color: #337ab7;
4768 }
4769 .pagination > .disabled > span,
4770 .pagination > .disabled > span:hover,
4771 .pagination > .disabled > span:focus,
4772 .pagination > .disabled > a,
4773 .pagination > .disabled > a:hover,
4774 .pagination > .disabled > a:focus {
4775 color: #777;
4776 cursor: not-allowed;
4777 background-color: #fff;
4778 border-color: #ddd;
4779 }
4780 .pagination-lg > li > a,
4781 .pagination-lg > li > span {
4782 padding: 10px 16px;
4783 font-size: 18px;
4784 line-height: 1.3333333;
4785 }
4786 .pagination-lg > li:first-child > a,
4787 .pagination-lg > li:first-child > span {
4788 border-top-left-radius: 6px;
4789 border-bottom-left-radius: 6px;
4790 }
4791 .pagination-lg > li:last-child > a,
4792 .pagination-lg > li:last-child > span {
4793 border-top-right-radius: 6px;
4794 border-bottom-right-radius: 6px;
4795 }
4796 .pagination-sm > li > a,
4797 .pagination-sm > li > span {
4798 padding: 5px 10px;
4799 font-size: 12px;
4800 line-height: 1.5;
4801 }
4802 .pagination-sm > li:first-child > a,
4803 .pagination-sm > li:first-child > span {
4804 border-top-left-radius: 3px;
4805 border-bottom-left-radius: 3px;
4806 }
4807 .pagination-sm > li:last-child > a,
4808 .pagination-sm > li:last-child > span {
4809 border-top-right-radius: 3px;
4810 border-bottom-right-radius: 3px;
4811 }
4812 .pager {
4813 padding-left: 0;
4814 margin: 20px 0;
4815 text-align: center;
4816 list-style: none;
4817 }
4818 .pager li {
4819 display: inline;
4820 }
4821 .pager li > a,
4822 .pager li > span {
4823 display: inline-block;
4824 padding: 5px 14px;
4825 background-color: #fff;
4826 border: 1px solid #ddd;
4827 border-radius: 15px;
4828 }
4829 .pager li > a:hover,
4830 .pager li > a:focus {
4831 text-decoration: none;
4832 background-color: #eee;
4833 }
4834 .pager .next > a,
4835 .pager .next > span {
4836 float: right;
4837 }
4838 .pager .previous > a,
4839 .pager .previous > span {
4840 float: left;
4841 }
4842 .pager .disabled > a,
4843 .pager .disabled > a:hover,
4844 .pager .disabled > a:focus,
4845 .pager .disabled > span {
4846 color: #777;
4847 cursor: not-allowed;
4848 background-color: #fff;
4849 }
4850 .label {
4851 display: inline;
4852 padding: .2em .6em .3em;
4853 font-size: 75%;
4854 font-weight: bold;
4855 line-height: 1;
4856 color: #fff;
4857 text-align: center;
4858 white-space: nowrap;
4859 vertical-align: baseline;
4860 border-radius: .25em;
4861 }
4862 a.label:hover,
4863 a.label:focus {
4864 color: #fff;
4865 text-decoration: none;
4866 cursor: pointer;
4867 }
4868 .label:empty {
4869 display: none;
4870 }
4871 .btn .label {
4872 position: relative;
4873 top: -1px;
4874 }
4875 .label-default {
4876 background-color: #777;
4877 }
4878 .label-default[href]:hover,
4879 .label-default[href]:focus {
4880 background-color: #5e5e5e;
4881 }
4882 .label-primary {
4883 background-color: #337ab7;
4884 }
4885 .label-primary[href]:hover,
4886 .label-primary[href]:focus {
4887 background-color: #286090;
4888 }
4889 .label-success {
4890 background-color: #5cb85c;
4891 }
4892 .label-success[href]:hover,
4893 .label-success[href]:focus {
4894 background-color: #449d44;
4895 }
4896 .label-info {
4897 background-color: #5bc0de;
4898 }
4899 .label-info[href]:hover,
4900 .label-info[href]:focus {
4901 background-color: #31b0d5;
4902 }
4903 .label-warning {
4904 background-color: #f0ad4e;
4905 }
4906 .label-warning[href]:hover,
4907 .label-warning[href]:focus {
4908 background-color: #ec971f;
4909 }
4910 .label-danger {
4911 background-color: #d9534f;
4912 }
4913 .label-danger[href]:hover,
4914 .label-danger[href]:focus {
4915 background-color: #c9302c;
4916 }
4917 .badge {
4918 display: inline-block;
4919 min-width: 10px;
4920 padding: 3px 7px;
4921 font-size: 12px;
4922 font-weight: bold;
4923 line-height: 1;
4924 color: #fff;
4925 text-align: center;
4926 white-space: nowrap;
4927 vertical-align: middle;
4928 background-color: #777;
4929 border-radius: 10px;
4930 }
4931 .badge:empty {
4932 display: none;
4933 }
4934 .btn .badge {
4935 position: relative;
4936 top: -1px;
4937 }
4938 .btn-xs .badge,
4939 .btn-group-xs > .btn .badge {
4940 top: 0;
4941 padding: 1px 5px;
4942 }
4943 a.badge:hover,
4944 a.badge:focus {
4945 color: #fff;
4946 text-decoration: none;
4947 cursor: pointer;
4948 }
4949 .list-group-item.active > .badge,
4950 .nav-pills > .active > a > .badge {
4951 color: #337ab7;
4952 background-color: #fff;
4953 }
4954 .list-group-item > .badge {
4955 float: right;
4956 }
4957 .list-group-item > .badge + .badge {
4958 margin-right: 5px;
4959 }
4960 .nav-pills > li > a > .badge {
4961 margin-left: 3px;
4962 }
4963 .jumbotron {
4964 padding-top: 30px;
4965 padding-bottom: 30px;
4966 margin-bottom: 30px;
4967 color: inherit;
4968 background-color: #eee;
4969 }
4970 .jumbotron h1,
4971 .jumbotron .h1 {
4972 color: inherit;
4973 }
4974 .jumbotron p {
4975 margin-bottom: 15px;
4976 font-size: 21px;
4977 font-weight: 200;
4978 }
4979 .jumbotron > hr {
4980 border-top-color: #d5d5d5;
4981 }
4982 .container .jumbotron,
4983 .container-fluid .jumbotron {
4984 padding-right: 15px;
4985 padding-left: 15px;
4986 border-radius: 6px;
4987 }
4988 .jumbotron .container {
4989 max-width: 100%;
4990 }
4991 @media screen and (min-width: 768px) {
4992 .jumbotron {
4993 padding-top: 48px;
4994 padding-bottom: 48px;
4995 }
4996 .container .jumbotron,
4997 .container-fluid .jumbotron {
4998 padding-right: 60px;
4999 padding-left: 60px;
5000 }
5001 .jumbotron h1,
5002 .jumbotron .h1 {
5003 font-size: 63px;
5004 }
5005 }
5006 .thumbnail {
5007 display: block;
5008 padding: 4px;
5009 margin-bottom: 20px;
5010 line-height: 1.42857143;
5011 background-color: #fff;
5012 border: 1px solid #ddd;
5013 border-radius: 4px;
5014 -webkit-transition: border .2s ease-in-out;
5015 -o-transition: border .2s ease-in-out;
5016 transition: border .2s ease-in-out;
5017 }
5018 .thumbnail > img,
5019 .thumbnail a > img {
5020 margin-right: auto;
5021 margin-left: auto;
5022 }
5023 a.thumbnail:hover,
5024 a.thumbnail:focus,
5025 a.thumbnail.active {
5026 border-color: #337ab7;
5027 }
5028 .thumbnail .caption {
5029 padding: 9px;
5030 color: #333;
5031 }
5032 .alert {
5033 padding: 15px;
5034 margin-bottom: 20px;
5035 border: 1px solid transparent;
5036 border-radius: 4px;
5037 }
5038 .alert h4 {
5039 margin-top: 0;
5040 color: inherit;
5041 }
5042 .alert .alert-link {
5043 font-weight: bold;
5044 }
5045 .alert > p,
5046 .alert > ul {
5047 margin-bottom: 0;
5048 }
5049 .alert > p + p {
5050 margin-top: 5px;
5051 }
5052 .alert-dismissable,
5053 .alert-dismissible {
5054 padding-right: 35px;
5055 }
5056 .alert-dismissable .close,
5057 .alert-dismissible .close {
5058 position: relative;
5059 top: -2px;
5060 right: -21px;
5061 color: inherit;
5062 }
5063 .alert-success {
5064 color: #3c763d;
5065 background-color: #dff0d8;
5066 border-color: #d6e9c6;
5067 }
5068 .alert-success hr {
5069 border-top-color: #c9e2b3;
5070 }
5071 .alert-success .alert-link {
5072 color: #2b542c;
5073 }
5074 .alert-info {
5075 color: #31708f;
5076 background-color: #d9edf7;
5077 border-color: #bce8f1;
5078 }
5079 .alert-info hr {
5080 border-top-color: #a6e1ec;
5081 }
5082 .alert-info .alert-link {
5083 color: #245269;
5084 }
5085 .alert-warning {
5086 color: #8a6d3b;
5087 background-color: #fcf8e3;
5088 border-color: #faebcc;
5089 }
5090 .alert-warning hr {
5091 border-top-color: #f7e1b5;
5092 }
5093 .alert-warning .alert-link {
5094 color: #66512c;
5095 }
5096 .alert-danger {
5097 color: #a94442;
5098 background-color: #f2dede;
5099 border-color: #ebccd1;
5100 }
5101 .alert-danger hr {
5102 border-top-color: #e4b9c0;
5103 }
5104 .alert-danger .alert-link {
5105 color: #843534;
5106 }
5107 @-webkit-keyframes progress-bar-stripes {
5108 from {
5109 background-position: 40px 0;
5110 }
5111 to {
5112 background-position: 0 0;
5113 }
5114 }
5115 @-o-keyframes progress-bar-stripes {
5116 from {
5117 background-position: 40px 0;
5118 }
5119 to {
5120 background-position: 0 0;
5121 }
5122 }
5123 @keyframes progress-bar-stripes {
5124 from {
5125 background-position: 40px 0;
5126 }
5127 to {
5128 background-position: 0 0;
5129 }
5130 }
5131 .progress {
5132 height: 20px;
5133 margin-bottom: 20px;
5134 overflow: hidden;
5135 background-color: #f5f5f5;
5136 border-radius: 4px;
5137 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
5138 box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
5139 }
5140 .progress-bar {
5141 float: left;
5142 width: 0;
5143 height: 100%;
5144 font-size: 12px;
5145 line-height: 20px;
5146 color: #fff;
5147 text-align: center;
5148 background-color: #337ab7;
5149 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
5150 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
5151 -webkit-transition: width .6s ease;
5152 -o-transition: width .6s ease;
5153 transition: width .6s ease;
5154 }
5155 .progress-striped .progress-bar,
5156 .progress-bar-striped {
5157 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5158 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5159 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5160 -webkit-background-size: 40px 40px;
5161 background-size: 40px 40px;
5162 }
5163 .progress.active .progress-bar,
5164 .progress-bar.active {
5165 -webkit-animation: progress-bar-stripes 2s linear infinite;
5166 -o-animation: progress-bar-stripes 2s linear infinite;
5167 animation: progress-bar-stripes 2s linear infinite;
5168 }
5169 .progress-bar-success {
5170 background-color: #5cb85c;
5171 }
5172 .progress-striped .progress-bar-success {
5173 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5174 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5175 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5176 }
5177 .progress-bar-info {
5178 background-color: #5bc0de;
5179 }
5180 .progress-striped .progress-bar-info {
5181 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5182 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5183 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5184 }
5185 .progress-bar-warning {
5186 background-color: #f0ad4e;
5187 }
5188 .progress-striped .progress-bar-warning {
5189 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5190 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5191 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5192 }
5193 .progress-bar-danger {
5194 background-color: #d9534f;
5195 }
5196 .progress-striped .progress-bar-danger {
5197 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5198 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5199 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
5200 }
5201 .media {
5202 margin-top: 15px;
5203 }
5204 .media:first-child {
5205 margin-top: 0;
5206 }
5207 .media,
5208 .media-body {
5209 overflow: hidden;
5210 zoom: 1;
5211 }
5212 .media-body {
5213 width: 10000px;
5214 }
5215 .media-object {
5216 display: block;
5217 }
5218 .media-object.img-thumbnail {
5219 max-width: none;
5220 }
5221 .media-right,
5222 .media > .pull-right {
5223 padding-left: 10px;
5224 }
5225 .media-left,
5226 .media > .pull-left {
5227 padding-right: 10px;
5228 }
5229 .media-left,
5230 .media-right,
5231 .media-body {
5232 display: table-cell;
5233 vertical-align: top;
5234 }
5235 .media-middle {
5236 vertical-align: middle;
5237 }
5238 .media-bottom {
5239 vertical-align: bottom;
5240 }
5241 .media-heading {
5242 margin-top: 0;
5243 margin-bottom: 5px;
5244 }
5245 .media-list {
5246 padding-left: 0;
5247 list-style: none;
5248 }
5249 .list-group {
5250 padding-left: 0;
5251 margin-bottom: 20px;
5252 }
5253 .list-group-item {
5254 position: relative;
5255 display: block;
5256 padding: 10px 15px;
5257 margin-bottom: -1px;
5258 background-color: #fff;
5259 border: 1px solid #ddd;
5260 }
5261 .list-group-item:first-child {
5262 border-top-left-radius: 4px;
5263 border-top-right-radius: 4px;
5264 }
5265 .list-group-item:last-child {
5266 margin-bottom: 0;
5267 border-bottom-right-radius: 4px;
5268 border-bottom-left-radius: 4px;
5269 }
5270 a.list-group-item,
5271 button.list-group-item {
5272 color: #555;
5273 }
5274 a.list-group-item .list-group-item-heading,
5275 button.list-group-item .list-group-item-heading {
5276 color: #333;
5277 }
5278 a.list-group-item:hover,
5279 button.list-group-item:hover,
5280 a.list-group-item:focus,
5281 button.list-group-item:focus {
5282 color: #555;
5283 text-decoration: none;
5284 background-color: #f5f5f5;
5285 }
5286 button.list-group-item {
5287 width: 100%;
5288 text-align: left;
5289 }
5290 .list-group-item.disabled,
5291 .list-group-item.disabled:hover,
5292 .list-group-item.disabled:focus {
5293 color: #777;
5294 cursor: not-allowed;
5295 background-color: #eee;
5296 }
5297 .list-group-item.disabled .list-group-item-heading,
5298 .list-group-item.disabled:hover .list-group-item-heading,
5299 .list-group-item.disabled:focus .list-group-item-heading {
5300 color: inherit;
5301 }
5302 .list-group-item.disabled .list-group-item-text,
5303 .list-group-item.disabled:hover .list-group-item-text,
5304 .list-group-item.disabled:focus .list-group-item-text {
5305 color: #777;
5306 }
5307 .list-group-item.active,
5308 .list-group-item.active:hover,
5309 .list-group-item.active:focus {
5310 z-index: 2;
5311 color: #fff;
5312 background-color: #337ab7;
5313 border-color: #337ab7;
5314 }
5315 .list-group-item.active .list-group-item-heading,
5316 .list-group-item.active:hover .list-group-item-heading,
5317 .list-group-item.active:focus .list-group-item-heading,
5318 .list-group-item.active .list-group-item-heading > small,
5319 .list-group-item.active:hover .list-group-item-heading > small,
5320 .list-group-item.active:focus .list-group-item-heading > small,
5321 .list-group-item.active .list-group-item-heading > .small,
5322 .list-group-item.active:hover .list-group-item-heading > .small,
5323 .list-group-item.active:focus .list-group-item-heading > .small {
5324 color: inherit;
5325 }
5326 .list-group-item.active .list-group-item-text,
5327 .list-group-item.active:hover .list-group-item-text,
5328 .list-group-item.active:focus .list-group-item-text {
5329 color: #c7ddef;
5330 }
5331 .list-group-item-success {
5332 color: #3c763d;
5333 background-color: #dff0d8;
5334 }
5335 a.list-group-item-success,
5336 button.list-group-item-success {
5337 color: #3c763d;
5338 }
5339 a.list-group-item-success .list-group-item-heading,
5340 button.list-group-item-success .list-group-item-heading {
5341 color: inherit;
5342 }
5343 a.list-group-item-success:hover,
5344 button.list-group-item-success:hover,
5345 a.list-group-item-success:focus,
5346 button.list-group-item-success:focus {
5347 color: #3c763d;
5348 background-color: #d0e9c6;
5349 }
5350 a.list-group-item-success.active,
5351 button.list-group-item-success.active,
5352 a.list-group-item-success.active:hover,
5353 button.list-group-item-success.active:hover,
5354 a.list-group-item-success.active:focus,
5355 button.list-group-item-success.active:focus {
5356 color: #fff;
5357 background-color: #3c763d;
5358 border-color: #3c763d;
5359 }
5360 .list-group-item-info {
5361 color: #31708f;
5362 background-color: #d9edf7;
5363 }
5364 a.list-group-item-info,
5365 button.list-group-item-info {
5366 color: #31708f;
5367 }
5368 a.list-group-item-info .list-group-item-heading,
5369 button.list-group-item-info .list-group-item-heading {
5370 color: inherit;
5371 }
5372 a.list-group-item-info:hover,
5373 button.list-group-item-info:hover,
5374 a.list-group-item-info:focus,
5375 button.list-group-item-info:focus {
5376 color: #31708f;
5377 background-color: #c4e3f3;
5378 }
5379 a.list-group-item-info.active,
5380 button.list-group-item-info.active,
5381 a.list-group-item-info.active:hover,
5382 button.list-group-item-info.active:hover,
5383 a.list-group-item-info.active:focus,
5384 button.list-group-item-info.active:focus {
5385 color: #fff;
5386 background-color: #31708f;
5387 border-color: #31708f;
5388 }
5389 .list-group-item-warning {
5390 color: #8a6d3b;
5391 background-color: #fcf8e3;
5392 }
5393 a.list-group-item-warning,
5394 button.list-group-item-warning {
5395 color: #8a6d3b;
5396 }
5397 a.list-group-item-warning .list-group-item-heading,
5398 button.list-group-item-warning .list-group-item-heading {
5399 color: inherit;
5400 }
5401 a.list-group-item-warning:hover,
5402 button.list-group-item-warning:hover,
5403 a.list-group-item-warning:focus,
5404 button.list-group-item-warning:focus {
5405 color: #8a6d3b;
5406 background-color: #faf2cc;
5407 }
5408 a.list-group-item-warning.active,
5409 button.list-group-item-warning.active,
5410 a.list-group-item-warning.active:hover,
5411 button.list-group-item-warning.active:hover,
5412 a.list-group-item-warning.active:focus,
5413 button.list-group-item-warning.active:focus {
5414 color: #fff;
5415 background-color: #8a6d3b;
5416 border-color: #8a6d3b;
5417 }
5418 .list-group-item-danger {
5419 color: #a94442;
5420 background-color: #f2dede;
5421 }
5422 a.list-group-item-danger,
5423 button.list-group-item-danger {
5424 color: #a94442;
5425 }
5426 a.list-group-item-danger .list-group-item-heading,
5427 button.list-group-item-danger .list-group-item-heading {
5428 color: inherit;
5429 }
5430 a.list-group-item-danger:hover,
5431 button.list-group-item-danger:hover,
5432 a.list-group-item-danger:focus,
5433 button.list-group-item-danger:focus {
5434 color: #a94442;
5435 background-color: #ebcccc;
5436 }
5437 a.list-group-item-danger.active,
5438 button.list-group-item-danger.active,
5439 a.list-group-item-danger.active:hover,
5440 button.list-group-item-danger.active:hover,
5441 a.list-group-item-danger.active:focus,
5442 button.list-group-item-danger.active:focus {
5443 color: #fff;
5444 background-color: #a94442;
5445 border-color: #a94442;
5446 }
5447 .list-group-item-heading {
5448 margin-top: 0;
5449 margin-bottom: 5px;
5450 }
5451 .list-group-item-text {
5452 margin-bottom: 0;
5453 line-height: 1.3;
5454 }
5455 .panel {
5456 margin-bottom: 20px;
5457 background-color: #fff;
5458 border: 1px solid transparent;
5459 border-radius: 4px;
5460 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5461 box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5462 }
5463 .panel-body {
5464 padding: 15px;
5465 }
5466 .panel-heading {
5467 padding: 10px 15px;
5468 border-bottom: 1px solid transparent;
5469 border-top-left-radius: 3px;
5470 border-top-right-radius: 3px;
5471 }
5472 .panel-heading > .dropdown .dropdown-toggle {
5473 color: inherit;
5474 }
5475 .panel-title {
5476 margin-top: 0;
5477 margin-bottom: 0;
5478 font-size: 16px;
5479 color: inherit;
5480 }
5481 .panel-title > a,
5482 .panel-title > small,
5483 .panel-title > .small,
5484 .panel-title > small > a,
5485 .panel-title > .small > a {
5486 color: inherit;
5487 }
5488 .panel-footer {
5489 padding: 10px 15px;
5490 background-color: #f5f5f5;
5491 border-top: 1px solid #ddd;
5492 border-bottom-right-radius: 3px;
5493 border-bottom-left-radius: 3px;
5494 }
5495 .panel > .list-group,
5496 .panel > .panel-collapse > .list-group {
5497 margin-bottom: 0;
5498 }
5499 .panel > .list-group .list-group-item,
5500 .panel > .panel-collapse > .list-group .list-group-item {
5501 border-width: 1px 0;
5502 border-radius: 0;
5503 }
5504 .panel > .list-group:first-child .list-group-item:first-child,
5505 .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
5506 border-top: 0;
5507 border-top-left-radius: 3px;
5508 border-top-right-radius: 3px;
5509 }
5510 .panel > .list-group:last-child .list-group-item:last-child,
5511 .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
5512 border-bottom: 0;
5513 border-bottom-right-radius: 3px;
5514 border-bottom-left-radius: 3px;
5515 }
5516 .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
5517 border-top-left-radius: 0;
5518 border-top-right-radius: 0;
5519 }
5520 .panel-heading + .list-group .list-group-item:first-child {
5521 border-top-width: 0;
5522 }
5523 .list-group + .panel-footer {
5524 border-top-width: 0;
5525 }
5526 .panel > .table,
5527 .panel > .table-responsive > .table,
5528 .panel > .panel-collapse > .table {
5529 margin-bottom: 0;
5530 }
5531 .panel > .table caption,
5532 .panel > .table-responsive > .table caption,
5533 .panel > .panel-collapse > .table caption {
5534 padding-right: 15px;
5535 padding-left: 15px;
5536 }
5537 .panel > .table:first-child,
5538 .panel > .table-responsive:first-child > .table:first-child {
5539 border-top-left-radius: 3px;
5540 border-top-right-radius: 3px;
5541 }
5542 .panel > .table:first-child > thead:first-child > tr:first-child,
5543 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
5544 .panel > .table:first-child > tbody:first-child > tr:first-child,
5545 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
5546 border-top-left-radius: 3px;
5547 border-top-right-radius: 3px;
5548 }
5549 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
5550 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
5551 .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5552 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5553 .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
5554 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
5555 .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
5556 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
5557 border-top-left-radius: 3px;
5558 }
5559 .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
5560 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
5561 .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5562 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5563 .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
5564 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
5565 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
5566 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
5567 border-top-right-radius: 3px;
5568 }
5569 .panel > .table:last-child,
5570 .panel > .table-responsive:last-child > .table:last-child {
5571 border-bottom-right-radius: 3px;
5572 border-bottom-left-radius: 3px;
5573 }
5574 .panel > .table:last-child > tbody:last-child > tr:last-child,
5575 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
5576 .panel > .table:last-child > tfoot:last-child > tr:last-child,
5577 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
5578 border-bottom-right-radius: 3px;
5579 border-bottom-left-radius: 3px;
5580 }
5581 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5582 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5583 .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5584 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5585 .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5586 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5587 .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
5588 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
5589 border-bottom-left-radius: 3px;
5590 }
5591 .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5592 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5593 .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5594 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5595 .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5596 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5597 .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
5598 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
5599 border-bottom-right-radius: 3px;
5600 }
5601 .panel > .panel-body + .table,
5602 .panel > .panel-body + .table-responsive,
5603 .panel > .table + .panel-body,
5604 .panel > .table-responsive + .panel-body {
5605 border-top: 1px solid #ddd;
5606 }
5607 .panel > .table > tbody:first-child > tr:first-child th,
5608 .panel > .table > tbody:first-child > tr:first-child td {
5609 border-top: 0;
5610 }
5611 .panel > .table-bordered,
5612 .panel > .table-responsive > .table-bordered {
5613 border: 0;
5614 }
5615 .panel > .table-bordered > thead > tr > th:first-child,
5616 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5617 .panel > .table-bordered > tbody > tr > th:first-child,
5618 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5619 .panel > .table-bordered > tfoot > tr > th:first-child,
5620 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5621 .panel > .table-bordered > thead > tr > td:first-child,
5622 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5623 .panel > .table-bordered > tbody > tr > td:first-child,
5624 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5625 .panel > .table-bordered > tfoot > tr > td:first-child,
5626 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5627 border-left: 0;
5628 }
5629 .panel > .table-bordered > thead > tr > th:last-child,
5630 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5631 .panel > .table-bordered > tbody > tr > th:last-child,
5632 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5633 .panel > .table-bordered > tfoot > tr > th:last-child,
5634 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5635 .panel > .table-bordered > thead > tr > td:last-child,
5636 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5637 .panel > .table-bordered > tbody > tr > td:last-child,
5638 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5639 .panel > .table-bordered > tfoot > tr > td:last-child,
5640 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5641 border-right: 0;
5642 }
5643 .panel > .table-bordered > thead > tr:first-child > td,
5644 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
5645 .panel > .table-bordered > tbody > tr:first-child > td,
5646 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
5647 .panel > .table-bordered > thead > tr:first-child > th,
5648 .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5649 .panel > .table-bordered > tbody > tr:first-child > th,
5650 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5651 border-bottom: 0;
5652 }
5653 .panel > .table-bordered > tbody > tr:last-child > td,
5654 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5655 .panel > .table-bordered > tfoot > tr:last-child > td,
5656 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5657 .panel > .table-bordered > tbody > tr:last-child > th,
5658 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5659 .panel > .table-bordered > tfoot > tr:last-child > th,
5660 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
5661 border-bottom: 0;
5662 }
5663 .panel > .table-responsive {
5664 margin-bottom: 0;
5665 border: 0;
5666 }
5667 .panel-group {
5668 margin-bottom: 20px;
5669 }
5670 .panel-group .panel {
5671 margin-bottom: 0;
5672 border-radius: 4px;
5673 }
5674 .panel-group .panel + .panel {
5675 margin-top: 5px;
5676 }
5677 .panel-group .panel-heading {
5678 border-bottom: 0;
5679 }
5680 .panel-group .panel-heading + .panel-collapse > .panel-body,
5681 .panel-group .panel-heading + .panel-collapse > .list-group {
5682 border-top: 1px solid #ddd;
5683 }
5684 .panel-group .panel-footer {
5685 border-top: 0;
5686 }
5687 .panel-group .panel-footer + .panel-collapse .panel-body {
5688 border-bottom: 1px solid #ddd;
5689 }
5690 .panel-default {
5691 border-color: #ddd;
5692 }
5693 .panel-default > .panel-heading {
5694 color: #333;
5695 background-color: #f5f5f5;
5696 border-color: #ddd;
5697 }
5698 .panel-default > .panel-heading + .panel-collapse > .panel-body {
5699 border-top-color: #ddd;
5700 }
5701 .panel-default > .panel-heading .badge {
5702 color: #f5f5f5;
5703 background-color: #333;
5704 }
5705 .panel-default > .panel-footer + .panel-collapse > .panel-body {
5706 border-bottom-color: #ddd;
5707 }
5708 .panel-primary {
5709 border-color: #337ab7;
5710 }
5711 .panel-primary > .panel-heading {
5712 color: #fff;
5713 background-color: #337ab7;
5714 border-color: #337ab7;
5715 }
5716 .panel-primary > .panel-heading + .panel-collapse > .panel-body {
5717 border-top-color: #337ab7;
5718 }
5719 .panel-primary > .panel-heading .badge {
5720 color: #337ab7;
5721 background-color: #fff;
5722 }
5723 .panel-primary > .panel-footer + .panel-collapse > .panel-body {
5724 border-bottom-color: #337ab7;
5725 }
5726 .panel-success {
5727 border-color: #d6e9c6;
5728 }
5729 .panel-success > .panel-heading {
5730 color: #3c763d;
5731 background-color: #dff0d8;
5732 border-color: #d6e9c6;
5733 }
5734 .panel-success > .panel-heading + .panel-collapse > .panel-body {
5735 border-top-color: #d6e9c6;
5736 }
5737 .panel-success > .panel-heading .badge {
5738 color: #dff0d8;
5739 background-color: #3c763d;
5740 }
5741 .panel-success > .panel-footer + .panel-collapse > .panel-body {
5742 border-bottom-color: #d6e9c6;
5743 }
5744 .panel-info {
5745 border-color: #bce8f1;
5746 }
5747 .panel-info > .panel-heading {
5748 color: #31708f;
5749 background-color: #d9edf7;
5750 border-color: #bce8f1;
5751 }
5752 .panel-info > .panel-heading + .panel-collapse > .panel-body {
5753 border-top-color: #bce8f1;
5754 }
5755 .panel-info > .panel-heading .badge {
5756 color: #d9edf7;
5757 background-color: #31708f;
5758 }
5759 .panel-info > .panel-footer + .panel-collapse > .panel-body {
5760 border-bottom-color: #bce8f1;
5761 }
5762 .panel-warning {
5763 border-color: #faebcc;
5764 }
5765 .panel-warning > .panel-heading {
5766 color: #8a6d3b;
5767 background-color: #fcf8e3;
5768 border-color: #faebcc;
5769 }
5770 .panel-warning > .panel-heading + .panel-collapse > .panel-body {
5771 border-top-color: #faebcc;
5772 }
5773 .panel-warning > .panel-heading .badge {
5774 color: #fcf8e3;
5775 background-color: #8a6d3b;
5776 }
5777 .panel-warning > .panel-footer + .panel-collapse > .panel-body {
5778 border-bottom-color: #faebcc;
5779 }
5780 .panel-danger {
5781 border-color: #ebccd1;
5782 }
5783 .panel-danger > .panel-heading {
5784 color: #a94442;
5785 background-color: #f2dede;
5786 border-color: #ebccd1;
5787 }
5788 .panel-danger > .panel-heading + .panel-collapse > .panel-body {
5789 border-top-color: #ebccd1;
5790 }
5791 .panel-danger > .panel-heading .badge {
5792 color: #f2dede;
5793 background-color: #a94442;
5794 }
5795 .panel-danger > .panel-footer + .panel-collapse > .panel-body {
5796 border-bottom-color: #ebccd1;
5797 }
5798 .embed-responsive {
5799 position: relative;
5800 display: block;
5801 height: 0;
5802 padding: 0;
5803 overflow: hidden;
5804 }
5805 .embed-responsive .embed-responsive-item,
5806 .embed-responsive iframe,
5807 .embed-responsive embed,
5808 .embed-responsive object,
5809 .embed-responsive video {
5810 position: absolute;
5811 top: 0;
5812 bottom: 0;
5813 left: 0;
5814 width: 100%;
5815 height: 100%;
5816 border: 0;
5817 }
5818 .embed-responsive-16by9 {
5819 padding-bottom: 56.25%;
5820 }
5821 .embed-responsive-4by3 {
5822 padding-bottom: 75%;
5823 }
5824 .well {
5825 min-height: 20px;
5826 padding: 19px;
5827 margin-bottom: 20px;
5828 background-color: #f5f5f5;
5829 border: 1px solid #e3e3e3;
5830 border-radius: 4px;
5831 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5832 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5833 }
5834 .well blockquote {
5835 border-color: #ddd;
5836 border-color: rgba(0, 0, 0, .15);
5837 }
5838 .well-lg {
5839 padding: 24px;
5840 border-radius: 6px;
5841 }
5842 .well-sm {
5843 padding: 9px;
5844 border-radius: 3px;
5845 }
5846 .close {
5847 float: right;
5848 font-size: 21px;
5849 font-weight: bold;
5850 line-height: 1;
5851 color: #000;
5852 text-shadow: 0 1px 0 #fff;
5853 filter: alpha(opacity=20);
5854 opacity: .2;
5855 }
5856 .close:hover,
5857 .close:focus {
5858 color: #000;
5859 text-decoration: none;
5860 cursor: pointer;
5861 filter: alpha(opacity=50);
5862 opacity: .5;
5863 }
5864 button.close {
5865 -webkit-appearance: none;
5866 padding: 0;
5867 cursor: pointer;
5868 background: transparent;
5869 border: 0;
5870 }
5871 .modal-open {
5872 overflow: hidden;
5873 }
5874 .modal {
5875 position: fixed;
5876 top: 0;
5877 right: 0;
5878 bottom: 0;
5879 left: 0;
5880 z-index: 1050;
5881 display: none;
5882 overflow: hidden;
5883 -webkit-overflow-scrolling: touch;
5884 outline: 0;
5885 }
5886 .modal.fade .modal-dialog {
5887 -webkit-transition: -webkit-transform .3s ease-out;
5888 -o-transition: -o-transform .3s ease-out;
5889 transition: transform .3s ease-out;
5890 -webkit-transform: translate(0, -25%);
5891 -ms-transform: translate(0, -25%);
5892 -o-transform: translate(0, -25%);
5893 transform: translate(0, -25%);
5894 }
5895 .modal.in .modal-dialog {
5896 -webkit-transform: translate(0, 0);
5897 -ms-transform: translate(0, 0);
5898 -o-transform: translate(0, 0);
5899 transform: translate(0, 0);
5900 }
5901 .modal-open .modal {
5902 overflow-x: hidden;
5903 overflow-y: auto;
5904 }
5905 .modal-dialog {
5906 position: relative;
5907 width: auto;
5908 margin: 10px;
5909 }
5910 .modal-content {
5911 position: relative;
5912 background-color: #fff;
5913 -webkit-background-clip: padding-box;
5914 background-clip: padding-box;
5915 border: 1px solid #999;
5916 border: 1px solid rgba(0, 0, 0, .2);
5917 border-radius: 6px;
5918 outline: 0;
5919 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5920 box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5921 }
5922 .modal-backdrop {
5923 position: fixed;
5924 top: 0;
5925 right: 0;
5926 bottom: 0;
5927 left: 0;
5928 z-index: 1040;
5929 background-color: #000;
5930 }
5931 .modal-backdrop.fade {
5932 filter: alpha(opacity=0);
5933 opacity: 0;
5934 }
5935 .modal-backdrop.in {
5936 filter: alpha(opacity=50);
5937 opacity: .5;
5938 }
5939 .modal-header {
5940 padding: 15px;
5941 border-bottom: 1px solid #e5e5e5;
5942 }
5943 .modal-header .close {
5944 margin-top: -2px;
5945 }
5946 .modal-title {
5947 margin: 0;
5948 line-height: 1.42857143;
5949 }
5950 .modal-body {
5951 position: relative;
5952 padding: 15px;
5953 }
5954 .modal-footer {
5955 padding: 15px;
5956 text-align: right;
5957 border-top: 1px solid #e5e5e5;
5958 }
5959 .modal-footer .btn + .btn {
5960 margin-bottom: 0;
5961 margin-left: 5px;
5962 }
5963 .modal-footer .btn-group .btn + .btn {
5964 margin-left: -1px;
5965 }
5966 .modal-footer .btn-block + .btn-block {
5967 margin-left: 0;
5968 }
5969 .modal-scrollbar-measure {
5970 position: absolute;
5971 top: -9999px;
5972 width: 50px;
5973 height: 50px;
5974 overflow: scroll;
5975 }
5976 @media (min-width: 768px) {
5977 .modal-dialog {
5978 width: 600px;
5979 margin: 30px auto;
5980 }
5981 .modal-content {
5982 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5983 box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5984 }
5985 .modal-sm {
5986 width: 300px;
5987 }
5988 }
5989 @media (min-width: 992px) {
5990 .modal-lg {
5991 width: 900px;
5992 }
5993 }
5994 .tooltip {
5995 position: absolute;
5996 z-index: 1070;
5997 display: block;
5998 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
5999 font-size: 12px;
6000 font-style: normal;
6001 font-weight: normal;
6002 line-height: 1.42857143;
6003 text-align: left;
6004 text-align: start;
6005 text-decoration: none;
6006 text-shadow: none;
6007 text-transform: none;
6008 letter-spacing: normal;
6009 word-break: normal;
6010 word-spacing: normal;
6011 word-wrap: normal;
6012 white-space: normal;
6013 filter: alpha(opacity=0);
6014 opacity: 0;
6015
6016 line-break: auto;
6017 }
6018 .tooltip.in {
6019 filter: alpha(opacity=90);
6020 opacity: .9;
6021 }
6022 .tooltip.top {
6023 padding: 5px 0;
6024 margin-top: -3px;
6025 }
6026 .tooltip.right {
6027 padding: 0 5px;
6028 margin-left: 3px;
6029 }
6030 .tooltip.bottom {
6031 padding: 5px 0;
6032 margin-top: 3px;
6033 }
6034 .tooltip.left {
6035 padding: 0 5px;
6036 margin-left: -3px;
6037 }
6038 .tooltip-inner {
6039 max-width: 200px;
6040 padding: 3px 8px;
6041 color: #fff;
6042 text-align: center;
6043 background-color: #000;
6044 border-radius: 4px;
6045 }
6046 .tooltip-arrow {
6047 position: absolute;
6048 width: 0;
6049 height: 0;
6050 border-color: transparent;
6051 border-style: solid;
6052 }
6053 .tooltip.top .tooltip-arrow {
6054 bottom: 0;
6055 left: 50%;
6056 margin-left: -5px;
6057 border-width: 5px 5px 0;
6058 border-top-color: #000;
6059 }
6060 .tooltip.top-left .tooltip-arrow {
6061 right: 5px;
6062 bottom: 0;
6063 margin-bottom: -5px;
6064 border-width: 5px 5px 0;
6065 border-top-color: #000;
6066 }
6067 .tooltip.top-right .tooltip-arrow {
6068 bottom: 0;
6069 left: 5px;
6070 margin-bottom: -5px;
6071 border-width: 5px 5px 0;
6072 border-top-color: #000;
6073 }
6074 .tooltip.right .tooltip-arrow {
6075 top: 50%;
6076 left: 0;
6077 margin-top: -5px;
6078 border-width: 5px 5px 5px 0;
6079 border-right-color: #000;
6080 }
6081 .tooltip.left .tooltip-arrow {
6082 top: 50%;
6083 right: 0;
6084 margin-top: -5px;
6085 border-width: 5px 0 5px 5px;
6086 border-left-color: #000;
6087 }
6088 .tooltip.bottom .tooltip-arrow {
6089 top: 0;
6090 left: 50%;
6091 margin-left: -5px;
6092 border-width: 0 5px 5px;
6093 border-bottom-color: #000;
6094 }
6095 .tooltip.bottom-left .tooltip-arrow {
6096 top: 0;
6097 right: 5px;
6098 margin-top: -5px;
6099 border-width: 0 5px 5px;
6100 border-bottom-color: #000;
6101 }
6102 .tooltip.bottom-right .tooltip-arrow {
6103 top: 0;
6104 left: 5px;
6105 margin-top: -5px;
6106 border-width: 0 5px 5px;
6107 border-bottom-color: #000;
6108 }
6109 .popover {
6110 position: absolute;
6111 top: 0;
6112 left: 0;
6113 z-index: 1060;
6114 display: none;
6115 max-width: 276px;
6116 padding: 1px;
6117 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
6118 font-size: 14px;
6119 font-style: normal;
6120 font-weight: normal;
6121 line-height: 1.42857143;
6122 text-align: left;
6123 text-align: start;
6124 text-decoration: none;
6125 text-shadow: none;
6126 text-transform: none;
6127 letter-spacing: normal;
6128 word-break: normal;
6129 word-spacing: normal;
6130 word-wrap: normal;
6131 white-space: normal;
6132 background-color: #fff;
6133 -webkit-background-clip: padding-box;
6134 background-clip: padding-box;
6135 border: 1px solid #ccc;
6136 border: 1px solid rgba(0, 0, 0, .2);
6137 border-radius: 6px;
6138 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
6139 box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
6140
6141 line-break: auto;
6142 }
6143 .popover.top {
6144 margin-top: -10px;
6145 }
6146 .popover.right {
6147 margin-left: 10px;
6148 }
6149 .popover.bottom {
6150 margin-top: 10px;
6151 }
6152 .popover.left {
6153 margin-left: -10px;
6154 }
6155 .popover-title {
6156 padding: 8px 14px;
6157 margin: 0;
6158 font-size: 14px;
6159 background-color: #f7f7f7;
6160 border-bottom: 1px solid #ebebeb;
6161 border-radius: 5px 5px 0 0;
6162 }
6163 .popover-content {
6164 padding: 9px 14px;
6165 }
6166 .popover > .arrow,
6167 .popover > .arrow:after {
6168 position: absolute;
6169 display: block;
6170 width: 0;
6171 height: 0;
6172 border-color: transparent;
6173 border-style: solid;
6174 }
6175 .popover > .arrow {
6176 border-width: 11px;
6177 }
6178 .popover > .arrow:after {
6179 content: "";
6180 border-width: 10px;
6181 }
6182 .popover.top > .arrow {
6183 bottom: -11px;
6184 left: 50%;
6185 margin-left: -11px;
6186 border-top-color: #999;
6187 border-top-color: rgba(0, 0, 0, .25);
6188 border-bottom-width: 0;
6189 }
6190 .popover.top > .arrow:after {
6191 bottom: 1px;
6192 margin-left: -10px;
6193 content: " ";
6194 border-top-color: #fff;
6195 border-bottom-width: 0;
6196 }
6197 .popover.right > .arrow {
6198 top: 50%;
6199 left: -11px;
6200 margin-top: -11px;
6201 border-right-color: #999;
6202 border-right-color: rgba(0, 0, 0, .25);
6203 border-left-width: 0;
6204 }
6205 .popover.right > .arrow:after {
6206 bottom: -10px;
6207 left: 1px;
6208 content: " ";
6209 border-right-color: #fff;
6210 border-left-width: 0;
6211 }
6212 .popover.bottom > .arrow {
6213 top: -11px;
6214 left: 50%;
6215 margin-left: -11px;
6216 border-top-width: 0;
6217 border-bottom-color: #999;
6218 border-bottom-color: rgba(0, 0, 0, .25);
6219 }
6220 .popover.bottom > .arrow:after {
6221 top: 1px;
6222 margin-left: -10px;
6223 content: " ";
6224 border-top-width: 0;
6225 border-bottom-color: #fff;
6226 }
6227 .popover.left > .arrow {
6228 top: 50%;
6229 right: -11px;
6230 margin-top: -11px;
6231 border-right-width: 0;
6232 border-left-color: #999;
6233 border-left-color: rgba(0, 0, 0, .25);
6234 }
6235 .popover.left > .arrow:after {
6236 right: 1px;
6237 bottom: -10px;
6238 content: " ";
6239 border-right-width: 0;
6240 border-left-color: #fff;
6241 }
6242 .carousel {
6243 position: relative;
6244 }
6245 .carousel-inner {
6246 position: relative;
6247 width: 100%;
6248 overflow: hidden;
6249 }
6250 .carousel-inner > .item {
6251 position: relative;
6252 display: none;
6253 -webkit-transition: .6s ease-in-out left;
6254 -o-transition: .6s ease-in-out left;
6255 transition: .6s ease-in-out left;
6256 }
6257 .carousel-inner > .item > img,
6258 .carousel-inner > .item > a > img {
6259 line-height: 1;
6260 }
6261 @media all and (transform-3d), (-webkit-transform-3d) {
6262 .carousel-inner > .item {
6263 -webkit-transition: -webkit-transform .6s ease-in-out;
6264 -o-transition: -o-transform .6s ease-in-out;
6265 transition: transform .6s ease-in-out;
6266
6267 -webkit-backface-visibility: hidden;
6268 backface-visibility: hidden;
6269 -webkit-perspective: 1000px;
6270 perspective: 1000px;
6271 }
6272 .carousel-inner > .item.next,
6273 .carousel-inner > .item.active.right {
6274 left: 0;
6275 -webkit-transform: translate3d(100%, 0, 0);
6276 transform: translate3d(100%, 0, 0);
6277 }
6278 .carousel-inner > .item.prev,
6279 .carousel-inner > .item.active.left {
6280 left: 0;
6281 -webkit-transform: translate3d(-100%, 0, 0);
6282 transform: translate3d(-100%, 0, 0);
6283 }
6284 .carousel-inner > .item.next.left,
6285 .carousel-inner > .item.prev.right,
6286 .carousel-inner > .item.active {
6287 left: 0;
6288 -webkit-transform: translate3d(0, 0, 0);
6289 transform: translate3d(0, 0, 0);
6290 }
6291 }
6292 .carousel-inner > .active,
6293 .carousel-inner > .next,
6294 .carousel-inner > .prev {
6295 display: block;
6296 }
6297 .carousel-inner > .active {
6298 left: 0;
6299 }
6300 .carousel-inner > .next,
6301 .carousel-inner > .prev {
6302 position: absolute;
6303 top: 0;
6304 width: 100%;
6305 }
6306 .carousel-inner > .next {
6307 left: 100%;
6308 }
6309 .carousel-inner > .prev {
6310 left: -100%;
6311 }
6312 .carousel-inner > .next.left,
6313 .carousel-inner > .prev.right {
6314 left: 0;
6315 }
6316 .carousel-inner > .active.left {
6317 left: -100%;
6318 }
6319 .carousel-inner > .active.right {
6320 left: 100%;
6321 }
6322 .carousel-control {
6323 position: absolute;
6324 top: 0;
6325 bottom: 0;
6326 left: 0;
6327 width: 15%;
6328 font-size: 20px;
6329 color: #fff;
6330 text-align: center;
6331 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
6332 background-color: rgba(0, 0, 0, 0);
6333 filter: alpha(opacity=50);
6334 opacity: .5;
6335 }
6336 .carousel-control.left {
6337 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6338 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6339 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
6340 background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6341 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6342 background-repeat: repeat-x;
6343 }
6344 .carousel-control.right {
6345 right: 0;
6346 left: auto;
6347 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6348 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6349 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
6350 background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6351 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6352 background-repeat: repeat-x;
6353 }
6354 .carousel-control:hover,
6355 .carousel-control:focus {
6356 color: #fff;
6357 text-decoration: none;
6358 filter: alpha(opacity=90);
6359 outline: 0;
6360 opacity: .9;
6361 }
6362 .carousel-control .icon-prev,
6363 .carousel-control .icon-next,
6364 .carousel-control .glyphicon-chevron-left,
6365 .carousel-control .glyphicon-chevron-right {
6366 position: absolute;
6367 top: 50%;
6368 z-index: 5;
6369 display: inline-block;
6370 margin-top: -10px;
6371 }
6372 .carousel-control .icon-prev,
6373 .carousel-control .glyphicon-chevron-left {
6374 left: 50%;
6375 margin-left: -10px;
6376 }
6377 .carousel-control .icon-next,
6378 .carousel-control .glyphicon-chevron-right {
6379 right: 50%;
6380 margin-right: -10px;
6381 }
6382 .carousel-control .icon-prev,
6383 .carousel-control .icon-next {
6384 width: 20px;
6385 height: 20px;
6386 font-family: serif;
6387 line-height: 1;
6388 }
6389 .carousel-control .icon-prev:before {
6390 content: '\2039';
6391 }
6392 .carousel-control .icon-next:before {
6393 content: '\203a';
6394 }
6395 .carousel-indicators {
6396 position: absolute;
6397 bottom: 10px;
6398 left: 50%;
6399 z-index: 15;
6400 width: 60%;
6401 padding-left: 0;
6402 margin-left: -30%;
6403 text-align: center;
6404 list-style: none;
6405 }
6406 .carousel-indicators li {
6407 display: inline-block;
6408 width: 10px;
6409 height: 10px;
6410 margin: 1px;
6411 text-indent: -999px;
6412 cursor: pointer;
6413 background-color: #000 \9;
6414 background-color: rgba(0, 0, 0, 0);
6415 border: 1px solid #fff;
6416 border-radius: 10px;
6417 }
6418 .carousel-indicators .active {
6419 width: 12px;
6420 height: 12px;
6421 margin: 0;
6422 background-color: #fff;
6423 }
6424 .carousel-caption {
6425 position: absolute;
6426 right: 15%;
6427 bottom: 20px;
6428 left: 15%;
6429 z-index: 10;
6430 padding-top: 20px;
6431 padding-bottom: 20px;
6432 color: #fff;
6433 text-align: center;
6434 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
6435 }
6436 .carousel-caption .btn {
6437 text-shadow: none;
6438 }
6439 @media screen and (min-width: 768px) {
6440 .carousel-control .glyphicon-chevron-left,
6441 .carousel-control .glyphicon-chevron-right,
6442 .carousel-control .icon-prev,
6443 .carousel-control .icon-next {
6444 width: 30px;
6445 height: 30px;
6446 margin-top: -10px;
6447 font-size: 30px;
6448 }
6449 .carousel-control .glyphicon-chevron-left,
6450 .carousel-control .icon-prev {
6451 margin-left: -10px;
6452 }
6453 .carousel-control .glyphicon-chevron-right,
6454 .carousel-control .icon-next {
6455 margin-right: -10px;
6456 }
6457 .carousel-caption {
6458 right: 20%;
6459 left: 20%;
6460 padding-bottom: 30px;
6461 }
6462 .carousel-indicators {
6463 bottom: 20px;
6464 }
6465 }
6466 .clearfix:before,
6467 .clearfix:after,
6468 .dl-horizontal dd:before,
6469 .dl-horizontal dd:after,
6470 .container:before,
6471 .container:after,
6472 .container-fluid:before,
6473 .container-fluid:after,
6474 .row:before,
6475 .row:after,
6476 .form-horizontal .form-group:before,
6477 .form-horizontal .form-group:after,
6478 .btn-toolbar:before,
6479 .btn-toolbar:after,
6480 .btn-group-vertical > .btn-group:before,
6481 .btn-group-vertical > .btn-group:after,
6482 .nav:before,
6483 .nav:after,
6484 .navbar:before,
6485 .navbar:after,
6486 .navbar-header:before,
6487 .navbar-header:after,
6488 .navbar-collapse:before,
6489 .navbar-collapse:after,
6490 .pager:before,
6491 .pager:after,
6492 .panel-body:before,
6493 .panel-body:after,
6494 .modal-header:before,
6495 .modal-header:after,
6496 .modal-footer:before,
6497 .modal-footer:after {
6498 display: table;
6499 content: " ";
6500 }
6501 .clearfix:after,
6502 .dl-horizontal dd:after,
6503 .container:after,
6504 .container-fluid:after,
6505 .row:after,
6506 .form-horizontal .form-group:after,
6507 .btn-toolbar:after,
6508 .btn-group-vertical > .btn-group:after,
6509 .nav:after,
6510 .navbar:after,
6511 .navbar-header:after,
6512 .navbar-collapse:after,
6513 .pager:after,
6514 .panel-body:after,
6515 .modal-header:after,
6516 .modal-footer:after {
6517 clear: both;
6518 }
6519 .center-block {
6520 display: block;
6521 margin-right: auto;
6522 margin-left: auto;
6523 }
6524 .pull-right {
6525 float: right !important;
6526 }
6527 .pull-left {
6528 float: left !important;
6529 }
6530 .hide {
6531 display: none !important;
6532 }
6533 .show {
6534 display: block !important;
6535 }
6536 .invisible {
6537 visibility: hidden;
6538 }
6539 .text-hide {
6540 font: 0/0 a;
6541 color: transparent;
6542 text-shadow: none;
6543 background-color: transparent;
6544 border: 0;
6545 }
6546 .hidden {
6547 display: none !important;
6548 }
6549 .affix {
6550 position: fixed;
6551 }
6552 @-ms-viewport {
6553 width: device-width;
6554 }
6555 .visible-xs,
6556 .visible-sm,
6557 .visible-md,
6558 .visible-lg {
6559 display: none !important;
6560 }
6561 .visible-xs-block,
6562 .visible-xs-inline,
6563 .visible-xs-inline-block,
6564 .visible-sm-block,
6565 .visible-sm-inline,
6566 .visible-sm-inline-block,
6567 .visible-md-block,
6568 .visible-md-inline,
6569 .visible-md-inline-block,
6570 .visible-lg-block,
6571 .visible-lg-inline,
6572 .visible-lg-inline-block {
6573 display: none !important;
6574 }
6575 @media (max-width: 767px) {
6576 .visible-xs {
6577 display: block !important;
6578 }
6579 table.visible-xs {
6580 display: table !important;
6581 }
6582 tr.visible-xs {
6583 display: table-row !important;
6584 }
6585 th.visible-xs,
6586 td.visible-xs {
6587 display: table-cell !important;
6588 }
6589 }
6590 @media (max-width: 767px) {
6591 .visible-xs-block {
6592 display: block !important;
6593 }
6594 }
6595 @media (max-width: 767px) {
6596 .visible-xs-inline {
6597 display: inline !important;
6598 }
6599 }
6600 @media (max-width: 767px) {
6601 .visible-xs-inline-block {
6602 display: inline-block !important;
6603 }
6604 }
6605 @media (min-width: 768px) and (max-width: 991px) {
6606 .visible-sm {
6607 display: block !important;
6608 }
6609 table.visible-sm {
6610 display: table !important;
6611 }
6612 tr.visible-sm {
6613 display: table-row !important;
6614 }
6615 th.visible-sm,
6616 td.visible-sm {
6617 display: table-cell !important;
6618 }
6619 }
6620 @media (min-width: 768px) and (max-width: 991px) {
6621 .visible-sm-block {
6622 display: block !important;
6623 }
6624 }
6625 @media (min-width: 768px) and (max-width: 991px) {
6626 .visible-sm-inline {
6627 display: inline !important;
6628 }
6629 }
6630 @media (min-width: 768px) and (max-width: 991px) {
6631 .visible-sm-inline-block {
6632 display: inline-block !important;
6633 }
6634 }
6635 @media (min-width: 992px) and (max-width: 1199px) {
6636 .visible-md {
6637 display: block !important;
6638 }
6639 table.visible-md {
6640 display: table !important;
6641 }
6642 tr.visible-md {
6643 display: table-row !important;
6644 }
6645 th.visible-md,
6646 td.visible-md {
6647 display: table-cell !important;
6648 }
6649 }
6650 @media (min-width: 992px) and (max-width: 1199px) {
6651 .visible-md-block {
6652 display: block !important;
6653 }
6654 }
6655 @media (min-width: 992px) and (max-width: 1199px) {
6656 .visible-md-inline {
6657 display: inline !important;
6658 }
6659 }
6660 @media (min-width: 992px) and (max-width: 1199px) {
6661 .visible-md-inline-block {
6662 display: inline-block !important;
6663 }
6664 }
6665 @media (min-width: 1200px) {
6666 .visible-lg {
6667 display: block !important;
6668 }
6669 table.visible-lg {
6670 display: table !important;
6671 }
6672 tr.visible-lg {
6673 display: table-row !important;
6674 }
6675 th.visible-lg,
6676 td.visible-lg {
6677 display: table-cell !important;
6678 }
6679 }
6680 @media (min-width: 1200px) {
6681 .visible-lg-block {
6682 display: block !important;
6683 }
6684 }
6685 @media (min-width: 1200px) {
6686 .visible-lg-inline {
6687 display: inline !important;
6688 }
6689 }
6690 @media (min-width: 1200px) {
6691 .visible-lg-inline-block {
6692 display: inline-block !important;
6693 }
6694 }
6695 @media (max-width: 767px) {
6696 .hidden-xs {
6697 display: none !important;
6698 }
6699 }
6700 @media (min-width: 768px) and (max-width: 991px) {
6701 .hidden-sm {
6702 display: none !important;
6703 }
6704 }
6705 @media (min-width: 992px) and (max-width: 1199px) {
6706 .hidden-md {
6707 display: none !important;
6708 }
6709 }
6710 @media (min-width: 1200px) {
6711 .hidden-lg {
6712 display: none !important;
6713 }
6714 }
6715 .visible-print {
6716 display: none !important;
6717 }
6718 @media print {
6719 .visible-print {
6720 display: block !important;
6721 }
6722 table.visible-print {
6723 display: table !important;
6724 }
6725 tr.visible-print {
6726 display: table-row !important;
6727 }
6728 th.visible-print,
6729 td.visible-print {
6730 display: table-cell !important;
6731 }
6732 }
6733 .visible-print-block {
6734 display: none !important;
6735 }
6736 @media print {
6737 .visible-print-block {
6738 display: block !important;
6739 }
6740 }
6741 .visible-print-inline {
6742 display: none !important;
6743 }
6744 @media print {
6745 .visible-print-inline {
6746 display: inline !important;
6747 }
6748 }
6749 .visible-print-inline-block {
6750 display: none !important;
6751 }
6752 @media print {
6753 .visible-print-inline-block {
6754 display: inline-block !important;
6755 }
6756 }
6757 @media print {
6758 .hidden-print {
6759 display: none !important;
6760 }
6761 }
6762 /*# sourceMappingURL=bootstrap.css.map */
6763 </style>
6764 <style>body {
6765 padding-bottom: 32px;
6766 }
6767 .form-control[readonly] {
6768 cursor: text;
6769 }
6770 .feedback-container {
6771 position: fixed;
6772 top: 0;
6773 width: 100%;
6774 text-align: center;
6775 z-index: 4;
6776 }
6777 .feedback {
6778 display: table;
6779 padding: 0.5em 1em;
6780 background-color: orange;
6781 margin: 0 auto;
6782 font-size: 2em;
6783 color: #444;
6784 border: 2px solid #555;
6785 border-top: 0;
6786 border-bottom-left-radius: 20px 20px;
6787 border-bottom-right-radius: 20px 20px;
6788 }
6789 .no-border {
6790 border: 0;
6791 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
6792 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
6793 }
6794 .phrase {
6795 word-break: keep-all;
6796 }
6797 .generate-container .strength {
6798 /* override mobile width from bootstrap */
6799 width: auto!important;
6800 display: inline-block;
6801 }
6802 .languages a {
6803 padding-left: 10px;
6804 }
6805 .languages a:nth-of-type(1) {
6806 margin-left: -12px;
6807 padding-left: 0;
6808 }
6809 .monospace {
6810 font-family: monospace;
6811 }
6812 .entropy-container .filtered,
6813 .entropy-container .binary {
6814 word-wrap: break-word;
6815 }
6816 .entropy-container li {
6817 padding-bottom: 5px;
6818 }
6819 .card-suit {
6820 font-size: 19px;
6821 line-height: 0;
6822 }
6823 .card-suit.club {
6824 color: #009F00;
6825 }
6826 .card-suit.diamond {
6827 color: #3D5DC4;
6828 }
6829 .card-suit.heart {
6830 color: #F00;
6831 }
6832 .card-suit.spade {
6833 color: #000;
6834 }
6835 .qr-container {
6836 position: fixed;
6837 top: 0;
6838 right: 0;
6839 text-align: center;
6840 background-color: #FFF;
6841 border: 1px solid #CCC;
6842 }
6843 .qr-image {
6844 margin: 5px;
6845 }
6846 .qr-hint,
6847 .qr-warning {
6848 padding: 2px;
6849 max-width: 320px;
6850 }
6851 .more-info {
6852 cursor: help;
6853 border-bottom: 1px dashed #000;
6854 text-decoration: none;
6855 }
6856 .version {
6857 position: absolute;
6858 top: 5px;
6859 right: 5px;
6860 }
6861 .csv {
6862 margin-top: 20px;
6863 margin-bottom: 20px;
6864 white-space: pre;
6865 overflow-wrap: normal;
6866 overflow-x: scroll;
6867 font-family: monospace;
6868 }
6869 </style>
6870 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
6871 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
6872 <meta content="bitcoin mnemonic converter" name="description" />
6873 <meta content="Ian Coleman" name="author" />
6874 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
6875 </head>
6876 <body>
6877 <div class="container">
6878
6879 <h1 class="text-center">Mnemonic Code Converter</h1>
6880 <p class="version">v0.3.5</p>
6881 <hr>
6882 <div class="row">
6883 <div class="col-md-12">
6884 <h2>Mnemonic</h2>
6885 <form class="form-horizontal" role="form">
6886 <div class="form-group">
6887 <div class="col-sm-2"></div>
6888 <div class="col-sm-10">
6889 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).</p>
6890 <p>
6891 For more info see the
6892 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
6893 </p>
6894 </div>
6895 </div>
6896 <div class="form-group generate-container">
6897 <label class="col-sm-2 control-label"></label>
6898 <div class="col-sm-10">
6899 <div class="form-inline">
6900 <div class="input-group-inline">
6901 <span>Generate a random mnemonic, or enter your own below</span>:
6902 <button class="btn generate">Generate</button>
6903 <select id="strength" class="strength form-control">
6904 <option value="3">3</option>
6905 <option value="6">6</option>
6906 <option value="9">9</option>
6907 <option value="12">12</option>
6908 <option value="15" selected>15</option>
6909 <option value="18">18</option>
6910 <option value="21">21</option>
6911 <option value="24">24</option>
6912 </select>
6913 <span>words</span>.
6914 <p class="warning help-block hidden">
6915 <span class="text-danger">
6916 Mnemonics with less than 12 words have low entropy and may be guessed by an attacker.
6917 </span>
6918 </p>
6919 </div>
6920 </div>
6921 </div>
6922 </div>
6923 <div class="entropy-container hidden">
6924 <div class="form-group text-danger">
6925 <label class="col-sm-2 control-label">Warning</label>
6926 <div class="col-sm-10 form-control-static">
6927 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
6928 <a href="#entropy-notes">Read more</a>
6929 </div>
6930 </div>
6931 <div class="form-group">
6932 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
6933 <div class="col-sm-7">
6934 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
6935 <div class="row filter-warning text-danger hidden">
6936 <p class="col-sm-12">
6937 <strong>
6938 Some characters have been discarded
6939 </strong>
6940 </p>
6941 </div>
6942 <div class="row">
6943 <label class="col-sm-3 control-label"><span class="more-info" title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
6944 <div class="crack-time col-sm-3 form-control-static"></div>
6945 <label class="col-sm-3 control-label">Event Count</label>
6946 <div class="event-count col-sm-3 form-control-static"></div>
6947 </div>
6948 <div class="row">
6949 <label class="col-sm-3 control-label">Entropy Type</label>
6950 <div class="type col-sm-3 form-control-static"></div>
6951 <label class="col-sm-3 control-label">Bits Per Event</label>
6952 <div class="bits-per-event col-sm-3 form-control-static"></div>
6953 </div>
6954 <div class="row">
6955 <label class="col-sm-3 control-label">Raw Entropy Words</label>
6956 <div class="word-count col-sm-3 form-control-static"></div>
6957 <label class="col-sm-3 control-label"><span class="more-info" title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
6958 <div class="bits col-sm-3 form-control-static"></div>
6959 </div>
6960 <label class="col-sm-3 control-label">Filtered Entropy</label>
6961 <div class="filtered col-sm-9 form-control-static"></div>
6962 <label class="col-sm-3 control-label">Raw Binary</label>
6963 <div class="binary col-sm-9 form-control-static"></div>
6964 <label class="col-sm-3 control-label">Binary Checksum</label>
6965 <div class="checksum col-sm-9 form-control-static">&nbsp;</div>
6966 <label class="col-sm-3 control-label">Word Indexes</label>
6967 <div class="word-indexes col-sm-9 form-control-static">&nbsp;</div>
6968 <label class="col-sm-3 control-label">Mnemonic Length</label>
6969 <div class="col-sm-9">
6970 <select class="mnemonic-length form-control">
6971 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
6972 <option value="12">12 <span>Words</span></option>
6973 <option value="15">15 <span>Words</option>
6974 <option value="18">18 <span>Words</span></option>
6975 <option value="21">21 <span>Words</span></option>
6976 <option value="24">24 <span>Words</span></option>
6977 </select>
6978 <p class="weak-entropy-override-warning hidden">
6979 <span class="text-danger">
6980 The mnemonic will appear more secure than it really is.
6981 </span>
6982 </p>
6983 </div>
6984 </div>
6985 <div class="col-sm-3">
6986 <p>Valid entropy values include:</p>
6987 <ul>
6988 <li><strong>Binary</strong> [0-1]<br>101010011</li>
6989 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
6990 <li><strong>Dice</strong> [1-6]<br>62535634</li>
6991 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
6992 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
6993 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
6994 </ul>
6995 </div>
6996 </div>
6997 </div>
6998 <div class="form-group">
6999 <div class="col-sm-2"></div>
7000 <div class="col-sm-10 checkbox">
7001 <label>
7002 <input type="checkbox" class="use-entropy">
7003 <span>Show entropy details</span>
7004 </label>
7005 </div>
7006 </div>
7007 <div class="form-group">
7008 <label class="col-sm-2 control-label">Mnemonic Language</label>
7009 <div class="col-sm-10 languages">
7010 <div class="form-control no-border">
7011 <a href="#english">English</a>
7012 <a href="#japanese" title="Japanese">日本語</a>
7013 <a href="#spanish" title="Spanish">Español</a>
7014 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
7015 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
7016 <a href="#french" title="French">Français</a>
7017 <a href="#italian" title="Italian">Italiano</a>
7018 <a href="#korean" title="Korean">한국어</a>
7019 </div>
7020 </div>
7021 </div>
7022 <div class="form-group">
7023 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
7024 <div class="col-sm-10">
7025 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
7026 </div>
7027 </div>
7028 <div class="form-group">
7029 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
7030 <div class="col-sm-10">
7031 <textarea id="passphrase" class="passphrase form-control"></textarea>
7032 </div>
7033 </div>
7034 <div class="form-group">
7035 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
7036 <div class="col-sm-10">
7037 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
7038 </div>
7039 </div>
7040 <div class="form-group">
7041 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
7042 <div class="col-sm-10">
7043 <select id="network-phrase" class="network form-control">
7044 <!-- populated by javascript -->
7045 </select>
7046 </div>
7047 </div>
7048 <div class="form-group">
7049 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
7050 <div class="col-sm-10">
7051 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
7052 </div>
7053 </div>
7054 <div class="form-group litecoin-ltub-container hidden">
7055 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
7056 <div class="col-sm-10 checkbox">
7057 <label>
7058 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub" checked="checked">
7059 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
7060 </label>
7061 </div>
7062 </div>
7063 </form>
7064 </div>
7065 </div>
7066
7067 <hr>
7068
7069 <div class="row">
7070 <div class="col-md-12">
7071 <h2>Derivation Path</h2>
7072 <ul class="derivation-type nav nav-tabs" role="tablist">
7073 <li id="bip32-tab">
7074 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
7075 </li>
7076 <li id="bip44-tab" class="active">
7077 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
7078 </li>
7079 <li id="bip49-tab">
7080 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
7081 </li>
7082 <li id="bip84-tab">
7083 <a href="#bip84" role="tab" data-toggle="tab">BIP84</a>
7084 </li>
7085 <li id="bip141-tab">
7086 <a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
7087 </li>
7088 </ul>
7089 <div class="derivation-type tab-content">
7090 <div id="bip44" class="tab-pane active">
7091 <form class="form-horizontal" role="form">
7092 <br>
7093 <div class="col-sm-2"></div>
7094 <div class="col-sm-10">
7095 <p>
7096 For more info see the
7097 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
7098 </p>
7099 </div>
7100 <div class="form-group">
7101 <label for="purpose" class="col-sm-2 control-label">
7102 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7103 </label>
7104 <div class="col-sm-10">
7105 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
7106 </div>
7107 </div>
7108 <div class="form-group">
7109 <label for="coin" class="col-sm-2 control-label">
7110 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7111 </label>
7112 <div class="col-sm-10">
7113 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7114 </div>
7115 </div>
7116 <div class="form-group">
7117 <label for="account" class="col-sm-2 control-label">
7118 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7119 </label>
7120 <div class="col-sm-10">
7121 <input id="account" type="text" class="account form-control" value="0">
7122 </div>
7123 </div>
7124 <div class="form-group">
7125 <label for="change" class="col-sm-2 control-label">
7126 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7127 </label>
7128 <div class="col-sm-10">
7129 <input id="change" type="text" class="change form-control" value="0">
7130 </div>
7131 </div>
7132 <div class="form-group">
7133 <label class="col-sm-2 control-label">
7134 </label>
7135 <div class="col-sm-10">
7136 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
7137 </div>
7138 </div>
7139 <div class="form-group">
7140 <label for="account-xprv" class="col-sm-2 control-label">
7141 <span>Account Extended Private Key</span>
7142 </label>
7143 <div class="col-sm-10">
7144 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7145 </div>
7146 </div>
7147 <div class="form-group">
7148 <label for="account-xpub" class="col-sm-2 control-label">
7149 <span>Account Extended Public Key</span>
7150 </label>
7151 <div class="col-sm-10">
7152 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7153 </div>
7154 </div>
7155 <div class="form-group">
7156 <label class="col-sm-2 control-label">
7157 </label>
7158 <div class="col-sm-10">
7159 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7160 </div>
7161 </div>
7162 <div class="form-group">
7163 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7164 <div class="col-sm-10">
7165 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
7166 </div>
7167 </div>
7168 </form>
7169 </div>
7170 <div id="bip32" class="tab-pane">
7171 <form class="form-horizontal" role="form">
7172 <br>
7173 <div class="col-sm-2"></div>
7174 <div class="col-sm-10">
7175 <p>
7176 For more info see the
7177 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
7178 </p>
7179 </div>
7180 <div class="form-group">
7181 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
7182 <div class="col-sm-10">
7183 <select id="bip32-client" class="client form-control">
7184 <option value="custom">Custom derivation path</option>
7185 <!-- populated by javascript -->
7186 </select>
7187 </div>
7188 </div>
7189 <div class="form-group">
7190 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7191 <div class="col-sm-10">
7192 <input id="bip32-path" type="text" class="path form-control" value="m/0">
7193 </div>
7194 </div>
7195 <div class="form-group">
7196 <div class="col-sm-2"></div>
7197 <label class="col-sm-10">
7198 <input class="hardened-addresses" type="checkbox">
7199 <span>Use hardened addresses</span>
7200 </label>
7201 </div>
7202 <div class="form-group">
7203 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
7204 <div class="col-sm-10">
7205 <p class="form-control no-border">
7206 Use path <code>m/0'/0'</code> with hardened addresses.
7207 </p>
7208 <p class="form-control no-border">
7209 For more info see the
7210 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
7211 </p>
7212 </div>
7213 </div>
7214 <div class="form-group">
7215 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
7216 <div class="col-sm-10">
7217 <p class="form-control no-border">
7218 <span>Use path <code>m/0'/0</code>.</span>
7219 </p>
7220 <p class="form-control no-border">
7221 <span>For more info see</span>
7222 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
7223 </p>
7224 </div>
7225 </div>
7226 <div class="form-group">
7227 <label class="col-sm-2 control-label">Block Explorers</label>
7228 <div class="col-sm-10">
7229 <p class="form-control no-border">
7230 <span>Use path <code>m/44'/0'/0'</code>.</span>
7231 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
7232 </p>
7233 <p class="form-control no-border">
7234 <span>Can be used with</span>:
7235 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
7236 </p>
7237 </div>
7238 </div>
7239 </form>
7240 </div>
7241 <div id="bip49" class="tab-pane">
7242 <form class="form-horizontal" role="form">
7243 <br>
7244 <div class="unavailable hidden">
7245 <div class="form-group">
7246 <div class="col-sm-2"></div>
7247 <div class="col-sm-10">
7248 <p>BIP49 is unavailable for this coin.</p>
7249 </div>
7250 </div>
7251 </div>
7252 <div class="available">
7253 <div class="col-sm-2"></div>
7254 <div class="col-sm-10">
7255 <p>
7256 For more info see the
7257 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
7258 </p>
7259 </div>
7260 <div class="form-group">
7261 <label for="purpose" class="col-sm-2 control-label">
7262 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7263 </label>
7264 <div class="col-sm-10">
7265 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
7266 </div>
7267 </div>
7268 <div class="form-group">
7269 <label for="coin" class="col-sm-2 control-label">
7270 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7271 </label>
7272 <div class="col-sm-10">
7273 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7274 </div>
7275 </div>
7276 <div class="form-group">
7277 <label for="account" class="col-sm-2 control-label">
7278 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7279 </label>
7280 <div class="col-sm-10">
7281 <input id="account" type="text" class="account form-control" value="0">
7282 </div>
7283 </div>
7284 <div class="form-group">
7285 <label for="change" class="col-sm-2 control-label">
7286 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7287 </label>
7288 <div class="col-sm-10">
7289 <input id="change" type="text" class="change form-control" value="0">
7290 </div>
7291 </div>
7292 <div class="form-group">
7293 <label class="col-sm-2 control-label">
7294 </label>
7295 <div class="col-sm-10">
7296 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
7297 </div>
7298 </div>
7299 <div class="form-group">
7300 <label for="account-xprv" class="col-sm-2 control-label">
7301 <span>Account Extended Private Key</span>
7302 </label>
7303 <div class="col-sm-10">
7304 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7305 </div>
7306 </div>
7307 <div class="form-group">
7308 <label for="account-xpub" class="col-sm-2 control-label">
7309 <span>Account Extended Public Key</span>
7310 </label>
7311 <div class="col-sm-10">
7312 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7313 </div>
7314 </div>
7315 <div class="form-group">
7316 <label class="col-sm-2 control-label">
7317 </label>
7318 <div class="col-sm-10">
7319 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7320 </div>
7321 </div>
7322 <div class="form-group">
7323 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7324 <div class="col-sm-10">
7325 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
7326 </div>
7327 </div>
7328 </div>
7329 </form>
7330 </div>
7331 <div id="bip141" class="tab-pane">
7332 <form class="form-horizontal" role="form">
7333 <br>
7334 <div class="unavailable hidden">
7335 <div class="form-group">
7336 <div class="col-sm-2"></div>
7337 <div class="col-sm-10">
7338 <p>BIP141 is unavailable for this coin.</p>
7339 </div>
7340 </div>
7341 </div>
7342 <div class="available">
7343 <div class="col-sm-2"></div>
7344 <div class="col-sm-10">
7345 <p>
7346 For more info see the
7347 <a href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki" target="_blank">BIP141 spec</a>
7348 </p>
7349 </div>
7350 <div class="form-group">
7351 <label for="bip141-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7352 <div class="col-sm-10">
7353 <input id="bip141-path" type="text" class="bip141-path form-control" value="m/0">
7354 </div>
7355 </div>
7356 <div class="form-group">
7357 <label class="col-sm-2 control-label">Script Semantics</label>
7358 <div class="col-sm-10">
7359 <select class="form-control bip141-semantics">
7360 <option value="p2wpkh">P2WPKH</option>
7361 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
7362 </select>
7363 </div>
7364 </div>
7365 </div>
7366 </form>
7367 </div>
7368 <div id="bip84" class="tab-pane">
7369 <form class="form-horizontal" role="form">
7370 <br>
7371 <div class="col-sm-2"></div>
7372 <div class="col-sm-10">
7373 <p>
7374 For more info see the
7375 <a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
7376 </p>
7377 </div>
7378 <div class="form-group">
7379 <label for="purpose" class="col-sm-2 control-label">
7380 Purpose
7381 </label>
7382 <div class="col-sm-10">
7383 <input id="purpose" type="text" class="purpose form-control" value="84" readonly>
7384 </div>
7385 </div>
7386 <div class="form-group">
7387 <label for="coin" class="col-sm-2 control-label">
7388 Coin
7389 </label>
7390 <div class="col-sm-10">
7391 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7392 </div>
7393 </div>
7394 <div class="form-group">
7395 <label for="account" class="col-sm-2 control-label">
7396 Account
7397 </label>
7398 <div class="col-sm-10">
7399 <input id="account" type="text" class="account form-control" value="0">
7400 </div>
7401 </div>
7402 <div class="form-group">
7403 <label for="change" class="col-sm-2 control-label">
7404 External / Internal
7405 </label>
7406 <div class="col-sm-10">
7407 <input id="change" type="text" class="change form-control" value="0">
7408 </div>
7409 </div>
7410 <div class="form-group">
7411 <label class="col-sm-2 control-label">
7412 </label>
7413 <div class="col-sm-10">
7414 <p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
7415 </div>
7416 </div>
7417 <div class="form-group">
7418 <label for="account-xprv" class="col-sm-2 control-label">
7419 <span>Account Extended Private Key</span>
7420 </label>
7421 <div class="col-sm-10">
7422 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7423 </div>
7424 </div>
7425 <div class="form-group">
7426 <label for="account-xpub" class="col-sm-2 control-label">
7427 <span>Account Extended Public Key</span>
7428 </label>
7429 <div class="col-sm-10">
7430 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7431 </div>
7432 </div>
7433 <div class="form-group">
7434 <label class="col-sm-2 control-label">
7435 </label>
7436 <div class="col-sm-10">
7437 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7438 </div>
7439 </div>
7440 <div class="form-group">
7441 <label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7442 <div class="col-sm-10">
7443 <input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
7444 </div>
7445 </div>
7446 </form>
7447 </div>
7448 </div>
7449 <form class="form-horizontal" role="form">
7450 <div class="form-group">
7451 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
7452 <div class="col-sm-10">
7453 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
7454 </div>
7455 </div>
7456 <div class="form-group">
7457 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
7458 <div class="col-sm-10">
7459 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
7460 </div>
7461 </div>
7462 </form>
7463 </div>
7464 </div>
7465
7466 <hr>
7467
7468 <div class="row">
7469 <div class="col-md-12">
7470 <h2>Derived Addresses</h2>
7471 <p>Note these addresses are derived from the BIP32 Extended Key</p>
7472 </div>
7473 <div class="col-md-12 use-bitpay-addresses-container hidden">
7474 <div class="checkbox">
7475 <label>
7476 <input type="checkbox" class="use-bitpay-addresses">
7477 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
7478 </label>
7479 </div>
7480 </div>
7481 <div class="col-md-12">
7482 <div class="checkbox">
7483 <label>
7484 <input type="checkbox" class="use-bip38">
7485 <span>Encrypt private keys using BIP38 and this password:</span>
7486 </label>
7487 <input class="bip38-password">
7488 <span>Enabling BIP38 means each key will take several minutes to generate.</span>
7489 </div>
7490 </div>
7491 <ul class="addresses-type nav nav-tabs" role="tablist">
7492 <li id="table-tab" class="active">
7493 <a href="#table" role="tab" data-toggle="tab">Table</a>
7494 </li>
7495 <li id="csv-tab">
7496 <a href="#csv" role="tab" data-toggle="tab">CSV</a>
7497 </li>
7498 </ul>
7499 <div class="addresses-type tab-content">
7500 <div id="table" class="tab-pane active">
7501 <div class="col-md-12">
7502 <table class="table table-striped">
7503 <thead>
7504 <th>
7505 <div class="input-group">
7506 <span>Path</span>&nbsp;&nbsp;
7507 <button class="index-toggle">Toggle</button>
7508 </div>
7509 </th>
7510 <th>
7511 <div class="input-group">
7512 <span>Address</span>&nbsp;&nbsp;
7513 <button class="address-toggle">Toggle</button>
7514 </div>
7515 </th>
7516 <th>
7517 <div class="input-group">
7518 <span>Public Key</span>&nbsp;&nbsp;
7519 <button class="public-key-toggle">Toggle</button>
7520 </div>
7521 </th>
7522 <th>
7523 <div class="input-group">
7524 <span>Private Key</span>&nbsp;&nbsp;
7525 <button class="private-key-toggle">Toggle</button>
7526 </div>
7527 </th>
7528 </thead>
7529 <tbody class="addresses monospace">
7530 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7531 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7532 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7533 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7534 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7535 </tbody>
7536 </table>
7537 </div>
7538 </div>
7539 <div id="csv" class="tab-pane">
7540 <div class="col-md-12">
7541 <textarea class="csv form-control" rows="25" readonly></textarea>
7542 </div>
7543 </div>
7544 </div>
7545 </div>
7546 <span>Show</span>
7547 <input type="number" class="rows-to-add" value="20">
7548 <button class="more">more rows</button>
7549 <span>starting from index</span>
7550 <input type="number" class="more-rows-start-index">
7551 <span>(leave blank to generate from next index)</span>
7552
7553 <hr>
7554
7555 <div class="row">
7556 <div class="col-md-12">
7557 <h2>More info</h2>
7558 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
7559 <p>
7560 Read more at the
7561 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
7562 </p>
7563 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
7564 <p>
7565 Read more at the
7566 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
7567 </p>
7568 <p>
7569 See the demo at
7570 <a href="http://bip32.org/" target="_blank">bip32.org</a>
7571 </p>
7572 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
7573 <p>
7574 Read more at the
7575 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
7576 </p>
7577 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
7578 <p>
7579 Read more at the
7580 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
7581 </p>
7582 <h3>Private Keys</h3>
7583 <p>
7584 <span>
7585 Use private keys at
7586 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
7587 </span>
7588 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
7589 </p>
7590 <h3 id="entropy-notes">Entropy</h3>
7591 <p>
7592 <span>Entropy values should not include the BIP39 checksum. This is automatically added by the tool.</span>
7593 </p>
7594 <p>
7595 <span>
7596 Entropy values must be sourced from a
7597 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
7598 </span>
7599 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
7600 <span>
7601 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or street address,
7602 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
7603 random enough for the needs of this tool.
7604 </span>
7605 </p>
7606 <p>
7607 <strong><span>Do not store entropy.</span></strong>
7608 </p>
7609 <p>
7610 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
7611 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
7612 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
7613 </p>
7614 <p>
7615 <span>
7616 The random mnemonic generator on this page uses a
7617 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
7618 </span>
7619 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
7620 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
7621 <span>In that case you might choose to use your own source of entropy.</span>
7622 </p>
7623 <p>
7624 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
7625 </p>
7626 <h3>License</h3>
7627 <p>
7628 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
7629 </span>
7630 </p>
7631 <p>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.</p>
7632 </div>
7633 </div>
7634
7635 <hr>
7636
7637 <div class="row">
7638 <div class="col-md-12">
7639 <h2>Alternative Tools</h2>
7640 <p>This tool is interoperable with any BIP39 wallet.</p>
7641 <p>Some similar tools to this one (ie not consumer wallets) are</p>
7642 <p>
7643 <a href="https://bip32jp.github.io/english/">
7644 https://bip32jp.github.io/english/
7645 </a>
7646 </p>
7647 </div>
7648 </div>
7649
7650 <hr>
7651
7652 <div class="row">
7653 <div class="col-md-12">
7654
7655 <h2>Offline Usage</h2>
7656
7657 <p>
7658 You can use this tool without having to be online.
7659 </p>
7660 <p>
7661 In your browser, select file save-as, and save this page
7662 as a file.
7663 </p>
7664 <p>
7665 Double-click that file to open it in a browser
7666 on any offline computer.
7667 </p>
7668 <p>
7669 <span>Alternatively, download the file from the repository</span>
7670 -
7671 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
7672 </p>
7673
7674 </div>
7675 </div>
7676
7677 <hr>
7678
7679 <div class="row">
7680 <div class="col-md-12">
7681
7682 <h2>This project is 100% open-source code</h2>
7683
7684 <p>
7685 <span>Get the source code from the repository</span>
7686 -
7687 <a href="https://github.com/iancoleman/bip39" target="_blank">
7688 https://github.com/iancoleman/bip39
7689 </a>
7690 </p>
7691
7692 <h3>Libraries</h3>
7693
7694 <p>
7695 <span>BitcoinJS - </span>
7696 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
7697 https://github.com/bitcoinjs/bitcoinjs-lib
7698 </a>
7699 </p>
7700
7701 <p>
7702 <span>jsBIP39 - </span>
7703 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
7704 https://github.com/iancoleman/jsbip39
7705 </a>
7706 </p>
7707
7708 <p>
7709 <span>sjcl - </span>
7710 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
7711 https://github.com/bitwiseshiftleft/sjcl
7712 </a>
7713 </p>
7714
7715 <p>
7716 <span>jQuery - </span>
7717 <a href="https://jquery.com/" target="_blank">
7718 https://jquery.com/
7719 </a>
7720 </p>
7721
7722 <p>
7723 <span>Twitter Bootstrap - </span>
7724 <a href="http://getbootstrap.com/" target="_blank">
7725 http://getbootstrap.com/
7726 </a>
7727 </p>
7728
7729 </div>
7730 </div>
7731
7732 </div>
7733
7734 <div class="qr-container hidden">
7735 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
7736 <div class="qr-hint bg-primary">Click field to show QR</div>
7737 <div class="qr-hider hidden">
7738 <div class="qr-image"></div>
7739 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
7740 </div>
7741 </div>
7742
7743 <div class="feedback-container">
7744 <div class="feedback">Loading...</div>
7745 </div>
7746
7747 <script type="text/template" id="address-row-template">
7748 <tr>
7749 <td class="index"><span></span></td>
7750 <td class="address"><span data-show-qr></span></td>
7751 <td class="pubkey"><span data-show-qr></span></td>
7752 <td class="privkey"><span data-show-qr></span></td>
7753 </tr>
7754 </script>
7755 <script>// From
7756 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
7757 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
7758 // but is not required in any modern browsers.
7759 // For more information, see
7760 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7761
7762 //----------------------------------------------------------------------
7763 //
7764 // ECMAScript 2015 Polyfills
7765 //
7766 //----------------------------------------------------------------------
7767
7768 (function (global) {
7769 "use strict";
7770
7771 // Set this to always override native implementations, for testing
7772 // the polyfill in browsers with partial/full ES2015 support.
7773 var OVERRIDE_NATIVE_FOR_TESTING = false;
7774
7775 var undefined = (void 0); // Paranoia
7776
7777 // Helpers
7778
7779 function strict(o) {
7780 return o === global ? undefined : o;
7781 }
7782
7783 function hook(o, p, f) {
7784 var op = o[p];
7785 console.assert(typeof op === 'function', 'Hooking a non-function');
7786 o[p] = function() {
7787 var o = strict(this);
7788 var r = f.apply(o, arguments);
7789 return r !== undefined ? r : op.apply(o, arguments);
7790 };
7791 }
7792
7793 function isSymbol(s) {
7794 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
7795 }
7796
7797 function getPropertyDescriptor(target, name) {
7798 var desc = Object.getOwnPropertyDescriptor(target, name);
7799 var proto = Object.getPrototypeOf(target);
7800 while (!desc && proto) {
7801 desc = Object.getOwnPropertyDescriptor(proto, name);
7802 proto = Object.getPrototypeOf(proto);
7803 }
7804 return desc;
7805 }
7806
7807 var enqueue = (function(nativePromise, nativeSetImmediate) {
7808 if (nativePromise)
7809 return function(job) { nativePromise.resolve().then(function() { job(); }); };
7810 if (nativeSetImmediate)
7811 return function(job) { nativeSetImmediate(job); };
7812 return function(job) { setTimeout(job, 0); };
7813 }(global['Promise'], global['setImmediate']));
7814
7815 function define(o, p, v, override) {
7816 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
7817 return;
7818
7819 if (typeof v === 'function') {
7820 // Sanity check that functions are appropriately named (where possible)
7821 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
7822 Object.defineProperty(o, p, {
7823 value: v,
7824 configurable: true,
7825 enumerable: false,
7826 writable: true
7827 });
7828 } else {
7829 Object.defineProperty(o, p, {
7830 value: v,
7831 configurable: false,
7832 enumerable: false,
7833 writable: false
7834 });
7835 }
7836 }
7837
7838 function set_internal(o, p, v) {
7839 Object.defineProperty(o, p, {
7840 value: v,
7841 configurable: false,
7842 enumerable: false,
7843 writable: true
7844 });
7845 }
7846
7847 // Snapshot intrinsic functions
7848 var $isNaN = global.isNaN,
7849 $parseInt = global.parseInt,
7850 $parseFloat = global.parseFloat;
7851
7852 var E = Math.E,
7853 LOG10E = Math.LOG10E,
7854 LOG2E = Math.LOG2E,
7855 abs = Math.abs,
7856 ceil = Math.ceil,
7857 exp = Math.exp,
7858 floor = Math.floor,
7859 log = Math.log,
7860 max = Math.max,
7861 min = Math.min,
7862 pow = Math.pow,
7863 random = Math.random,
7864 sqrt = Math.sqrt;
7865
7866 var orig_match = String.prototype.match,
7867 orig_replace = String.prototype.replace,
7868 orig_search = String.prototype.search,
7869 orig_split = String.prototype.split;
7870
7871 // These are used for implementing the polyfills, but not exported.
7872
7873 // Inspired by https://gist.github.com/1638059
7874 /** @constructor */
7875 function EphemeronTable() {
7876 var secretKey = ObjectCreate(null);
7877
7878 function conceal(o) {
7879 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
7880 Object.defineProperty(o, 'valueOf', {
7881 value: (function(secretKey) {
7882 return function (k) {
7883 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
7884 };
7885 }(secretKey)),
7886 configurable: true,
7887 writeable: true,
7888 enumerable: false
7889 });
7890 return secrets;
7891 }
7892
7893 function reveal(o) {
7894 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
7895 return v === o ? null : v;
7896 }
7897
7898 return {
7899 clear: function() {
7900 secretKey = ObjectCreate(null);
7901 },
7902 remove: function(key) {
7903 var secrets = reveal(key);
7904 if (secrets && HasOwnProperty(secrets, 'value')) {
7905 delete secrets.value;
7906 return true;
7907 }
7908 return false;
7909 },
7910 get: function(key, defaultValue) {
7911 var secrets = reveal(key);
7912 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
7913 },
7914 has: function(key) {
7915 var secrets = reveal(key);
7916 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
7917 },
7918 set: function(key, value) {
7919 var secrets = reveal(key) || conceal(key);
7920 secrets.value = value;
7921 }
7922 };
7923 }
7924
7925 var empty = Object.create(null);
7926
7927 //----------------------------------------------------------------------
7928 //
7929 // ECMAScript 2015
7930 // http://www.ecma-international.org/ecma-262/6.0/
7931 //
7932 //----------------------------------------------------------------------
7933
7934 // ---------------------------------------
7935 // 19.4 Symbol Objects
7936 // ---------------------------------------
7937
7938 // NOTE: Symbols are defined here - out of spec order - since we need the
7939 // properties and prototype to be populated for other polyfills.
7940
7941 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
7942
7943 var symbolForKey;
7944 (function() {
7945 var secret = Object.create(null);
7946 var symbolMap = {};
7947 symbolForKey = function(k) {
7948 return symbolMap[k];
7949 };
7950
7951 var GlobalSymbolRegistry = [];
7952
7953 function unique(bits) {
7954 return Array(bits + 1).join('x').replace(/x/g, function() {
7955 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
7956 });
7957 }
7958
7959 // 19.4.1 The Symbol Constructor
7960 // 19.4.1.1 Symbol ( description=undefined )
7961 function Symbol(description) {
7962 if (!(this instanceof Symbol)) return new Symbol(description, secret);
7963 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
7964
7965 var descString = description === undefined ? undefined : String(description);
7966
7967 set_internal(this, '[[SymbolData]]', unique(128));
7968 set_internal(this, '[[Description]]', descString);
7969
7970 symbolMap[this] = this;
7971 return this;
7972 }
7973
7974 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
7975 global.Symbol = Symbol;
7976
7977 // 19.4.2 Properties of the Symbol Constructor
7978
7979 // 19.4.2.1 Symbol.for (key)
7980 define(Symbol, 'for', function for_(key) {
7981 var stringKey = String(key);
7982 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7983 var e = GlobalSymbolRegistry[i];
7984 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
7985 }
7986 var newSymbol = Symbol(key);
7987 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
7988 return newSymbol;
7989 });
7990
7991 // 19.4.2.2 Symbol.hasInstance
7992 // 19.4.2.3 Symbol.isConcatSpreadable
7993
7994 // 19.4.2.4 Symbol.iterator
7995 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
7996
7997 // 19.4.2.5 Symbol.keyFor (sym)
7998 define(Symbol, 'keyFor', function keyFor(sym) {
7999 if (!(sym instanceof Symbol)) throw TypeError();
8000 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
8001 var e = GlobalSymbolRegistry[i];
8002 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
8003 }
8004 return undefined;
8005 });
8006
8007 // 19.4.2.6 Symbol.match
8008 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
8009
8010 // 19.4.2.7 Symbol.prototype
8011
8012 // 19.4.2.8 Symbol.replace
8013 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
8014
8015 // 19.4.2.9 Symbol.search
8016 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
8017
8018 // 19.4.2.10 Symbol.species
8019
8020 // 19.4.2.11 Symbol.search
8021 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
8022
8023 // 19.4.2.12 Symbol.toPrimitive
8024
8025 // 19.4.2.13 Symbol.toStringTag
8026 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
8027
8028 // 19.4.2.14 Symbol.unscopables
8029
8030 // 19.4.3 Properties of the Symbol Prototype Object
8031 // 19.4.3.1 Symbol.prototype.constructor
8032
8033 // 19.4.3.2 Symbol.prototype.toString ( )
8034 Object.defineProperty(Symbol.prototype, 'toString', {
8035 value: function toString() {
8036 var s = strict(this);
8037 var desc = s['[[Description]]'];
8038 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
8039 },
8040 configurable: true, writeable: true, enumerable: false });
8041
8042 // 19.4.3.3 Symbol.prototype.valueOf ( )
8043 Object.defineProperty(Symbol.prototype, 'valueOf', {
8044 value: function valueOf() {
8045 // To prevent automatic string conversion:
8046 throw TypeError();
8047
8048 // Spec has approximately the following:
8049 //var s = strict(this);
8050 //if (Type(s) === 'symbol') return s;
8051 //if (Type(s) !== 'object') throw TypeError();
8052 //if (!('[[SymbolData]]' in s)) throw TypeError();
8053 //return s['[[SymbolData]]'];
8054 },
8055 configurable: true, writeable: true, enumerable: false });
8056
8057 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8058 // (Done later to polyfill partial implementations)
8059
8060 // 19.4.4 Properties of Symbol Instances
8061 }());
8062
8063 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
8064
8065 // Defined here so that other prototypes can reference it
8066 // 25.1.2 The %IteratorPrototype% Object
8067 var $IteratorPrototype$ = {};
8068
8069 //----------------------------------------
8070 // 6 ECMAScript Data Types and Values
8071 //----------------------------------------
8072
8073 // 6.1 ECMAScript Language Types
8074
8075 // "Type(x)" is used as shorthand for "the type of x"...
8076 function Type(v) {
8077 switch (typeof v) {
8078 case 'undefined': return 'undefined';
8079 case 'boolean': return 'boolean';
8080 case 'number': return 'number';
8081 case 'string': return 'string';
8082 case 'symbol': return 'symbol';
8083 default:
8084 if (v === null) return 'null';
8085 if (v instanceof global.Symbol) return 'symbol';
8086 return 'object';
8087 }
8088 }
8089
8090 // 6.1.5.1 Well-Known Symbols
8091 var $$iterator = global.Symbol.iterator,
8092 $$match = global.Symbol.match,
8093 $$replace = global.Symbol.replace,
8094 $$search = global.Symbol.search,
8095 $$split = global.Symbol.split,
8096 $$toStringTag = global.Symbol.toStringTag;
8097
8098 //----------------------------------------
8099 // 7 Abstract Operations
8100 //----------------------------------------
8101
8102 //----------------------------------------
8103 // 7.1 Type Conversion
8104 //----------------------------------------
8105
8106 // 7.1.1 ToPrimitive ( input [, PreferredType] )
8107 // just use valueOf()
8108
8109 // 7.1.2 ToBoolean ( argument )
8110 // just use Boolean()
8111
8112 // 7.1.3 ToNumber ( argument )
8113 // just use Number()
8114
8115 // 7.1.4 ToInteger ( argument )
8116 function ToInteger(n) {
8117 n = Number(n);
8118 if ($isNaN(n)) return 0;
8119 if (n === 0 || n === Infinity || n === -Infinity) return n;
8120 return ((n < 0) ? -1 : 1) * floor(abs(n));
8121 }
8122
8123 // 7.1.5 ToInt32 ( argument )
8124 function ToInt32(v) { return v >> 0; }
8125
8126 // 7.1.6 ToUint32 ( argument )
8127 function ToUint32(v) { return v >>> 0; }
8128
8129 // 7.1.7 ToInt16 ( argument )
8130 function ToInt16(v) { return (v << 16) >> 16; }
8131
8132 // 7.1.8 ToUint16 ( argument )
8133 function ToUint16(v) { return v & 0xFFFF; }
8134
8135 // 7.1.9 ToInt8 ( argument )
8136 function ToInt8(v) { return (v << 24) >> 24; }
8137
8138 // 7.1.10 ToUint8 ( argument )
8139 function ToUint8(v) { return v & 0xFF; }
8140
8141 // 7.1.11 ToUint8Clamp ( argument )
8142 function ToUint8Clamp(argument) {
8143 var number = Number(argument);
8144 if ($isNaN(number)) return 0;
8145 if (number <= 0) return 0;
8146 if (number >= 255) return 255;
8147 var f = floor(number);
8148 if ((f + 0.5) < number) return f + 1;
8149 if (number < (f + 0.5)) return f;
8150 if (f % 2) return f + 1;
8151 return f;
8152 }
8153
8154 // 7.1.12 ToString ( argument )
8155 // just use String()
8156
8157 // 7.1.13 ToObject ( argument )
8158 function ToObject(v) {
8159 if (v === null || v === undefined) throw TypeError();
8160 return Object(v);
8161 }
8162
8163 // 7.1.14 ToPropertyKey ( argument )
8164 function ToPropertyKey(v) {
8165 return String(v);
8166 }
8167
8168 // 7.1.15 ToLength ( argument )
8169 function ToLength(v) {
8170 var len = ToInteger(v);
8171 if (len <= 0) return 0;
8172 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
8173 return min(len, 0x20000000000000 - 1); // 2^53-1
8174 }
8175
8176 // 7.1.16 CanonicalNumericIndexString ( argument )
8177
8178 //----------------------------------------
8179 // 7.2 Testing and Comparison Operations
8180 //----------------------------------------
8181
8182 // 7.2.1 RequireObjectCoercible ( argument )
8183 // 7.2.2 IsArray ( argument )
8184
8185 // 7.2.3 IsCallable ( argument )
8186 function IsCallable(o) { return typeof o === 'function'; }
8187
8188 // 7.2.4 IsConstructor ( argument )
8189 function IsConstructor(o) {
8190 // Hacks for Safari 7 TypedArray XXXConstructor objects
8191 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
8192 if (/Function/.test(Object.prototype.toString.call(o))) return true;
8193 // TODO: Can this be improved on?
8194 return typeof o === 'function';
8195 }
8196
8197 // 7.2.5 IsExtensible (O)
8198 // 7.2.6 IsInteger ( argument )
8199
8200 // 7.2.7 IsPropertyKey ( argument )
8201 function IsPropertyKey(argument) {
8202 if (Type(argument) === 'string') return true;
8203 if (Type(argument) === 'symbol') return true;
8204 return false;
8205 }
8206
8207 // 7.2.8 IsRegExp ( argument )
8208 // 7.2.5 IsConstructor ( argument )
8209
8210 // 7.2.9 SameValue(x, y)
8211 function SameValue(x, y) {
8212 if (typeof x !== typeof y) return false;
8213 switch (typeof x) {
8214 case 'undefined':
8215 return true;
8216 case 'number':
8217 if (x !== x && y !== y) return true;
8218 if (x === 0 && y === 0) return 1/x === 1/y;
8219 return x === y;
8220 case 'boolean':
8221 case 'string':
8222 case 'object':
8223 default:
8224 return x === y;
8225 }
8226 }
8227
8228 // 7.2.10 SameValueZero(x, y)
8229 function SameValueZero(x, y) {
8230 if (typeof x !== typeof y) return false;
8231 switch (typeof x) {
8232 case 'undefined':
8233 return true;
8234 case 'number':
8235 if (x !== x && y !== y) return true;
8236 return x === y;
8237 case 'boolean':
8238 case 'string':
8239 case 'object':
8240 default:
8241 return x === y;
8242 }
8243 }
8244
8245 //----------------------------------------
8246 // 7.3 Operations on Objects
8247 //----------------------------------------
8248
8249 // 7.3.1 Get (O, P)
8250 // - just use o.p or o[p]
8251
8252 // 7.3.2 GetV (V, P)
8253 function GetV(v, p) {
8254 var o = ToObject(v);
8255 return o[p];
8256 }
8257
8258 // 7.3.3 Set (O, P, V, Throw)
8259 // - just use o.p = v or o[p] = v
8260
8261
8262
8263
8264 // 7.3.9 GetMethod (O, P)
8265 function GetMethod(o, p) {
8266 var func = GetV(o, p);
8267 if (func === undefined || func === null) return undefined;
8268 if (!IsCallable(func)) throw TypeError();
8269 return func;
8270 }
8271
8272 // 7.3.10 HasProperty (O, P)
8273 function HasProperty(o, p) {
8274 while (o) {
8275 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
8276 if (Type(o) !== 'object') return false;
8277 o = Object.getPrototypeOf(o);
8278 }
8279 return false;
8280 }
8281
8282 // 7.3.11 HasOwnProperty (O, P)
8283 function HasOwnProperty(o, p) {
8284 return Object.prototype.hasOwnProperty.call(o, p);
8285 }
8286
8287 //----------------------------------------
8288 // 7.4 Operations on Iterator Objects
8289 //----------------------------------------
8290
8291 // 7.4.1 GetIterator ( obj, method )
8292 function GetIterator(obj, method) {
8293 if (arguments.length < 2)
8294 method = GetMethod(obj, $$iterator);
8295 var iterator = method.call(obj);
8296 if (Type(iterator) !== 'object') throw TypeError();
8297 return iterator;
8298 }
8299
8300 // 7.4.2 IteratorNext ( iterator, value )
8301 function IteratorNext(iterator, value) {
8302 if (arguments.length < 2)
8303 var result = iterator.next();
8304 else
8305 result = iterator.next(value);
8306 if (Type(result) !== 'object') throw TypeError();
8307 return result;
8308 }
8309
8310 // 7.4.3 IteratorComplete ( iterResult )
8311 function IteratorComplete(iterResult) {
8312 console.assert(Type(iterResult) === 'object');
8313 return Boolean(iterResult.done);
8314 }
8315
8316 // 7.4.4 IteratorValue ( iterResult )
8317 function IteratorValue(iterResult) {
8318 console.assert(Type(iterResult) === 'object');
8319 return iterResult.value;
8320 }
8321
8322 // 7.4.5 IteratorStep ( iterator )
8323 function IteratorStep( iterator, value ) {
8324 var result = IteratorNext(iterator, value);
8325 var done = result['done'];
8326 if (Boolean(done) === true) return false;
8327 return result;
8328 }
8329
8330 // 7.4.6 IteratorClose( iterator, completion )
8331 function IteratorClose( iterator, completion ) {
8332 console.assert(Type(iterator) === 'object');
8333 var _return = GetMethod(iterator, 'return');
8334 if (_return === undefined) return completion;
8335 try {
8336 var innerResult = _return[iterator]();
8337 } catch (result) {
8338 // TODO: If completion.[[type]] is throw, return completion
8339 return result;
8340 }
8341 if (Type(innerResult) !== 'object') throw TypeError();
8342 return completion;
8343 }
8344
8345 // 7.4.7 CreateIterResultObject (value, done)
8346 function CreateIterResultObject(value, done) {
8347 console.assert(Type(done) === 'boolean');
8348 var obj = {};
8349 obj["value"] = value;
8350 obj["done"] = done;
8351 return obj;
8352 }
8353
8354 // 7.4.8 CreateListIterator (list)
8355 // 7.4.8.1 ListIterator next( )
8356 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
8357 // 7.4.9.1 CompoundIterator next( )
8358
8359 //----------------------------------------
8360 // 8 Executable Code and Execution Contexts
8361 //----------------------------------------
8362
8363 //----------------------------------------
8364 // 8.4 Jobs and Job Queues
8365 //----------------------------------------
8366
8367 // 8.4.1 EnqueueJob ( queueName, job, arguments)
8368 function EnqueueJob(queueName, job, args) {
8369 var fn = function() { job.apply(undefined, args); };
8370 enqueue(fn);
8371 }
8372
8373 // 8.4.2 NextJob result
8374 function NextJob(result) {
8375 // no-op
8376 }
8377
8378 //----------------------------------------
8379 // 9 Ordinary and Exotic Objects Behaviors
8380 //----------------------------------------
8381
8382 // 9.1.11 [[Enumerate]] ()
8383 function Enumerate(obj) {
8384 var e = [];
8385 if (Object(obj) !== obj) return e;
8386 var visited = new Set;
8387 while (obj !== null) {
8388 Object.getOwnPropertyNames(obj).forEach(function(name) {
8389 if (!visited.has(name)) {
8390 var desc = Object.getOwnPropertyDescriptor(obj, name);
8391 if (desc) {
8392 visited.add(name);
8393 if (desc.enumerable) e.push(name);
8394 }
8395 }
8396 });
8397 obj = Object.getPrototypeOf(obj);
8398 }
8399 return e[$$iterator]();
8400 }
8401
8402 // 9.1.12 [[OwnPropertyKeys]] ( )
8403 function OwnPropertyKeys(o) {
8404 return Object.getOwnPropertyNames(o);
8405 }
8406
8407 // 9.1.13 ObjectCreate(proto, internalSlotsList)
8408 function ObjectCreate(proto, internalSlotsList) {
8409 return Object.create(proto, internalSlotsList);
8410 }
8411
8412 // ---------------------------------------
8413 // 19 Fundamental Objects
8414 // ---------------------------------------
8415
8416 // ---------------------------------------
8417 // 19.1 Object Objects
8418 // ---------------------------------------
8419
8420 // 19.1.1 The Object Constructor
8421 // 19.1.1.1 Object ( [ value ] )
8422 // 19.1.2 Properties of the Object Constructor
8423 // 19.1.2.1 Object.assign ( target, ...sources )
8424 define(
8425 Object, 'assign',
8426 function assign(target, /*...*/sources) {
8427 var to = ToObject(target);
8428 if (arguments.length < 2) return to;
8429
8430 var sourcesIndex = 1;
8431 while (sourcesIndex < arguments.length) {
8432 var nextSource = arguments[sourcesIndex++];
8433 if (nextSource === undefined || nextSource === null) {
8434 var keys = [];
8435 } else {
8436 var from = ToObject(nextSource);
8437 keys = OwnPropertyKeys(from);
8438 }
8439 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
8440 var nextKey = keys[keysIndex];
8441 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
8442 if (desc !== undefined && desc.enumerable) {
8443 var propValue = from[nextKey];
8444 to[nextKey] = propValue;
8445 }
8446 }
8447 }
8448 return to;
8449 });
8450
8451 // 19.1.2.2 Object.create ( O [ , Properties ] )
8452 // 19.1.2.3 Object.defineProperties ( O, Properties )
8453 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
8454 // 19.1.2.5 Object.freeze ( O )
8455 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
8456
8457 (function() {
8458 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
8459 $getOwnPropertyNames = Object.getOwnPropertyNames,
8460 $keys = Object.keys,
8461 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
8462
8463 function isStringKey(k) { return !symbolForKey(k); }
8464
8465 // 19.1.2.7 Object.getOwnPropertyNames ( O )
8466 define(
8467 Object, 'getOwnPropertyNames',
8468 function getOwnPropertyNames(o) {
8469 if (Object.prototype.toString.call(o) === '[object Window]') {
8470 // Workaround for cross-realm calling by IE itself.
8471 // https://github.com/inexorabletash/polyfill/issues/96
8472 try {
8473 return $getOwnPropertyNames(o).filter(isStringKey);
8474 } catch (_) {
8475 return $window_names.slice();
8476 }
8477 }
8478 return $getOwnPropertyNames(o).filter(isStringKey);
8479 }, !nativeSymbols);
8480
8481 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
8482 define(
8483 Object, 'getOwnPropertySymbols',
8484 function getOwnPropertySymbols(o) {
8485 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
8486 }, !nativeSymbols);
8487
8488 // 19.1.2.14 Object.keys ( O )
8489 define(
8490 Object, 'keys',
8491 function keys(o) {
8492 return $keys(o).filter(isStringKey);
8493 }, !nativeSymbols);
8494 }());
8495
8496 // 19.1.2.9 Object.getPrototypeOf ( O )
8497 // 19.1.2.10 Object.is ( value1, value2 )
8498 define(
8499 Object, 'is',
8500 function is(value1, value2) {
8501 return SameValue(value1, value2);
8502 });
8503
8504 // 19.1.2.11 Object.isExtensible ( O )
8505 // 19.1.2.12 Object.isFrozen ( O )
8506 // 19.1.2.13 Object.isSealed ( O )
8507
8508 // 19.1.2.14 Object.keys ( O )
8509 // see above
8510
8511 // 19.1.2.15 Object.preventExtensions ( O )
8512 // 19.1.2.16 Object.prototype
8513 // 19.1.2.17 Object.seal ( O )
8514
8515 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
8516 define(
8517 Object, 'setPrototypeOf',
8518 function setPrototypeOf(o, proto) {
8519 if (Type(o) !== 'object') throw TypeError();
8520 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
8521 o.__proto__ = proto;
8522 return o;
8523 }
8524 );
8525
8526 // 19.1.3 Properties of the Object Prototype Object
8527 // 19.1.3.1 Object.prototype.constructor
8528 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
8529 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
8530 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
8531 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8532 // 19.1.3.6 Object.prototype.toString ( )
8533 hook(Object.prototype, 'toString',
8534 function() {
8535 var o = strict(this);
8536 if (o === Object(o) && $$toStringTag in o) {
8537 return '[object ' + o[$$toStringTag] + ']';
8538 }
8539 return undefined;
8540 });
8541
8542 // 19.1.3.7 Object.prototype.valueOf ( )
8543 // 19.1.4 Properties of Object Instances
8544
8545 // ---------------------------------------
8546 // 19.2 Function Objects
8547 // ---------------------------------------
8548
8549 // 19.2.1 The Function Constructor
8550 // 19.2.1.1 Function ( p1, p2, … , pn, body )
8551 // 19.2.2 Properties of the Function Constructor
8552 // 19.2.2.1 Function.length
8553 // 19.2.2.2 Function.prototype
8554 // 19.2.3 Properties of the Function Prototype Object
8555 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
8556 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
8557 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
8558 // 19.2.3.4 Function.prototype.constructor
8559 // 19.2.3.5 Function.prototype.toString ( )
8560 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
8561 // 19.2.4 Function Instances
8562 // 19.2.4.1 length
8563 // 19.2.4.2 name
8564 // 19.2.4.3 prototype
8565
8566 // (No polyfillable changes from ES5)
8567
8568 // ---------------------------------------
8569 // 19.3 Boolean Objects
8570 // ---------------------------------------
8571
8572 // 19.3.1 The Boolean Constructor
8573 // 19.3.1.1 Boolean ( value )
8574 // 19.3.2 Properties of the Boolean Constructor
8575 // 19.3.2.1 Boolean.prototype
8576 // 19.3.3 Properties of the Boolean Prototype Object
8577 // 19.3.3.1 Boolean.prototype.constructor
8578 // 19.3.3.2 Boolean.prototype.toString ( )
8579 // 19.3.3.3 Boolean.prototype.valueOf ( )
8580 // 19.3.4 Properties of Boolean Instances
8581
8582 // (No polyfillable changes from ES5)
8583
8584 // ---------------------------------------
8585 // 19.4 Symbol Objects
8586 // ---------------------------------------
8587
8588 // Moved earlier in this script, so that other polyfills can depend on them.
8589
8590 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8591 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
8592
8593 // ---------------------------------------
8594 // 19.5 Error Objects
8595 // ---------------------------------------
8596
8597 // 19.5.1 The Error Constructor
8598 // 19.5.1.1 Error ( message )
8599 // 19.5.1.2 new Error( ...argumentsList )
8600 // 19.5.2 Properties of the Error Constructor
8601 // 19.5.2.1 Error.prototype
8602 // 19.5.3 Properties of the Error Prototype Object
8603 // 19.5.3.1 Error.prototype.constructor
8604 // 19.5.3.2 Error.prototype.message
8605 // 19.5.3.3 Error.prototype.name
8606 // 19.5.3.4 Error.prototype.toString ( )
8607 // 19.5.4 Properties of Error Instances
8608 // 19.5.5 Native Error Types Used in This Standard
8609 // 19.5.5.1 EvalError
8610 // 19.5.5.2 RangeError
8611 // 19.5.5.3 ReferenceError
8612 // 19.5.5.4 SyntaxError
8613 // 19.5.5.5 TypeError
8614 // 19.5.5.6 URIError
8615 // 19.5.6 NativeError Object Structure
8616 // 19.5.6.1 NativeError Constructors
8617 // 19.5.6.1.1 NativeError ( message )
8618 // 19.5.6.1.2 new NativeError ( ...argumentsList )
8619 // 19.5.6.2 Properties of the NativeError Constructors
8620 // 19.5.6.2.1 NativeError.prototype
8621 // 19.5.6.3 Properties of the NativeError Prototype Objects
8622 // 19.5.6.4 Properties of NativeError Instances
8623
8624 // (No polyfillable changes from ES5)
8625
8626 // ---------------------------------------
8627 // 20 Numbers and Dates
8628 // ---------------------------------------
8629
8630 // ---------------------------------------
8631 // 20.1 Number Objects
8632 // ---------------------------------------
8633
8634 // 20.1.1 The Number Constructor
8635 // 20.1.1.1 Number ( [ value ] )
8636 // 20.1.1.2 new Number ( ...argumentsList )
8637 // 20.1.2 Properties of the Number Constructor
8638
8639 // 20.1.2.1 Number.EPSILON
8640 define(
8641 Number, 'EPSILON',
8642 (function () {
8643 var next, result;
8644 for (next = 1; 1 + next !== 1; next = next / 2)
8645 result = next;
8646 return result;
8647 }()));
8648
8649 // 20.1.2.2 Number.isFinite ( number )
8650 define(
8651 Number, 'isFinite',
8652 function isFinite(number) {
8653 if (Type(number) !== 'number') return false;
8654 if (number !== number || number === +Infinity || number === -Infinity) return false;
8655 return true;
8656 });
8657
8658 // 20.1.2.3 Number.isInteger ( number )
8659 define(
8660 Number, 'isInteger',
8661 function isInteger(number) {
8662 if (Type(number) !== 'number') return false;
8663 if (number !== number || number === +Infinity || number === -Infinity) return false;
8664 var integer = ToInteger(number);
8665 if (integer !== number) return false;
8666 return true;
8667 });
8668
8669 // 20.1.2.4 Number.isNaN ( number )
8670 define(
8671 Number, 'isNaN',
8672 function isNaN(number) {
8673 if (Type(number) !== 'number') return false;
8674 if (number !== number) return true;
8675 return false;
8676 });
8677
8678 // 20.1.2.5 Number.isSafeInteger ( number )
8679 define(
8680 Number, 'isSafeInteger',
8681 function isSafeInteger(number) {
8682 if (Type(number) !== 'number') return false;
8683 if (number !== number || number === +Infinity || number === -Infinity) return false;
8684 var integer = ToInteger(number);
8685 if (integer !== number) return false;
8686 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
8687 return true;
8688 return false;
8689 });
8690
8691 // 20.1.2.6 Number.MAX_SAFE_INTEGER
8692 define(
8693 Number, 'MAX_SAFE_INTEGER',
8694 9007199254740991); // 2^53-1
8695
8696 // 20.1.2.7 Number.MAX_VALUE
8697
8698 // 20.1.2.8 Number.MIN_SAFE_INTEGER
8699 define(
8700 Number, 'MIN_SAFE_INTEGER',
8701 -9007199254740991); // -2^53+1
8702
8703 // 20.1.2.9 Number.MIN_VALUE
8704 // 20.1.2.10 Number.NaN
8705 // 20.1.2.11 Number.NEGATIVE_INFINITY
8706
8707 // 20.1.2.12 Number.parseFloat ( string )
8708 define(Number, 'parseFloat', $parseFloat);
8709
8710 // 20.1.2.13 Number.parseInt ( string, radix )
8711 define(Number, 'parseInt', $parseInt);
8712
8713 // 20.1.2.14 Number.POSITIVE_INFINITY
8714 // 20.1.2.15 Number.prototype
8715
8716 // 20.1.3 Properties of the Number Prototype Object
8717 // 20.1.3.1 Number.prototype.constructor
8718 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
8719 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
8720 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
8721 // 20.1.3.5 Number.prototype.toPrecision ( precision )
8722 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
8723 // 20.1.3.7 Number.prototype.valueOf ( )
8724 // 20.1.4 Properties of Number Instances
8725
8726 // ---------------------------------------
8727 // 20.2 The Math Object
8728 // ---------------------------------------
8729
8730 // 20.2.1 Value Properties of the Math Object
8731 // 20.2.1.1 Math.E
8732 // 20.2.1.2 Math.LN10
8733 // 20.2.1.3 Math.LN2
8734 // 20.2.1.4 Math.LOG10E
8735 // 20.2.1.5 Math.LOG2E
8736 // 20.2.1.6 Math.PI
8737 // 20.2.1.7 Math.SQRT1_2
8738 // 20.2.1.8 Math.SQRT2
8739
8740 // 20.2.1.9 Math [ @@toStringTag ]
8741 define(Math, $$toStringTag, 'Math');
8742
8743 // 20.2.2 Function Properties of the Math Object
8744 // 20.2.2.1 Math.abs ( x )
8745 // 20.2.2.2 Math.acos ( x )
8746
8747 // 20.2.2.3 Math.acosh(x)
8748 define(
8749 Math, 'acosh',
8750 function acosh(x) {
8751 x = Number(x);
8752 return log(x + sqrt(x * x - 1));
8753 });
8754
8755 // 20.2.2.4 Math.asin ( x )
8756
8757 // 20.2.2.5 Math.asinh( x )
8758 define(
8759 Math, 'asinh',
8760 function asinh(x) {
8761 x = Number(x);
8762 if (SameValue(x, -0)) {
8763 return x;
8764 }
8765 var s = sqrt(x * x + 1);
8766 return (s === -x) ? log(0) : log(x + s);
8767 });
8768
8769 // 20.2.2.6 Math.atan ( x )
8770
8771 // 20.2.2.7 Math.atanh( x )
8772 define(
8773 Math, 'atanh',
8774 function atanh(x) {
8775 x = Number(x);
8776 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
8777 });
8778
8779 // 20.2.2.8 Math.atan2 ( y, x )
8780
8781 // 20.2.2.9 Math.cbrt ( x )
8782 define(
8783 Math, 'cbrt',
8784 function cbrt(x) {
8785 x = Number(x);
8786 if ($isNaN(x/x)) {
8787 return x;
8788 }
8789 var r = pow(abs(x), 1/3);
8790 var t = x/r/r;
8791 return r + (r * (t-r) / (2*r + t));
8792 });
8793
8794 // 20.2.2.10 Math.ceil ( x )
8795
8796 // 20.2.2.11 Math.clz32 ( x )
8797 define(
8798 Math, 'clz32',
8799 function clz32(x) {
8800 function clz8(x) {
8801 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
8802 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
8803 }
8804 x = ToUint32(x);
8805 return x & 0xff000000 ? clz8(x >> 24) :
8806 x & 0xff0000 ? clz8(x >> 16) + 8 :
8807 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
8808 });
8809
8810
8811
8812 // 20.2.2.12 Math.cos ( x )
8813
8814 // 20.2.2.13 Math.cosh ( x )
8815 define(
8816 Math, 'cosh',
8817 function cosh(x) {
8818 x = Number(x);
8819 return (pow(E, x) + pow(E, -x)) / 2;
8820 });
8821
8822 // 20.2.2.14 Math.exp ( x )
8823
8824 // 20.2.2.15 Math.expm1 ( x )
8825 define(
8826 Math, 'expm1',
8827 function expm1(x) {
8828 x = Number(x);
8829 // from: http://www.johndcook.com/cpp_log1p.html
8830 if (SameValue(x, -0)) {
8831 return -0;
8832 } else if (abs(x) < 1e-5) {
8833 return x + 0.5 * x * x; // two terms of Taylor expansion
8834 } else {
8835 return exp(x) - 1;
8836 }
8837 });
8838
8839 // 20.2.2.16 Math.floor ( x )
8840
8841 // 20.2.2.17 Math.fround ( x )
8842 define(
8843 Math, 'fround',
8844 function fround(x) {
8845 if ($isNaN(x)) {
8846 return NaN;
8847 }
8848 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
8849 return x;
8850 }
8851 return (new Float32Array([x]))[0];
8852 });
8853
8854 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
8855 define(
8856 Math, 'hypot',
8857 function hypot() {
8858 var values = [];
8859 var m = 0, sawNaN = false;
8860 for (var i = 0; i < arguments.length; ++i) {
8861 var n = abs(Number(arguments[i]));
8862 if (n === Infinity) return n;
8863 if (n !== n) sawNaN = true;
8864 if (n > m) m = n;
8865 values[i] = n;
8866 }
8867 if (sawNaN) return NaN;
8868 if (m === 0) return +0;
8869 var sum = +0;
8870 for (i = 0; i < values.length; ++i) {
8871 var r = values[i] / m;
8872 sum = sum + r * r;
8873 }
8874 return m * sqrt(sum);
8875 });
8876
8877 // 20.2.2.19 Math.imul ( x, y )
8878 define(
8879 Math, 'imul',
8880 function imul(x, y) {
8881 var a = ToUint32(x);
8882 var b = ToUint32(y);
8883 // (slow but accurate)
8884 var ah = (a >>> 16) & 0xffff;
8885 var al = a & 0xffff;
8886 var bh = (b >>> 16) & 0xffff;
8887 var bl = b & 0xffff;
8888 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
8889 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
8890 );
8891
8892 // 20.2.2.20 Math.log ( x )
8893
8894 // 20.2.2.21 Math.log1p ( x )
8895 define(
8896 Math, 'log1p',
8897 function log1p(x) {
8898 x = Number(x);
8899 // from: http://www.johndcook.com/cpp_expm1.html
8900 if (x < -1) {
8901 return NaN;
8902 } else if (SameValue(x, -0)) {
8903 return -0;
8904 } else if (abs(x) > 1e-4) {
8905 return log(1 + x);
8906 } else {
8907 return (-0.5 * x + 1) * x;
8908 }
8909 });
8910
8911 // 20.2.2.22 Math.log10 ( x )
8912 define(
8913 Math, 'log10',
8914 function log10(x) {
8915 x = Number(x);
8916 return log(x) * LOG10E;
8917 });
8918
8919 // 20.2.2.23 Math.log2 ( x )
8920 define(
8921 Math, 'log2',
8922 function log2(x) {
8923 x = Number(x);
8924 return log(x) * LOG2E;
8925 });
8926
8927 // 20.2.2.24 Math.max ( value1, value2 , ...values )
8928 // 20.2.2.25 Math.min ( value1, value2 , ...values )
8929 // 20.2.2.26 Math.pow ( x, y )
8930 // 20.2.2.27 Math.random ( )
8931 // 20.2.2.28 Math.round ( x )
8932
8933 // 20.2.2.29 Math.sign(x)
8934 define(
8935 Math, 'sign',
8936 function sign(x) {
8937 x = Number(x);
8938 return x < 0 ? -1 : x > 0 ? 1 : x;
8939 });
8940
8941 // 20.2.2.30 Math.sin ( x )
8942
8943 // 20.2.2.31 Math.sinh( x )
8944 define(
8945 Math, 'sinh',
8946 function sinh(x) {
8947 x = Number(x);
8948 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
8949 });
8950
8951 // 20.2.2.32 Math.sqrt ( x )
8952 // 20.2.2.33 Math.tan ( x )
8953
8954 // 20.2.2.34 Math.tanh ( x )
8955 define(
8956 Math, 'tanh',
8957 function tanh(x) {
8958 x = Number(x);
8959 var n = pow(E, 2 * x) - 1,
8960 d = pow(E, 2 * x) + 1;
8961 if (SameValue(x, -0))
8962 return x;
8963 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
8964 });
8965
8966 // 20.2.2.35 Math.trunc ( x )
8967 define(
8968 Math, 'trunc',
8969 function trunc(x) {
8970 x = Number(x);
8971 return $isNaN(x) ? NaN :
8972 x < 0 ? ceil(x) : floor(x);
8973 });
8974
8975 // ---------------------------------------
8976 // 20.3 Date Objects
8977 // ---------------------------------------
8978
8979 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
8980 // 20.3.1.1 Time Values and Time Range
8981 // 20.3.1.2 Day Number and Time within Day
8982 // 20.3.1.3 Year Number
8983 // 20.3.1.4 Month Number
8984 // 20.3.1.5 Date Number
8985 // 20.3.1.6 Week Day
8986 // 20.3.1.7 Local Time Zone Adjustment
8987 // 20.3.1.8 Daylight Saving Time Adjustment
8988 // 20.3.1.9 Local Time
8989 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
8990 // 20.3.1.11 MakeTime (hour, min, sec, ms)
8991 // 20.3.1.12 MakeDay (year, month, date)
8992 // 20.3.1.13 MakeDate (day, time)
8993 // 20.3.1.14 TimeClip (time)
8994 // 20.3.1.15 Date Time String Format
8995 // 20.3.1.15.1 Extended years
8996 // 20.3.2 The Date Constructor
8997 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8998 // 20.3.2.2 Date ( value )
8999 // 20.3.2.3 Date ( )
9000 // 20.3.3 Properties of the Date Constructor
9001 // 20.3.3.1 Date.now ( )
9002 // 20.3.3.2 Date.parse (string)
9003 // 20.3.3.3 Date.prototype
9004 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
9005 // 20.3.4 Properties of the Date Prototype Object
9006 // 20.3.4.1 Date.prototype.constructor
9007 // 20.3.4.2 Date.prototype.getDate ( )
9008 // 20.3.4.3 Date.prototype.getDay ( )
9009 // 20.3.4.4 Date.prototype.getFullYear ( )
9010 // 20.3.4.5 Date.prototype.getHours ( )
9011 // 20.3.4.6 Date.prototype.getMilliseconds ( )
9012 // 20.3.4.7 Date.prototype.getMinutes ( )
9013 // 20.3.4.8 Date.prototype.getMonth ( )
9014 // 20.3.4.9 Date.prototype.getSeconds ( )
9015 // 20.3.4.10 Date.prototype.getTime ( )
9016 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
9017 // 20.3.4.12 Date.prototype.getUTCDate ( )
9018 // 20.3.4.13 Date.prototype.getUTCDay ( )
9019 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
9020 // 20.3.4.15 Date.prototype.getUTCHours ( )
9021 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
9022 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
9023 // 20.3.4.18 Date.prototype.getUTCMonth ( )
9024 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
9025 // 20.3.4.20 Date.prototype.setDate ( date )
9026 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
9027 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
9028 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
9029 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
9030 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
9031 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
9032 // 20.3.4.27 Date.prototype.setTime ( time )
9033 // 20.3.4.28 Date.prototype.setUTCDate ( date )
9034 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
9035 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
9036 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
9037 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
9038 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
9039 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
9040 // 20.3.4.35 Date.prototype.toDateString ( )
9041 // 20.3.4.36 Date.prototype.toISOString ( )
9042 // 20.3.4.37 Date.prototype.toJSON ( key )
9043 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
9044 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9045 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
9046 // 20.3.4.41 Date.prototype.toString ( )
9047 // 20.3.4.42 Date.prototype.toTimeString ( )
9048 // 20.3.4.43 Date.prototype.toUTCString ( )
9049 // 20.3.4.44 Date.prototype.valueOf ( )
9050 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
9051 // 20.3.5 Properties of Date Instances
9052
9053 // (No polyfillable changes from ES5)
9054
9055 // ---------------------------------------
9056 // 21 Text Processing
9057 // ---------------------------------------
9058
9059 var string_regexp_dispatch = (function() {
9060 var faux = {}, secret = Symbol();
9061 faux[Symbol.match] = function() { return secret; };
9062 return ("").match(faux) === secret;
9063 }());
9064
9065 // 21.1 String Objects
9066 // 21.1.1 The String Constructor
9067 // 21.1.1.1 String ( value )
9068 // 21.1.2 Properties of the String Constructor
9069 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
9070
9071 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
9072 define(
9073 String, 'fromCodePoint',
9074 function fromCodePoint(/*...codePoints*/) {
9075 var codePoints = arguments,
9076 length = codePoints.length,
9077 elements = [],
9078 nextIndex = 0;
9079 while (nextIndex < length) {
9080 var next = codePoints[nextIndex];
9081 var nextCP = Number(next);
9082 if (!SameValue(nextCP, ToInteger(nextCP)) ||
9083 nextCP < 0 || nextCP > 0x10FFFF) {
9084 throw RangeError('Invalid code point ' + nextCP);
9085 }
9086 if (nextCP < 0x10000) {
9087 elements.push(String.fromCharCode(nextCP));
9088 } else {
9089 nextCP -= 0x10000;
9090 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
9091 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
9092 }
9093 nextIndex += 1;
9094 }
9095 return elements.join('');
9096 });
9097
9098 // 21.1.2.3 String.prototype
9099
9100 // 21.1.2.4 String.raw ( template , ...substitutions )
9101 define(
9102 String, 'raw',
9103 function raw(template /*, ...substitutions*/) {
9104 var substitutions = [].slice.call(arguments, 1);
9105
9106 var cooked = Object(template);
9107 var rawValue = cooked['raw'];
9108 var raw = Object(rawValue);
9109 var len = raw['length'];
9110 var literalSegments = ToLength(len);
9111 if (literalSegments <= 0) return '';
9112 var stringElements = [];
9113 var nextIndex = 0;
9114 while (true) {
9115 var next = raw[nextIndex];
9116 var nextSeg = String(next);
9117 stringElements.push(nextSeg);
9118 if (nextIndex + 1 === literalSegments)
9119 return stringElements.join('');
9120 next = substitutions[nextIndex];
9121 var nextSub = String(next);
9122 stringElements.push(nextSub);
9123 nextIndex = nextIndex + 1;
9124 }
9125 });
9126
9127 // See https://githib.com/inexorabletash/uate for a more useful version.
9128
9129 // 21.1.3 Properties of the String Prototype Object
9130 // 21.1.3.1 String.prototype.charAt ( pos )
9131 // 21.1.3.2 String.prototype.charCodeAt ( pos )
9132
9133 // 21.1.3.3 String.prototype.codePointAt ( pos )
9134 define(
9135 String.prototype, 'codePointAt',
9136 function codePointAt(pos) {
9137 var o = strict(this);
9138 var s = String(o);
9139 var position = ToInteger(pos);
9140 var size = s.length;
9141 if (position < 0 || position >= size) return undefined;
9142 var first = s.charCodeAt(position);
9143 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
9144 var second = s.charCodeAt(position + 1);
9145 if (second < 0xDC00 || second > 0xDFFF) return first;
9146 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
9147 });
9148
9149 // 21.1.3.4 String.prototype.concat ( ...args )
9150 // 21.1.3.5 String.prototype.constructor
9151
9152 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
9153 define(
9154 String.prototype, 'endsWith',
9155 function endsWith(searchString) {
9156 var endPosition = arguments[1];
9157
9158 var o = strict(this);
9159 var s = String(o);
9160 var searchStr = String(searchString);
9161 var len = s.length;
9162 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
9163 var end = min(max(pos, 0), len);
9164 var searchLength = searchStr.length;
9165 var start = end - searchLength;
9166 if (start < 0) return false;
9167 if (s.substring(start, start + searchLength) === searchStr) return true;
9168 return false;
9169 });
9170
9171 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
9172 define(
9173 String.prototype, 'includes',
9174 function includes(searchString) {
9175 var position = arguments[1];
9176
9177 var o = strict(this);
9178 var s = String(o);
9179 var searchStr = String(searchString);
9180 var pos = ToInteger(position);
9181 var len = s.length;
9182 var start = min(max(pos, 0), len);
9183 return s.indexOf(searchStr, start) !== -1;
9184 });
9185
9186 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
9187 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
9188 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
9189 // 21.1.3.11 String.prototype.match ( regexp )
9190 define(
9191 String.prototype, 'match',
9192 function match(regexp) {
9193 var o = strict(this);
9194 var s = String(o);
9195 if (HasProperty(regexp, $$match)) var rx = regexp;
9196 else rx = new RegExp(regexp);
9197 return rx[$$match](s);
9198 }, !string_regexp_dispatch);
9199
9200 // 21.1.3.12 String.prototype.normalize ( [ form ] )
9201
9202 // Not practical due to table sizes; if needed, pull in:
9203 // https://github.com/walling/unorm/
9204
9205 // 21.1.3.13 String.prototype.repeat ( count )
9206 define(
9207 String.prototype, 'repeat',
9208 function repeat(count) {
9209 var o = strict(this);
9210 var s = String(o);
9211 var n = ToInteger(count);
9212 if (n < 0) throw RangeError();
9213 if (n === Infinity) throw RangeError();
9214 var t = new Array(n + 1).join(s);
9215 return t;
9216 });
9217
9218 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
9219 define(
9220 String.prototype, 'replace',
9221 function replace(searchValue, replaceValue) {
9222 var o = strict(this);
9223 if (HasProperty(searchValue, $$replace))
9224 return searchValue[$$replace](o, replaceValue);
9225 return orig_replace.call(o, searchValue, replaceValue);
9226 }, !string_regexp_dispatch);
9227
9228 // 21.1.3.15 String.prototype.search ( regexp )
9229 define(
9230 String.prototype, 'search',
9231 function search(regexp) {
9232 var o = strict(this);
9233 var string = String(o);
9234 if (HasProperty(regexp, $$search)) var rx = regexp;
9235 else rx = new RegExp(regexp);
9236 return rx[$$search](string);
9237 }, !string_regexp_dispatch);
9238
9239 // 21.1.3.16 String.prototype.slice ( start, end )
9240 // 21.1.3.17 String.prototype.split ( separator, limit )
9241 define(
9242 String.prototype, 'split',
9243 function split(separator, limit) {
9244 var o = strict(this);
9245 if (HasProperty(separator, $$split))
9246 return separator[$$split](o, limit);
9247 return orig_split.call(o, separator, limit);
9248 }, !string_regexp_dispatch);
9249
9250 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
9251 define(
9252 String.prototype, 'startsWith',
9253 function startsWith(searchString) {
9254 var position = arguments[1];
9255
9256 var o = strict(this);
9257 var s = String(o);
9258 var searchStr = String(searchString);
9259 var pos = ToInteger(position);
9260 var len = s.length;
9261 var start = min(max(pos, 0), len);
9262 var searchLength = searchStr.length;
9263 if (searchLength + start > len) return false;
9264 if (s.substring(start, start + searchLength) === searchStr) return true;
9265 return false;
9266 });
9267
9268 // 21.1.3.19 String.prototype.substring ( start, end )
9269 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
9270 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
9271 // 21.1.3.22 String.prototype.toLowerCase ( )
9272 // 21.1.3.23 String.prototype.toString ( )
9273 // 21.1.3.24 String.prototype.toUpperCase ( )
9274 // 21.1.3.25 String.prototype.trim ( )
9275 // 21.1.3.26 String.prototype.valueOf ( )
9276
9277 // 21.1.3.27 String.prototype [ @@iterator ]( )
9278 define(
9279 String.prototype, $$iterator,
9280 function entries() {
9281 return CreateStringIterator(this, 'value');
9282 });
9283
9284 // 21.1.4 Properties of String Instances
9285 // 21.1.4.1 length
9286
9287 // 21.1.5 String Iterator Objects
9288 /** @constructor */
9289 function StringIterator() {}
9290
9291 // 21.1.5.1 CreateStringIterator Abstract Operation
9292 function CreateStringIterator(string, kind) {
9293 var s = String(string);
9294 var iterator = new StringIterator;
9295 set_internal(iterator, '[[IteratedString]]', s);
9296 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
9297 set_internal(iterator, '[[StringIterationKind]]', kind);
9298 return iterator;
9299 }
9300
9301 // 21.1.5.2 The %StringIteratorPrototype% Object
9302 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
9303 StringIterator.prototype = $StringIteratorPrototype$;
9304
9305 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
9306 define(
9307 $StringIteratorPrototype$, 'next',
9308 function next() {
9309 var o = ToObject(this);
9310 var s = String(o['[[IteratedString]]']),
9311 index = o['[[StringIteratorNextIndex]]'],
9312 len = s.length;
9313 if (index >= len) {
9314 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
9315 return CreateIterResultObject(undefined, true);
9316 }
9317 var cp = s.codePointAt(index);
9318 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
9319 return CreateIterResultObject(String.fromCodePoint(cp), false);
9320 });
9321
9322 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
9323 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
9324
9325 // 21.1.5.3 Properties of String Iterator Instances
9326
9327 // ---------------------------------------
9328 // 21.2 RegExp (Regular Expression) Objects
9329 // ---------------------------------------
9330
9331 // 21.2.1 Patterns
9332 // 21.2.2 Pattern Semantics
9333 // 21.2.2.1 Notation
9334 // 21.2.2.2 Pattern
9335 // 21.2.2.3 Disjunction
9336 // 21.2.2.4 Alternative
9337 // 21.2.2.5 Term
9338 // 21.2.2.6 Assertion
9339 // 21.2.2.7 Quantifier
9340 // 21.2.2.8 Atom
9341 // 21.2.2.9 AtomEscape
9342 // 21.2.2.10 CharacterEscape
9343 // 21.2.2.11 DecimalEscape
9344 // 21.2.2.12 CharacterClassEscape
9345 // 21.2.2.13 CharacterClass
9346 // 21.2.2.14 ClassRanges
9347 // 21.2.2.15 NonemptyClassRanges
9348 // 21.2.2.16 NonemptyClassRangesNoDash
9349 // 21.2.2.17 ClassAtom
9350 // 21.2.2.18 ClassAtomNoDash
9351 // 21.2.2.19 ClassEscape
9352 // 21.2.3 The RegExp Constructor
9353 // 21.2.3.1 RegExp ( pattern, flags )
9354 // 21.2.3.2 new RegExp( ...argumentsList )
9355 // 21.2.3.3 Abstract Operations for the RegExp Constructor
9356 // 21.2.4 Properties of the RegExp Constructor
9357 // 21.2.4.1 RegExp.prototype
9358 // 21.2.5 Properties of the RegExp Prototype Object
9359 // 21.2.5.1 RegExp.prototype.constructor
9360 // 21.2.5.2 RegExp.prototype.exec ( string )
9361
9362 // 21.2.5.3 get RegExp.prototype.flags
9363 if (!('flags' in RegExp.prototype)) {
9364 Object.defineProperty(
9365 RegExp.prototype, 'flags', {
9366 get: function() {
9367 var s = String(this);
9368 return s.substring(s.lastIndexOf('/') + 1);
9369 }
9370 });
9371 }
9372
9373 // 21.2.5.4 get RegExp.prototype.global
9374 // 21.2.5.5 get RegExp.prototype.ignoreCase
9375
9376 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
9377 define(RegExp.prototype, $$match, function(string) {
9378 var o = strict(this);
9379 return orig_match.call(string, o);
9380 });
9381
9382 // 21.2.5.7 get RegExp.prototype.multiline
9383
9384 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
9385 define(RegExp.prototype, $$replace, function(string, replaceValue) {
9386 var o = strict(this);
9387 return orig_replace.call(string, o, replaceValue);
9388 });
9389
9390 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
9391 define(RegExp.prototype, $$search, function(string) {
9392 var o = strict(this);
9393 return orig_search.call(string, o);
9394 });
9395
9396 // 21.2.5.10 get RegExp.prototype.source
9397
9398 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
9399 define(RegExp.prototype, $$split, function(string, limit) {
9400 var o = strict(this);
9401 return orig_split.call(string, o, limit);
9402 });
9403
9404 // 21.2.5.12 get RegExp.prototype.sticky
9405 // 21.2.5.13 RegExp.prototype.test( S )
9406 // 21.2.5.14 RegExp.prototype.toString ( )
9407 // 21.2.5.15 get RegExp.prototype.unicode
9408
9409 // 21.2.6 Properties of RegExp Instances
9410 // 21.2.6.1 lastIndex
9411
9412 // (No polyfillable changes from ES5)
9413
9414 // ---------------------------------------
9415 // 22 Indexed Collections
9416 // ---------------------------------------
9417
9418 // ---------------------------------------
9419 // 22.1 Array Objects
9420 // ---------------------------------------
9421
9422 // 22.1.1 The Array Constructor
9423 // 22.1.1.1 Array ( )
9424 // 22.1.1.2 Array (len)
9425 // 22.1.1.3 Array (...items )
9426
9427 // 22.1.2 Properties of the Array Constructor
9428
9429 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
9430 define(
9431 Array, 'from',
9432 function from(items) {
9433 var mapfn = arguments[1];
9434 var thisArg = arguments[2];
9435
9436 var c = strict(this);
9437 if (mapfn === undefined) {
9438 var mapping = false;
9439 } else {
9440 if (!IsCallable(mapfn)) throw TypeError();
9441 var t = thisArg;
9442 mapping = true;
9443 }
9444 var usingIterator = GetMethod(items, $$iterator);
9445 if (usingIterator !== undefined) {
9446 if (IsConstructor(c)) {
9447 var a = new c();
9448 } else {
9449 a = new Array(0);
9450 }
9451 var iterator = GetIterator(items, usingIterator);
9452 var k = 0;
9453 while (true) {
9454 var next = IteratorStep(iterator);
9455 if (next === false) {
9456 a.length = k;
9457 return a;
9458 }
9459 var nextValue = IteratorValue(next);
9460 if (mapping)
9461 var mappedValue = mapfn.call(t, nextValue);
9462 else
9463 mappedValue = nextValue;
9464 a[k] = mappedValue;
9465 k += 1;
9466 }
9467 }
9468 var arrayLike = ToObject(items);
9469 var lenValue = arrayLike.length;
9470 var len = ToLength(lenValue);
9471 if (IsConstructor(c)) {
9472 a = new c(len);
9473 } else {
9474 a = new Array(len);
9475 }
9476 k = 0;
9477 while (k < len) {
9478 var kValue = arrayLike[k];
9479 if (mapping)
9480 mappedValue = mapfn.call(t, kValue, k);
9481 else
9482 mappedValue = kValue;
9483 a[k] = mappedValue;
9484 k += 1;
9485 }
9486 a.length = len;
9487 return a;
9488 });
9489
9490 // 22.1.2.2 Array.isArray ( arg )
9491
9492 // 22.1.2.3 Array.of ( ...items )
9493 define(
9494 Array, 'of',
9495 function of() {
9496 var items = arguments;
9497
9498 var lenValue = items.length;
9499 var len = ToUint32(lenValue);
9500 var c = strict(this), a;
9501 if (IsConstructor(c)) {
9502 a = new c(len);
9503 a = ToObject(a);
9504 } else {
9505 a = new Array(len);
9506 }
9507 var k = 0;
9508 while (k < len) {
9509 a[k] = items[k];
9510 k += 1;
9511 }
9512 a.length = len;
9513 return a;
9514 });
9515
9516 // 22.1.2.4 Array.prototype
9517 // 22.1.2.5 get Array [ @@species ]
9518 // 22.1.3 Properties of the Array Prototype Object
9519 // 22.1.3.1 Array.prototype.concat ( ...arguments )
9520 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
9521 // 22.1.3.2 Array.prototype.constructor
9522 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
9523 define(
9524 Array.prototype, 'copyWithin',
9525 function copyWithin(target, start/*, end*/) {
9526 var end = arguments[2];
9527
9528 var o = ToObject(this);
9529 var lenVal = o.length;
9530 var len = ToLength(lenVal);
9531 len = max(len, 0);
9532 var relativeTarget = ToInteger(target);
9533 var to;
9534 if (relativeTarget < 0)
9535 to = max(len + relativeTarget, 0);
9536 else
9537 to = min(relativeTarget, len);
9538 var relativeStart = ToInteger(start);
9539 var from;
9540 if (relativeStart < 0)
9541 from = max(len + relativeStart, 0);
9542 else
9543 from = min(relativeStart, len);
9544 var relativeEnd;
9545 if (end === undefined)
9546 relativeEnd = len;
9547 else
9548 relativeEnd = ToInteger(end);
9549 var final;
9550 if (relativeEnd < 0)
9551 final = max(len + relativeEnd, 0);
9552 else
9553 final = min(relativeEnd, len);
9554 var count = min(final - from, len - to);
9555 var direction;
9556 if (from < to && to < from + count) {
9557 direction = -1;
9558 from = from + count - 1;
9559 to = to + count - 1;
9560 } else {
9561 direction = 1;
9562 }
9563 while (count > 0) {
9564 var fromKey = String(from);
9565 var toKey = String(to);
9566 var fromPresent = HasProperty(o, fromKey);
9567 if (fromPresent) {
9568 var fromVal = o[fromKey];
9569 o[toKey] = fromVal;
9570 } else {
9571 delete o[toKey];
9572 }
9573 from = from + direction;
9574 to = to + direction;
9575 count = count - 1;
9576 }
9577 return o;
9578 });
9579
9580 // 22.1.3.4 Array.prototype.entries ( )
9581 var nativeArrayIteratorMethods =
9582 ('entries' in Array.prototype && 'next' in [].entries());
9583
9584 define(
9585 Array.prototype, 'entries',
9586 function entries() {
9587 return CreateArrayIterator(this, 'key+value');
9588 }, !nativeArrayIteratorMethods);
9589
9590 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
9591
9592 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
9593 define(
9594 Array.prototype, 'fill',
9595 function fill(value/*, start, end*/) {
9596 var start = arguments[1],
9597 end = arguments[2];
9598
9599 var o = ToObject(this);
9600 var lenVal = o.length;
9601 var len = ToLength(lenVal);
9602 len = max(len, 0);
9603 var relativeStart = ToInteger(start);
9604 var k;
9605 if (relativeStart < 0)
9606 k = max((len + relativeStart), 0);
9607 else
9608 k = min(relativeStart, len);
9609 var relativeEnd;
9610 if (end === undefined)
9611 relativeEnd = len;
9612 else
9613 relativeEnd = ToInteger(end);
9614 var final;
9615 if (relativeEnd < 0)
9616 final = max((len + relativeEnd), 0);
9617 else
9618 final = min(relativeEnd, len);
9619 while (k < final) {
9620 var pk = String(k);
9621 o[pk] = value;
9622 k += 1;
9623 }
9624 return o;
9625 });
9626
9627 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
9628
9629 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
9630 define(
9631 Array.prototype, 'find',
9632 function find(predicate) {
9633 var o = ToObject(this);
9634 var lenValue = o.length;
9635 var len = ToInteger(lenValue);
9636 if (!IsCallable(predicate)) throw TypeError();
9637 var t = arguments.length > 1 ? arguments[1] : undefined;
9638 var k = 0;
9639 while (k < len) {
9640 var pk = String(k);
9641 var kPresent = HasProperty(o, pk);
9642 if (kPresent) {
9643 var kValue = o[pk];
9644 var testResult = predicate.call(t, kValue, k, o);
9645 if (Boolean(testResult)) {
9646 return kValue;
9647 }
9648 }
9649 ++k;
9650 }
9651 return undefined;
9652 });
9653
9654 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
9655 define(
9656 Array.prototype, 'findIndex',
9657 function findIndex(predicate) {
9658 var o = ToObject(this);
9659 var lenValue = o.length;
9660 var len = ToLength(lenValue);
9661 if (!IsCallable(predicate)) throw TypeError();
9662 var t = arguments.length > 1 ? arguments[1] : undefined;
9663 var k = 0;
9664 while (k < len) {
9665 var pk = String(k);
9666 var kPresent = HasProperty(o, pk);
9667 if (kPresent) {
9668 var kValue = o[pk];
9669 var testResult = predicate.call(t, kValue, k, o);
9670 if (Boolean(testResult)) {
9671 return k;
9672 }
9673 }
9674 ++k;
9675 }
9676 return -1;
9677 });
9678
9679 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
9680 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
9681 // 22.1.3.12 Array.prototype.join (separator)
9682
9683 // 22.1.3.13 Array.prototype.keys ( )
9684 define(
9685 Array.prototype, 'keys',
9686 function keys() {
9687 return CreateArrayIterator(this, 'key');
9688 }, !nativeArrayIteratorMethods);
9689
9690 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9691 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
9692 // 22.1.3.16 Array.prototype.pop ( )
9693 // 22.1.3.17 Array.prototype.push ( ...items )
9694 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
9695 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
9696 // 22.1.3.20 Array.prototype.reverse ( )
9697 // 22.1.3.21 Array.prototype.shift ( )
9698 // 22.1.3.22 Array.prototype.slice (start, end)
9699 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
9700 // 22.1.3.24 Array.prototype.sort (comparefn)
9701 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
9702 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9703 // 22.1.3.27 Array.prototype.toString ( )
9704 // 22.1.3.28 Array.prototype.unshift ( ...items )
9705
9706 // 22.1.3.29 Array.prototype.values ( )
9707 define(
9708 Array.prototype, 'values',
9709 function values() {
9710 return CreateArrayIterator(this, 'value');
9711 }, !nativeArrayIteratorMethods);
9712
9713 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
9714 define(
9715 Array.prototype, $$iterator,
9716 Array.prototype.values
9717 );
9718
9719 // 22.1.3.31 Array.prototype [ @@unscopables ]
9720 // 22.1.4 Properties of Array Instances
9721 // 22.1.4.1 length
9722
9723 // 22.1.5 Array Iterator Objects
9724 function ArrayIterator() {}
9725
9726 // 22.1.5.1 CreateArrayIterator Abstract Operation
9727 function CreateArrayIterator(array, kind) {
9728 var o = ToObject(array);
9729 var iterator = new ArrayIterator;
9730 set_internal(iterator, '[[IteratedObject]]', o);
9731 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
9732 set_internal(iterator, '[[ArrayIterationKind]]', kind);
9733 return iterator;
9734 }
9735
9736 // 22.1.5.2 The %ArrayIteratorPrototype% Object
9737 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
9738 ArrayIterator.prototype = $ArrayIteratorPrototype$;
9739
9740 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
9741 define(
9742 $ArrayIteratorPrototype$, 'next',
9743 function next() {
9744 var o = strict(this);
9745 if (Type(o) !== 'object') throw TypeError();
9746 var a = o['[[IteratedObject]]'],
9747 index = o['[[ArrayIteratorNextIndex]]'],
9748 itemKind = o['[[ArrayIterationKind]]'],
9749 lenValue = a.length,
9750 len = ToUint32(lenValue),
9751 elementKey,
9752 elementValue;
9753 if (itemKind.indexOf('sparse') !== -1) {
9754 var found = false;
9755 while (!found && index < len) {
9756 elementKey = String(index);
9757 found = HasProperty(a, elementKey);
9758 if (!found) {
9759 index += 1;
9760 }
9761 }
9762 }
9763 if (index >= len) {
9764 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
9765 return CreateIterResultObject(undefined, true);
9766 }
9767 elementKey = index;
9768 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
9769 if (itemKind.indexOf('value') !== -1)
9770 elementValue = a[elementKey];
9771 if (itemKind.indexOf('key+value') !== -1)
9772 return CreateIterResultObject([elementKey, elementValue], false);
9773 if (itemKind.indexOf('key') !== -1)
9774 return CreateIterResultObject(elementKey, false);
9775 if (itemKind === 'value')
9776 return CreateIterResultObject(elementValue, false);
9777 throw Error('Internal error');
9778 });
9779
9780 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
9781 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
9782
9783 // 22.1.5.3 Properties of Array Iterator Instances
9784
9785
9786 // ---------------------------------------
9787 // 22.2 TypedArray Objects
9788 // ---------------------------------------
9789
9790 // See typedarray.js for TypedArray polyfill
9791
9792 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
9793 'Int16Array', 'Uint16Array',
9794 'Int32Array', 'Uint32Array',
9795 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
9796 if (!($TypedArrayName$ in global))
9797 return;
9798 var $TypedArray$ = global[$TypedArrayName$];
9799
9800 // 22.2.1 The %TypedArray% Intrinsic Object
9801 // 22.2.1.1 %TypedArray% ( length )
9802 // 22.2.1.2 %TypedArray% ( typedArray )
9803 // 22.2.1.3 %TypedArray% ( object )
9804 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
9805 // 22.2.1.5 %TypedArray% ( all other argument combinations )
9806 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
9807
9808 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
9809 define(
9810 $TypedArray$, 'from',
9811 function from(source) {
9812 var mapfn = arguments[1];
9813 var thisArg = arguments[2];
9814
9815 var c = strict(this);
9816 if (!IsConstructor(c)) throw TypeError();
9817 if (mapfn === undefined) {
9818 var mapping = false;
9819 } else {
9820 if (IsCallable(mapfn)) throw TypeError();
9821 var t = thisArg;
9822 mapping = true;
9823 }
9824 var usingIterator = GetMethod(source, $$iterator);
9825 if (usingIterator !== undefined) {
9826 var iterator = GetIterator(source, usingIterator);
9827 var values = [];
9828 var next = true;
9829 while (next !== false) {
9830 next = IteratorStep(iterator);
9831 if (next !== false) {
9832 var nextValue = IteratorValue(next);
9833 values.push(nextValue);
9834 }
9835 }
9836 var len = values.length;
9837 var newObj = new c(len);
9838 var k = 0;
9839 while (k < len) {
9840 var kValue = values.shift();
9841 if (mapping) {
9842 var mappedValue = mapfn.call(t, kValue);
9843 } else {
9844 mappedValue = kValue;
9845 }
9846 newObj[k] = mappedValue;
9847 ++k;
9848 }
9849 console.assert(values.length === 0);
9850 return newObj;
9851 }
9852 var arrayLike = ToObject(source);
9853 var lenValue = arrayLike.length;
9854 len = ToLength(lenValue);
9855 newObj = new c(len);
9856 k = 0;
9857 while (k < len) {
9858 kValue = arrayLike[k];
9859 if (mapping) {
9860 mappedValue = mapfn.call(t, kValue, k);
9861 } else {
9862 mappedValue = kValue;
9863 }
9864 newObj[k] = mappedValue;
9865 ++k;
9866 }
9867 return newObj;
9868 });
9869
9870 // 22.2.2.2 %TypedArray%.of ( ...items )
9871 define(
9872 $TypedArray$, 'of',
9873 function of() {
9874 var items = arguments;
9875
9876 var len = items.length;
9877 var c = strict(this);
9878 var newObj = new c(len);
9879 var k = 0;
9880 while (k < len) {
9881 newObj[k] = items[k];
9882 ++k;
9883 }
9884 return newObj;
9885 });
9886
9887 // 22.2.2.3 %TypedArray%.prototype
9888 // 22.2.2.4 get %TypedArray% [ @@species ]
9889 // 22.2.3 Properties of the %TypedArrayPrototype% Object
9890 // 22.2.3.1 get %TypedArray%.prototype.buffer
9891 // 22.2.3.2 get %TypedArray%.prototype.byteLength
9892 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
9893 // 22.2.3.4 %TypedArray%.prototype.constructor
9894
9895 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
9896 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
9897
9898 // 22.2.3.6 %TypedArray%.prototype.entries ( )
9899 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
9900
9901 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
9902 define($TypedArray$.prototype, 'every', Array.prototype.every);
9903
9904 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
9905 define(
9906 $TypedArray$.prototype, 'fill',
9907 //Array.prototype.fill // Doesn't work in Safari 7
9908 function fill(value/*, start, end*/) {
9909 var start = arguments[1],
9910 end = arguments[2];
9911
9912 var o = ToObject(this);
9913 var lenVal = o.length;
9914 var len = ToLength(lenVal);
9915 len = max(len, 0);
9916 var relativeStart = ToInteger(start);
9917 var k;
9918 if (relativeStart < 0) k = max((len + relativeStart), 0);
9919 else k = min(relativeStart, len);
9920 var relativeEnd;
9921 if (end === undefined) relativeEnd = len;
9922 else relativeEnd = ToInteger(end);
9923 var final;
9924 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
9925 else final = min(relativeEnd, len);
9926 while (k < final) {
9927 var pk = String(k);
9928 o[pk] = value;
9929 k += 1;
9930 }
9931 return o;
9932 });
9933
9934 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
9935 define(
9936 $TypedArray$.prototype, 'filter',
9937 function filter(callbackfn) {
9938 var thisArg = arguments[1];
9939
9940 var o = ToObject(this);
9941 var lenVal = o.length;
9942 var len = ToLength(lenVal);
9943 if (!IsCallable(callbackfn)) throw TypeError();
9944 var t = thisArg;
9945 var c = o.constructor;
9946 var kept = [];
9947 var k = 0;
9948 var captured = 0;
9949 while (k < len) {
9950 var kValue = o[k];
9951 var selected = callbackfn.call(t, kValue, k, o);
9952 if (selected) {
9953 kept.push(kValue);
9954 ++captured;
9955 }
9956 ++k;
9957 }
9958 var a = new c(captured);
9959 var n = 0;
9960 for (var i = 0; i < kept.length; ++i) {
9961 var e = kept[i];
9962 a[n] = e;
9963 ++n;
9964 }
9965 return a;
9966 });
9967
9968 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
9969 define($TypedArray$.prototype, 'find', Array.prototype.find);
9970
9971 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
9972 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
9973
9974 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
9975 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
9976
9977 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
9978 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
9979
9980 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
9981 define($TypedArray$.prototype, 'join', Array.prototype.join);
9982
9983 // 22.2.3.15 %TypedArray%.prototype.keys ( )
9984 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
9985
9986 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9987 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
9988
9989 // 22.2.3.17 get %TypedArray%.prototype.length
9990
9991 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
9992 define(
9993 $TypedArray$.prototype, 'map',
9994 function map(callbackfn) {
9995 var thisArg = arguments[1];
9996
9997 var o = ToObject(this);
9998 var lenValue = o.length;
9999 var len = ToLength(lenValue);
10000 if (!IsCallable(callbackfn)) throw TypeError();
10001 var t = thisArg;
10002 var a = undefined;
10003 var c = o.constructor;
10004 if (IsConstructor(c))
10005 a = new c(len);
10006 if (a === undefined)
10007 a = new Array(len);
10008 var k = 0;
10009 while (k < len) {
10010 var kPresent = HasProperty(o, k);
10011 if (kPresent) {
10012 var kValue = o[k];
10013 var mappedValue = callbackfn.call(t, kValue, k, o);
10014 a[k] = mappedValue;
10015 }
10016 ++k;
10017 }
10018 return a;
10019 });
10020
10021 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
10022 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
10023
10024 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
10025 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
10026
10027 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
10028 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
10029
10030 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
10031 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
10032 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
10033
10034 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
10035 define(
10036 $TypedArray$.prototype, 'slice',
10037 function slice(start, end) {
10038 var o = ToObject(this);
10039 var lenVal = o.length;
10040 var len = ToLength(lenVal);
10041 var relativeStart = ToInteger(start);
10042 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
10043 var relativeEnd = (end === undefined) ? len : ToInteger(end);
10044 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
10045 var count = final - k;
10046 var c = o.constructor;
10047 if (IsConstructor(c)) {
10048 var a = new c(count);
10049 } else {
10050 throw TypeError();
10051 }
10052 var n = 0;
10053 while (k < final) {
10054 var kValue = o[k];
10055 a[n] = kValue;
10056 ++k;
10057 ++n;
10058 }
10059 return a;
10060 });
10061
10062 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
10063 define($TypedArray$.prototype, 'some', Array.prototype.some);
10064
10065 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
10066 define(
10067 $TypedArray$.prototype, 'sort',
10068 function sort() {
10069 var comparefn = arguments[0];
10070
10071 function sortCompare(x, y) {
10072 console.assert(Type(x) === 'number' && Type(y) === 'number');
10073 if (x !== x && y !== y) return +0;
10074 if (x !== x) return 1;
10075 if (y !== y) return -1;
10076 if (comparefn !== undefined) {
10077 return comparefn(x, y);
10078 }
10079 if (x < y) return -1;
10080 if (x > y) return 1;
10081 return +0;
10082 }
10083 return Array.prototype.sort.call(this, sortCompare);
10084 });
10085
10086 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
10087 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
10088 // 22.2.3.28 %TypedArray%.prototype.toString ( )
10089
10090 // 22.2.3.29 %TypedArray%.prototype.values ( )
10091 define($TypedArray$.prototype, 'values', Array.prototype.values);
10092
10093 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
10094 define(
10095 $TypedArray$.prototype, $$iterator,
10096 $TypedArray$.prototype.values
10097 );
10098
10099 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
10100 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
10101
10102 // 22.2.4 The TypedArray Constructors
10103 // 22.2.4.1TypedArray( ... argumentsList)
10104 // 22.2.5 Properties of the TypedArray Constructors
10105 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
10106 // 22.2.5.2 TypedArray.prototype
10107 // 22.2.6 Properties of TypedArray Prototype Objects
10108 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
10109 // 22.2.6.2 TypedArray.prototype.constructor
10110 // 22.2.7 Properties of TypedArray Instances
10111 });
10112
10113 // ---------------------------------------
10114 // 23 Keyed Collection
10115 // ---------------------------------------
10116
10117 // ---------------------------------------
10118 // 23.1 Map Objects
10119 // ---------------------------------------
10120
10121 (function() {
10122 // 23.1.1 The Map Constructor
10123
10124 // 23.1.1.1 Map ( [ iterable ] )
10125 /** @constructor */
10126 function Map(/*iterable*/) {
10127 var map = strict(this);
10128 var iterable = arguments[0];
10129
10130 if (Type(map) !== 'object') throw TypeError();
10131 if ('[[MapData]]' in map) throw TypeError();
10132
10133 if (iterable !== undefined) {
10134 var adder = map['set'];
10135 if (!IsCallable(adder)) throw TypeError();
10136 var iter = GetIterator(ToObject(iterable));
10137 }
10138 set_internal(map, '[[MapData]]', { keys: [], values: [] });
10139 if (iter === undefined) return map;
10140 while (true) {
10141 var next = IteratorStep(iter);
10142 if (next === false)
10143 return map;
10144 var nextItem = IteratorValue(next);
10145 if (Type(nextItem) !== 'object') throw TypeError();
10146 var k = nextItem[0];
10147 var v = nextItem[1];
10148 adder.call(map, k, v);
10149 }
10150
10151 return map;
10152 }
10153
10154 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10155 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
10156 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
10157 (new global.Map([['a', 1]]).size !== 1))
10158 global.Map = Map;
10159
10160
10161 function MapDataIndexOf(mapData, key) {
10162 var i;
10163 if (key === key) return mapData.keys.indexOf(key);
10164 // Slow case for NaN
10165 for (i = 0; i < mapData.keys.length; i += 1)
10166 if (SameValueZero(mapData.keys[i], key)) return i;
10167 return -1;
10168 }
10169
10170 // 23.1.1.2 new Map ( ... argumentsList )
10171 // 23.1.2 Properties of the Map Constructor
10172 // 23.1.2.1 Map.prototype
10173 var $MapPrototype$ = {};
10174 Map.prototype = $MapPrototype$;
10175
10176 // 23.1.2.2 get Map [ @@species ]
10177
10178 // 23.1.3 Properties of the Map Prototype Object
10179 // 23.1.3.1 Map.prototype.clear ()
10180 define(
10181 Map.prototype, 'clear',
10182 function clear() {
10183 var m = strict(this);
10184 if (Type(m) !== 'object') throw TypeError();
10185 if (!('[[MapData]]' in m)) throw TypeError();
10186 if (m['[[MapData]]'] === undefined) throw TypeError();
10187 var entries = m['[[MapData]]'];
10188 entries.keys.length = 0;
10189 entries.values.length = 0;
10190 return undefined;
10191 });
10192
10193 // 23.1.3.2 Map.prototype.constructor
10194
10195 // 23.1.3.3 Map.prototype.delete ( key )
10196 define(
10197 Map.prototype, 'delete',
10198 function delete_(key) {
10199 var m = strict(this);
10200 if (Type(m) !== 'object') throw TypeError();
10201 if (!('[[MapData]]' in m)) throw TypeError();
10202 if (m['[[MapData]]'] === undefined) throw TypeError();
10203 var entries = m['[[MapData]]'];
10204 var i = MapDataIndexOf(entries, key);
10205 if (i < 0) return false;
10206 entries.keys[i] = empty;
10207 entries.values[i] = empty;
10208 return true;
10209 });
10210
10211 // 23.1.3.4 Map.prototype.entries ( )
10212 define(
10213 Map.prototype, 'entries',
10214 function entries() {
10215 var m = strict(this);
10216 if (Type(m) !== 'object') throw TypeError();
10217 return CreateMapIterator(m, 'key+value');
10218 });
10219
10220 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
10221 define(
10222 Map.prototype, 'forEach',
10223 function forEach(callbackfn /*, thisArg*/) {
10224 var thisArg = arguments[1];
10225
10226 var m = strict(this);
10227 if (Type(m) !== 'object') throw TypeError();
10228 if (!('[[MapData]]' in m)) throw TypeError();
10229 if (m['[[MapData]]'] === undefined) throw TypeError();
10230 var entries = m['[[MapData]]'];
10231
10232 if (!IsCallable(callbackfn)) {
10233 throw TypeError('First argument to forEach is not callable.');
10234 }
10235 for (var i = 0; i < entries.keys.length; ++i) {
10236 if (entries.keys[i] !== empty) {
10237 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
10238 }
10239 }
10240 return undefined;
10241 });
10242
10243 // 23.1.3.6 Map.prototype.get ( key )
10244 define(
10245 Map.prototype, 'get',
10246 function get(key) {
10247 var m = strict(this);
10248 if (Type(m) !== 'object') throw TypeError();
10249 if (!('[[MapData]]' in m)) throw TypeError();
10250 if (m['[[MapData]]'] === undefined) throw TypeError();
10251 var entries = m['[[MapData]]'];
10252 var i = MapDataIndexOf(entries, key);
10253 if (i >= 0) return entries.values[i];
10254 return undefined;
10255 });
10256
10257 // 23.1.3.7 Map.prototype.has ( key )
10258 define(
10259 Map.prototype, 'has',
10260 function has(key) {
10261 var m = strict(this);
10262 if (Type(m) !== 'object') throw TypeError();
10263 if (!('[[MapData]]' in m)) throw TypeError();
10264 if (m['[[MapData]]'] === undefined) throw TypeError();
10265 var entries = m['[[MapData]]'];
10266 if (MapDataIndexOf(entries, key) >= 0) return true;
10267 return false;
10268 });
10269
10270 // 23.1.3.8 Map.prototype.keys ( )
10271 define(
10272 Map.prototype, 'keys',
10273 function keys() {
10274 var m = strict(this);
10275 if (Type(m) !== 'object') throw TypeError();
10276 return CreateMapIterator(m, 'key');
10277 });
10278
10279 // 23.1.3.9 Map.prototype.set ( key , value )
10280 define(
10281 Map.prototype, 'set',
10282 function set(key, value) {
10283 var m = strict(this);
10284 if (Type(m) !== 'object') throw TypeError();
10285 if (!('[[MapData]]' in m)) throw TypeError();
10286 if (m['[[MapData]]'] === undefined) throw TypeError();
10287 var entries = m['[[MapData]]'];
10288 var i = MapDataIndexOf(entries, key);
10289 if (i < 0) i = entries.keys.length;
10290 if (SameValue(key, -0)) key = 0;
10291 entries.keys[i] = key;
10292 entries.values[i] = value;
10293 return m;
10294 });
10295
10296 // 23.1.3.10 get Map.prototype.size
10297 Object.defineProperty(
10298 Map.prototype, 'size', {
10299 get: function() {
10300 var m = strict(this);
10301 if (Type(m) !== 'object') throw TypeError();
10302 if (!('[[MapData]]' in m)) throw TypeError();
10303 if (m['[[MapData]]'] === undefined) throw TypeError();
10304 var entries = m['[[MapData]]'];
10305 var count = 0;
10306 for (var i = 0; i < entries.keys.length; ++i) {
10307 if (entries.keys[i] !== empty)
10308 count = count + 1;
10309 }
10310 return count;
10311 }
10312 });
10313
10314 // 23.1.3.11 Map.prototype.values ( )
10315 define(
10316 Map.prototype, 'values',
10317 function values() {
10318 var m = strict(this);
10319 if (Type(m) !== 'object') throw TypeError();
10320 return CreateMapIterator(m, 'value');
10321 });
10322
10323 // 23.1.3.12 Map.prototype [ @@iterator ]( )
10324 define(
10325 Map.prototype, $$iterator,
10326 function() {
10327 var m = strict(this);
10328 if (Type(m) !== 'object') throw TypeError();
10329 return CreateMapIterator(m, 'key+value');
10330 });
10331
10332 // 23.1.3.13 Map.prototype [ @@toStringTag ]
10333 define(global.Map.prototype, $$toStringTag, 'Map');
10334
10335 // 23.1.4 Properties of Map Instances
10336 // 23.1.5 Map Iterator Objects
10337
10338 /** @constructor */
10339 function MapIterator() {}
10340
10341 // 23.1.5.1 CreateMapIterator Abstract Operation
10342 function CreateMapIterator(map, kind) {
10343 if (Type(map) !== 'object') throw TypeError();
10344 if (!('[[MapData]]' in map)) throw TypeError();
10345 if (map['[[MapData]]'] === undefined) throw TypeError();
10346 var iterator = new MapIterator;
10347 set_internal(iterator, '[[Map]]', map);
10348 set_internal(iterator, '[[MapNextIndex]]', 0);
10349 set_internal(iterator, '[[MapIterationKind]]', kind);
10350 return iterator;
10351 }
10352
10353 // 23.1.5.2 The %MapIteratorPrototype% Object
10354 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
10355 MapIterator.prototype = $MapIteratorPrototype$;
10356
10357 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
10358 define(
10359 $MapIteratorPrototype$, 'next',
10360 function next() {
10361 var o = strict(this);
10362 if (Type(o) !== 'object') throw TypeError();
10363 var m = o['[[Map]]'],
10364 index = o['[[MapNextIndex]]'],
10365 itemKind = o['[[MapIterationKind]]'],
10366 entries = m['[[MapData]]'];
10367 while (index < entries.keys.length) {
10368 var e = {key: entries.keys[index], value: entries.values[index]};
10369 index = index += 1;
10370 set_internal(o, '[[MapNextIndex]]', index);
10371 if (e.key !== empty) {
10372 if (itemKind === 'key') {
10373 return CreateIterResultObject(e.key, false);
10374 } else if (itemKind === 'value') {
10375 return CreateIterResultObject(e.value, false);
10376 } else {
10377 return CreateIterResultObject([e.key, e.value], false);
10378 }
10379 }
10380 }
10381 return CreateIterResultObject(undefined, true);
10382 });
10383
10384 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
10385 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
10386
10387 // 23.1.5.3 Properties of Map Iterator Instances
10388 }());
10389
10390 // ---------------------------------------
10391 // 23.2 Set Objects
10392 // ---------------------------------------
10393
10394 (function() {
10395 // 23.2.1 The Set Constructor
10396 // 23.2.1.1 Set ( [ iterable ] )
10397
10398 /** @constructor */
10399 function Set(/*iterable*/) {
10400 var set = strict(this);
10401 var iterable = arguments[0];
10402
10403 if (Type(set) !== 'object') throw TypeError();
10404 if ('[[SetData]]' in set) throw TypeError();
10405
10406 if (iterable !== undefined) {
10407 var adder = set['add'];
10408 if (!IsCallable(adder)) throw TypeError();
10409 var iter = GetIterator(ToObject(iterable));
10410 }
10411 set_internal(set, '[[SetData]]', []);
10412 if (iter === undefined) return set;
10413 while (true) {
10414 var next = IteratorStep(iter);
10415 if (next === false)
10416 return set;
10417 var nextValue = IteratorValue(next);
10418 adder.call(set, nextValue);
10419 }
10420
10421 return set;
10422 }
10423
10424 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10425 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
10426 (new global.Set([1]).size !== 1))
10427 global.Set = Set;
10428
10429 function SetDataIndexOf(setData, key) {
10430 var i;
10431 if (key === key)
10432 return setData.indexOf(key);
10433 // Slow case for NaN
10434 for (i = 0; i < setData.length; i += 1)
10435 if (SameValueZero(setData[i], key)) return i;
10436 return -1;
10437 }
10438
10439 // 23.2.1.2 new Set ( ...argumentsList )
10440 // 23.2.2 Properties of the Set Constructor
10441
10442 // 23.2.2.1 Set.prototype
10443 var $SetPrototype$ = {};
10444 Set.prototype = $SetPrototype$;
10445
10446 // 23.2.2.2 get Set [ @@species ]
10447 // 23.2.3 Properties of the Set Prototype Object
10448
10449 // 23.2.3.1 Set.prototype.add (value )
10450 define(
10451 Set.prototype, 'add',
10452 function add(value) {
10453 var s = strict(this);
10454 if (Type(s) !== 'object') throw TypeError();
10455 if (!('[[SetData]]' in s)) throw TypeError();
10456 if (s['[[SetData]]'] === undefined) throw TypeError();
10457 if (SameValue(value, -0)) value = 0;
10458 var entries = s['[[SetData]]'];
10459 var i = SetDataIndexOf(entries, value);
10460 if (i < 0) i = s['[[SetData]]'].length;
10461 s['[[SetData]]'][i] = value;
10462
10463 return s;
10464 });
10465
10466 // 23.2.3.2 Set.prototype.clear ()
10467 define(
10468 Set.prototype, 'clear',
10469 function clear() {
10470 var s = strict(this);
10471 if (Type(s) !== 'object') throw TypeError();
10472 if (!('[[SetData]]' in s)) throw TypeError();
10473 if (s['[[SetData]]'] === undefined) throw TypeError();
10474 var entries = s['[[SetData]]'];
10475 entries.length = 0;
10476 return undefined;
10477 });
10478
10479 // 23.2.3.3 Set.prototype.constructor
10480 // 23.2.3.4 Set.prototype.delete ( value )
10481 define(
10482 Set.prototype, 'delete',
10483 function delete_(value) {
10484 var s = strict(this);
10485 if (Type(s) !== 'object') throw TypeError();
10486 if (!('[[SetData]]' in s)) throw TypeError();
10487 if (s['[[SetData]]'] === undefined) throw TypeError();
10488 var entries = s['[[SetData]]'];
10489 var i = SetDataIndexOf(entries, value);
10490 if (i < 0) return false;
10491 entries[i] = empty;
10492 return true;
10493 });
10494
10495 // 23.2.3.5 Set.prototype.entries ( )
10496 define(
10497 Set.prototype, 'entries',
10498 function entries() {
10499 var s = strict(this);
10500 if (Type(s) !== 'object') throw TypeError();
10501 return CreateSetIterator(s, 'key+value');
10502 });
10503
10504 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
10505 define(
10506 Set.prototype, 'forEach',
10507 function forEach(callbackfn/*, thisArg*/) {
10508 var thisArg = arguments[1];
10509
10510 var s = strict(this);
10511 if (Type(s) !== 'object') throw TypeError();
10512 if (!('[[SetData]]' in s)) throw TypeError();
10513 if (s['[[SetData]]'] === undefined) throw TypeError();
10514 var entries = s['[[SetData]]'];
10515
10516 if (!IsCallable(callbackfn)) {
10517 throw TypeError('First argument to forEach is not callable.');
10518 }
10519 for (var i = 0; i < entries.length; ++i) {
10520 if (entries[i] !== empty) {
10521 callbackfn.call(thisArg, entries[i], entries[i], s);
10522 }
10523 }
10524 });
10525
10526 // 23.2.3.7 Set.prototype.has ( value )
10527 define(
10528 Set.prototype, 'has',
10529 function has(key) {
10530 var s = strict(this);
10531 if (Type(s) !== 'object') throw TypeError();
10532 if (!('[[SetData]]' in s)) throw TypeError();
10533 if (s['[[SetData]]'] === undefined) throw TypeError();
10534 var entries = s['[[SetData]]'];
10535 return SetDataIndexOf(entries, key) !== -1;
10536 });
10537
10538 // 23.2.3.8 Set.prototype.keys ( )
10539 // See Set.prototype.values
10540
10541 // 23.2.3.9 get Set.prototype.size
10542 Object.defineProperty(
10543 Set.prototype, 'size', {
10544 get: function() {
10545 var s = strict(this);
10546 if (Type(s) !== 'object') throw TypeError();
10547 if (!('[[SetData]]' in s)) throw TypeError();
10548 if (s['[[SetData]]'] === undefined) throw TypeError();
10549 var entries = s['[[SetData]]'];
10550 var count = 0;
10551 for (var i = 0; i < entries.length; ++i) {
10552 if (entries[i] !== empty)
10553 count = count + 1;
10554 }
10555 return count;
10556 }
10557 });
10558
10559 // 23.2.3.10 Set.prototype.values ( )
10560 define(
10561 Set.prototype, 'values',
10562 function values() {
10563 var s = strict(this);
10564 if (Type(s) !== 'object') throw TypeError();
10565 return CreateSetIterator(s, 'value');
10566 });
10567 // NOTE: function name is still 'values':
10568 Set.prototype.keys = Set.prototype.values;
10569
10570 // 23.2.3.11 Set.prototype [@@iterator ] ( )
10571 define(
10572 Set.prototype, $$iterator,
10573 function() {
10574 var s = strict(this);
10575 if (Type(s) !== 'object') throw TypeError();
10576 return CreateSetIterator(s);
10577 });
10578
10579 // 23.2.3.12 Set.prototype [ @@toStringTag ]
10580 define(global.Set.prototype, $$toStringTag, 'Set');
10581
10582 // 23.2.4 Properties of Set Instances
10583 // 23.2.5 Set Iterator Objects
10584 /** @constructor */
10585 function SetIterator() {}
10586
10587 // 23.2.5.1 CreateSetIterator Abstract Operation
10588 function CreateSetIterator(set, kind) {
10589 if (Type(set) !== 'object') throw TypeError();
10590 if (!('[[SetData]]' in set)) throw TypeError();
10591 if (set['[[SetData]]'] === undefined) throw TypeError();
10592 var iterator = new SetIterator;
10593 set_internal(iterator, '[[IteratedSet]]', set);
10594 set_internal(iterator, '[[SetNextIndex]]', 0);
10595 set_internal(iterator, '[[SetIterationKind]]', kind);
10596 return iterator;
10597 }
10598
10599 // 23.2.5.2 The %SetIteratorPrototype% Object
10600 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
10601 SetIterator.prototype = $SetIteratorPrototype$;
10602
10603 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
10604 define(
10605 $SetIteratorPrototype$, 'next',
10606 function next() {
10607 var o = strict(this);
10608 if (Type(o) !== 'object') throw TypeError();
10609 var s = o['[[IteratedSet]]'],
10610 index = o['[[SetNextIndex]]'],
10611 itemKind = o['[[SetIterationKind]]'],
10612 entries = s['[[SetData]]'];
10613 while (index < entries.length) {
10614 var e = entries[index];
10615 index = index += 1;
10616 set_internal(o, '[[SetNextIndex]]', index);
10617 if (e !== empty) {
10618 if (itemKind === 'key+value')
10619 return CreateIterResultObject([e, e], false);
10620 return CreateIterResultObject(e, false);
10621 }
10622 }
10623 return CreateIterResultObject(undefined, true);
10624 });
10625
10626 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
10627 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
10628
10629 // 23.2.5.3 Properties of Set Iterator Instances
10630
10631 }());
10632
10633 // ---------------------------------------
10634 // 23.3 WeakMap Objects
10635 // ---------------------------------------
10636
10637 (function() {
10638 // 23.3.1 The WeakMap Constructor
10639 // 23.3.1.1 WeakMap ( [ iterable ] )
10640 /** @constructor */
10641 function WeakMap(/*iterable*/) {
10642 var map = strict(this);
10643 var iterable = arguments[0];
10644
10645 if (Type(map) !== 'object') throw TypeError();
10646 if ('[[WeakMapData]]' in map) throw TypeError();
10647
10648 if (iterable !== undefined) {
10649 var adder = map['set'];
10650 if (!IsCallable(adder)) throw TypeError();
10651 var iter = GetIterator(ToObject(iterable));
10652 }
10653 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
10654 if (iter === undefined) return map;
10655 while (true) {
10656 var next = IteratorStep(iter);
10657 if (next === false)
10658 return map;
10659 var nextValue = IteratorValue(next);
10660 if (Type(nextValue) !== 'object') throw TypeError();
10661 var k = nextValue[0];
10662 var v = nextValue[1];
10663 adder.call(map, k, v);
10664 }
10665
10666 return map;
10667 }
10668
10669 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10670 global.WeakMap = WeakMap;
10671
10672 // 23.3.2 Properties of the WeakMap Constructor
10673 // 23.3.2.1 WeakMap.prototype
10674 var $WeakMapPrototype$ = {};
10675 WeakMap.prototype = $WeakMapPrototype$;
10676
10677
10678
10679 // 23.3.2.2 WeakMap[ @@create ] ( )
10680 // 23.3.3 Properties of the WeakMap Prototype Object
10681
10682 // 23.3.3.1 WeakMap.prototype.constructor
10683
10684 // 23.3.3.2 WeakMap.prototype.delete ( key )
10685 define(
10686 WeakMap.prototype, 'delete',
10687 function delete_(key) {
10688 var M = strict(this);
10689 if (Type(M) !== 'object') throw TypeError();
10690 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10691 if (Type(key) !== 'object') throw TypeError('Expected object');
10692 return M['[[WeakMapData]]'].remove(key);
10693 });
10694
10695 // 23.3.3.3 WeakMap.prototype.get ( key )
10696 define(
10697 WeakMap.prototype, 'get',
10698 function get(key, defaultValue) {
10699 var M = strict(this);
10700 if (Type(M) !== 'object') throw TypeError();
10701 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10702 if (Type(key) !== 'object') throw TypeError('Expected object');
10703 return M['[[WeakMapData]]'].get(key, defaultValue);
10704 });
10705
10706 // 23.3.3.4 WeakMap.prototype.has ( key )
10707 define(
10708 WeakMap.prototype, 'has',
10709 function has(key) {
10710 var M = strict(this);
10711 if (Type(M) !== 'object') throw TypeError();
10712 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10713 if (Type(key) !== 'object') throw TypeError('Expected object');
10714 return M['[[WeakMapData]]'].has(key);
10715 });
10716
10717 // 23.3.3.5 WeakMap.prototype.set ( key , value )
10718 define(
10719 WeakMap.prototype, 'set',
10720 function set(key, value) {
10721 var M = strict(this);
10722 if (Type(M) !== 'object') throw TypeError();
10723 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10724 if (Type(key) !== 'object') throw TypeError('Expected object');
10725 M['[[WeakMapData]]'].set(key, value);
10726 return M;
10727 });
10728
10729 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
10730 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
10731
10732 // 23.3.4 Properties of WeakMap Instances
10733
10734 // Polyfills for incomplete native implementations:
10735 (function() {
10736 var wm = new global.WeakMap();
10737 var orig = global.WeakMap.prototype.set;
10738 define(global.WeakMap.prototype, 'set', function set() {
10739 orig.apply(this, arguments);
10740 return this;
10741 }, wm.set({}, 0) !== wm);
10742 }());
10743 }());
10744
10745 // ---------------------------------------
10746 // 23.4 WeakSet Objects
10747 // ---------------------------------------
10748
10749 (function() {
10750 // 23.4.1 The WeakSet Constructor
10751 // 23.4.1.1 WeakSet ( [ iterable ] )
10752 /** @constructor */
10753 function WeakSet(/*iterable*/) {
10754 var set = strict(this);
10755 var iterable = arguments[0];
10756
10757 if (Type(set) !== 'object') throw TypeError();
10758 if ('[[WeakSetData]]' in set) throw TypeError();
10759
10760 if (iterable !== undefined) {
10761 var adder = set['add'];
10762 if (!IsCallable(adder)) throw TypeError();
10763 var iter = GetIterator(ToObject(iterable));
10764 }
10765 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
10766 if (iter === undefined) return set;
10767 while (true) {
10768 var next = IteratorStep(iter);
10769 if (next === false)
10770 return set;
10771 var nextValue = IteratorValue(next);
10772 adder.call(set, nextValue);
10773 }
10774
10775 return set;
10776 }
10777
10778 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10779 global.WeakSet = WeakSet;
10780
10781 // 23.4.2 Properties of the WeakSet Constructor
10782 // 23.4.2.1 WeakSet.prototype
10783 var $WeakSetPrototype$ = {};
10784 WeakSet.prototype = $WeakSetPrototype$;
10785
10786 // 23.4.3 Properties of the WeakSet Prototype Object
10787 // 23.4.3.1 WeakSet.prototype.add (value )
10788 define(
10789 WeakSet.prototype, 'add',
10790 function add(value) {
10791 var S = strict(this);
10792 if (Type(S) !== 'object') throw TypeError();
10793 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10794 if (Type(value) !== 'object') throw TypeError('Expected object');
10795 S['[[WeakSetData]]'].set(value, true);
10796 return S;
10797 });
10798
10799 // 23.4.3.2 WeakSet.prototype.constructor
10800 // 23.4.3.3 WeakSet.prototype.delete ( value )
10801 define(
10802 WeakSet.prototype, 'delete',
10803 function delete_(value) {
10804 var S = strict(this);
10805 if (Type(S) !== 'object') throw TypeError();
10806 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10807 if (Type(value) !== 'object') throw TypeError('Expected object');
10808 return S['[[WeakSetData]]'].remove(value);
10809 });
10810
10811 // 23.4.3.4 WeakSet.prototype.has ( value )
10812 define(
10813 WeakSet.prototype, 'has',
10814 function has(key) {
10815 var S = strict(this);
10816 if (Type(S) !== 'object') throw TypeError();
10817 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10818 if (Type(key) !== 'object') throw TypeError('Expected object');
10819 return S['[[WeakSetData]]'].has(key);
10820 });
10821
10822 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
10823 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
10824
10825 // 23.4.4 Properties of WeakSet Instances
10826
10827 // Polyfills for incomplete native implementations:
10828 (function() {
10829 var ws = new global.WeakSet();
10830 var orig = global.WeakSet.prototype.add;
10831 define(global.WeakSet.prototype, 'add', function add() {
10832 orig.apply(this, arguments);
10833 return this;
10834 }, ws.add({}) !== ws);
10835 }());
10836 }());
10837
10838 // ---------------------------------------
10839 // 24 Structured Data
10840 // ---------------------------------------
10841
10842 // ---------------------------------------
10843 // 24.1 ArrayBuffer Objects
10844 // ---------------------------------------
10845
10846 // See typedarray.js for TypedArray polyfill
10847
10848 (function() {
10849 if (!('ArrayBuffer' in global))
10850 return;
10851
10852 // 24.1.1 Abstract Operations For ArrayBuffer Objects
10853 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
10854 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
10855 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
10856 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
10857 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
10858 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
10859 // 24.1.2 The ArrayBuffer Constructor
10860 // 24.1.2.1 ArrayBuffer( length )
10861 // 24.1.3 Properties of the ArrayBuffer Constructor
10862
10863 // 24.1.3.1 ArrayBuffer.isView ( arg )
10864 define(
10865 ArrayBuffer, 'isView',
10866 function isView(arg) {
10867 if (Type(arg) !== 'object') return false;
10868 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
10869 return false;
10870 });
10871
10872 // 24.1.3.2 ArrayBuffer.prototype
10873 // 24.1.3.3 get ArrayBuffer [ @@species ]
10874 // 24.1.4 Properties of the ArrayBuffer Prototype Object
10875 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
10876 // 24.1.4.2 ArrayBuffer.prototype.constructor
10877 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
10878
10879 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
10880 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
10881
10882 // 24.1.5 Properties of the ArrayBuffer Instances
10883 }());
10884
10885 // ---------------------------------------
10886 // 24.2 DataView Objects
10887 // ---------------------------------------
10888
10889 // See typedarray.js for TypedArray polyfill
10890
10891 (function() {
10892 if (!('DataView' in global))
10893 return;
10894
10895 // 24.2.1 Abstract Operations For DataView Objects
10896 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
10897 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
10898 // 24.2.2 The DataView Constructor
10899 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
10900 // 24.2.3 Properties of the DataView Constructor
10901 // 24.2.3.1 DataView.prototype
10902 // 24.2.4 Properties of the DataView Prototype Object
10903 // 24.2.4.1 get DataView.prototype.buffer
10904 // 24.2.4.2 get DataView.prototype.byteLength
10905 // 24.2.4.3 get DataView.prototype.byteOffset
10906 // 24.2.4.4 DataView.prototype.constructor
10907 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
10908 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
10909 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
10910 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
10911 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
10912 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
10913 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
10914 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
10915 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
10916 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
10917 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
10918 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
10919 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
10920 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
10921 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
10922 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
10923
10924 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
10925 define(DataView.prototype, $$toStringTag, 'DataView');
10926
10927 // 24.2.5 Properties of DataView Instances
10928 }());
10929
10930 // ---------------------------------------
10931 // 24.3 The JSON Object
10932 // ---------------------------------------
10933
10934 // 24.3.1 JSON.parse ( text [ , reviver ] )
10935 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
10936 // 24.3.3 JSON [ @@toStringTag ]
10937 define(JSON, $$toStringTag, 'JSON');
10938
10939 // ---------------------------------------
10940 // 25.1 Iteration
10941 // ---------------------------------------
10942
10943 // 25.1.1 Common Iteration Interfaces
10944 // 25.1.1.1 The Iterable Interface
10945 // 25.1.1.2 The Iterator Interface
10946 // 25.1.1.3 The IteratorResult Interface
10947
10948 // 25.1.2 The %IteratorPrototype% Object
10949 // Defined earlier, so other prototypes can reference it.
10950 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
10951 define($IteratorPrototype$, $$iterator, function() {
10952 return this;
10953 });
10954
10955
10956 // ---------------------------------------
10957 // 25.4 Promise Objects
10958 // ---------------------------------------
10959
10960 (function() {
10961 // 25.4 Promise Objects
10962
10963 // 25.4.1 Promise Abstract Operations
10964
10965 // 25.4.1.1 PromiseCapability Records
10966 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
10967
10968 function IfAbruptRejectPromise(value, capability) {
10969 var rejectResult = capability['[[Reject]]'].call(undefined, value);
10970 return capability['[[Promise]]'];
10971 }
10972
10973 // 25.4.1.2 PromiseReaction Records
10974
10975 // 25.4.1.3 CreateResolvingFunctions ( promise )
10976
10977 function CreateResolvingFunctions(promise) {
10978 var alreadyResolved = {'[[value]]': false};
10979 var resolve = PromiseResolveFunction();
10980 set_internal(resolve, '[[Promise]]', promise);
10981 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
10982 var reject = PromiseRejectFunction();
10983 set_internal(reject, '[[Promise]]', promise);
10984 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
10985 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
10986 }
10987
10988 // 25.4.1.3.1 Promise Reject Functions
10989
10990 function PromiseRejectFunction() {
10991 var F = function(reason) {
10992 console.assert(Type(F['[[Promise]]']) === 'object');
10993 var promise = F['[[Promise]]'];
10994 var alreadyResolved = F['[[AlreadyResolved]]'];
10995 if (alreadyResolved['[[value]]']) return undefined;
10996 set_internal(alreadyResolved, '[[value]]', true);
10997 return RejectPromise(promise, reason);
10998 };
10999 return F;
11000 }
11001
11002 // 25.4.1.3.2 Promise Resolve Functions
11003
11004 function PromiseResolveFunction() {
11005 var F = function(resolution) {
11006 console.assert(Type(F['[[Promise]]']) === 'object');
11007 var promise = F['[[Promise]]'];
11008 var alreadyResolved = F['[[AlreadyResolved]]'];
11009 if (alreadyResolved['[[value]]']) return undefined;
11010 set_internal(alreadyResolved, '[[value]]', true);
11011
11012 if (SameValue(resolution, promise)) {
11013 var selfResolutionError = TypeError();
11014 return RejectPromise(promise, selfResolutionError);
11015 }
11016 if (Type(resolution) !== 'object')
11017 return FulfillPromise(promise, resolution);
11018 try {
11019 var then = resolution['then'];
11020 } catch(then) {
11021 return RejectPromise(promise, then);
11022 }
11023 if (!IsCallable(then))
11024 return FulfillPromise(promise, resolution);
11025 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
11026 return undefined;
11027 };
11028 return F;
11029 }
11030
11031 // 25.4.1.4 FulfillPromise ( promise, value )
11032
11033 function FulfillPromise(promise, value) {
11034 console.assert(promise['[[PromiseState]]'] === 'pending');
11035 var reactions = promise['[[PromiseFulfillReactions]]'];
11036 set_internal(promise, '[[PromiseResult]]', value);
11037 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11038 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11039 set_internal(promise, '[[PromiseState]]', 'fulfilled');
11040 return TriggerPromiseReactions(reactions, value);
11041 }
11042
11043 // 25.4.1.5 NewPromiseCapability ( C )
11044
11045 function NewPromiseCapability(c) {
11046 // To keep Promise hermetic, this doesn't look much like the spec.
11047 return CreatePromiseCapabilityRecord(undefined, c);
11048 }
11049
11050 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
11051
11052 function CreatePromiseCapabilityRecord(promise, constructor) {
11053 // To keep Promise hermetic, this doesn't look much like the spec.
11054 console.assert(IsConstructor(constructor));
11055 var promiseCapability = {};
11056 set_internal(promiseCapability, '[[Promise]]', promise);
11057 set_internal(promiseCapability, '[[Resolve]]', undefined);
11058 set_internal(promiseCapability, '[[Reject]]', undefined);
11059 var executor = GetCapabilitiesExecutor();
11060 set_internal(executor, '[[Capability]]', promiseCapability);
11061
11062 // NOTE: Differs from spec; object is constructed here
11063 var constructorResult = promise = new constructor(executor);
11064 set_internal(promiseCapability, '[[Promise]]', promise);
11065
11066 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
11067 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
11068 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
11069 return promiseCapability;
11070 }
11071
11072 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
11073
11074 function GetCapabilitiesExecutor() {
11075 var F = function(resolve, reject) {
11076 console.assert(F['[[Capability]]']);
11077 var promiseCapability = F['[[Capability]]'];
11078 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
11079 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
11080 set_internal(promiseCapability, '[[Resolve]]', resolve);
11081 set_internal(promiseCapability, '[[Reject]]', reject);
11082 return undefined;
11083 };
11084 return F;
11085 }
11086
11087 // 25.4.1.6 IsPromise ( x )
11088
11089 function IsPromise(x) {
11090 if (Type(x) !== 'object') return false;
11091 if (!('[[PromiseState]]' in x)) return false;
11092 if (x['[[PromiseState]]'] === undefined) return false;
11093 return true;
11094 }
11095
11096 // 25.4.1.7 RejectPromise ( promise, reason )
11097
11098 function RejectPromise(promise, reason) {
11099 console.assert(promise['[[PromiseState]]'] === 'pending');
11100 var reactions = promise['[[PromiseRejectReactions]]'];
11101 set_internal(promise, '[[PromiseResult]]', reason);
11102 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11103 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11104 set_internal(promise, '[[PromiseState]]', 'rejected');
11105 return TriggerPromiseReactions(reactions, reason);
11106 }
11107
11108 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
11109
11110 function TriggerPromiseReactions(reactions, argument) {
11111 for (var i = 0, len = reactions.length; i < len; ++i)
11112 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
11113 return undefined;
11114 }
11115
11116 // 25.4.2 Promise Jobs
11117
11118 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
11119
11120 function PromiseReactionJob(reaction, argument) {
11121 var promiseCapability = reaction['[[Capabilities]]'];
11122 var handler = reaction['[[Handler]]'];
11123 var handlerResult, status;
11124 try {
11125 if (handler === 'Identity') handlerResult = argument;
11126 else if (handler === 'Thrower') throw argument;
11127 else handlerResult = handler.call(undefined, argument);
11128 } catch (handlerResult) {
11129 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
11130 NextJob(status); return;
11131 }
11132 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
11133 NextJob(status);
11134 }
11135
11136 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
11137
11138 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
11139 // SPEC BUG: promise vs. promiseToResolve
11140 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
11141 try {
11142 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
11143 resolvingFunctions['[[Reject]]']);
11144 } catch (thenCallResult) {
11145 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
11146 NextJob(status); return;
11147 }
11148 NextJob(thenCallResult);
11149 }
11150
11151 // 25.4.3 The Promise Constructor
11152
11153 // 25.4.3.1 Promise ( executor )
11154
11155 function Promise(executor) {
11156 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
11157 Object.defineProperty(this, '[[PromiseState]]', config);
11158 Object.defineProperty(this, '[[PromiseConstructor]]', config);
11159 Object.defineProperty(this, '[[PromiseResult]]', config);
11160 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
11161 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
11162
11163 var promise = this;
11164 if (Type(promise) !== 'object') throw new TypeError();
11165 if (!('[[PromiseState]]' in promise)) throw TypeError();
11166 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
11167 if (!IsCallable(executor)) throw TypeError();
11168
11169 set_internal(promise, '[[PromiseConstructor]]', Promise);
11170
11171 return InitializePromise(promise, executor);
11172 }
11173
11174 // 25.4.3.1.1 InitializePromise ( promise, executor )
11175
11176 function InitializePromise(promise, executor) {
11177 console.assert('[[PromiseState]]' in promise);
11178 console.assert(IsCallable(executor));
11179 set_internal(promise, '[[PromiseState]]', 'pending');
11180 set_internal(promise, '[[PromiseFulfillReactions]]', []);
11181 set_internal(promise, '[[PromiseRejectReactions]]', []);
11182 var resolvingFunctions = CreateResolvingFunctions(promise);
11183 try {
11184 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
11185 resolvingFunctions['[[Reject]]']);
11186 } catch (completion) {
11187 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
11188 }
11189 return promise;
11190 }
11191
11192 // 25.4.4 Properties of the Promise Constructor
11193 // 25.4.4.1 Promise.all ( iterable )
11194
11195 define(Promise, 'all', function all(iterable) {
11196 var c = strict(this);
11197 var promiseCapability = NewPromiseCapability(c);
11198 try {
11199 var iterator = GetIterator(iterable);
11200 } catch (value) {
11201 promiseCapability['[[Reject]]'].call(undefined, value);
11202 return promiseCapability['[[Promise]]'];
11203 }
11204 var values = [];
11205 var remainingElementsCount = { value: 1 };
11206 var index = 0;
11207 while (true) {
11208 try {
11209 var next = IteratorStep(iterator);
11210 } catch (value) {
11211 promiseCapability['[[Reject]]'].call(undefined, value);
11212 return promiseCapability['[[Promise]]'];
11213 }
11214 if (!next) {
11215 remainingElementsCount.value -= 1;
11216 if (remainingElementsCount.value === 0) {
11217 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
11218
11219
11220 }
11221 return promiseCapability['[[Promise]]'];
11222 }
11223 try {
11224 var nextValue = IteratorValue(next);
11225 } catch (value) {
11226 promiseCapability['[[Reject]]'].call(undefined, value);
11227 return promiseCapability['[[Promise]]'];
11228 }
11229 try {
11230 var nextPromise = c.resolve(nextValue);
11231 } catch (value) {
11232 promiseCapability['[[Reject]]'].call(undefined, value);
11233 return promiseCapability['[[Promise]]'];
11234 }
11235 var resolveElement = PromiseAllResolveElementFunction();
11236 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
11237 set_internal(resolveElement, '[[Index]]', index);
11238 set_internal(resolveElement, '[[Values]]', values);
11239 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
11240 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
11241 remainingElementsCount.value += 1;
11242 try {
11243 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
11244 } catch (value) {
11245 promiseCapability['[[Reject]]'].call(undefined, value);
11246 return promiseCapability['[[Promise]]'];
11247 }
11248 index += 1;
11249 }
11250 });
11251
11252 // 25.4.4.1.1 Promise.all Resolve Element Functions
11253
11254 function PromiseAllResolveElementFunction() {
11255 var F = function(x) {
11256 var alreadyCalled = F['[[AlreadyCalled]]'];
11257 if (alreadyCalled.value) return undefined;
11258 alreadyCalled.value = true;
11259 var index = F['[[Index]]'];
11260 var values = F['[[Values]]'];
11261 var promiseCapability = F['[[Capabilities]]'];
11262 var remainingElementsCount = F['[[RemainingElements]]'];
11263 try {
11264 values[index] = x;
11265 } catch (result) {
11266 promiseCapability['[[Reject]]'].call(undefined, result);
11267 return promiseCapability['[[Promise]]'];
11268 }
11269 remainingElementsCount.value -= 1;
11270 if (remainingElementsCount.value === 0)
11271 return promiseCapability['[[Resolve]]'].call(undefined, values);
11272 return undefined;
11273 };
11274 return F;
11275 }
11276
11277 // 25.4.4.2 Promise.prototype
11278
11279 Promise.prototype = {};
11280
11281 // 25.4.4.3 Promise.race ( iterable )
11282
11283 define(Promise, 'race', function race(iterable) {
11284 var c = strict(this);
11285 var promiseCapability = NewPromiseCapability(c);
11286 try {
11287 var iterator = GetIterator(iterable);
11288 } catch (value) {
11289 promiseCapability['[[Reject]]'].call(undefined, value);
11290 return promiseCapability['[[Promise]]'];
11291 }
11292 while (true) {
11293 try {
11294 var next = IteratorStep(iterator);
11295 } catch (value) {
11296 promiseCapability['[[Reject]]'].call(undefined, value);
11297 return promiseCapability['[[Promise]]'];
11298 }
11299 if (!next) return promiseCapability['[[Promise]]'];
11300 try {
11301 var nextValue = IteratorValue(next);
11302 } catch (value) {
11303 promiseCapability['[[Reject]]'].call(undefined, value);
11304 return promiseCapability['[[Promise]]'];
11305 }
11306 try {
11307 var nextPromise = c.resolve(nextValue);
11308 } catch (value) {
11309 promiseCapability['[[Reject]]'].call(undefined, value);
11310 return promiseCapability['[[Promise]]'];
11311 }
11312 try {
11313 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
11314 } catch (value) {
11315 promiseCapability['[[Reject]]'].call(undefined, value);
11316 return promiseCapability['[[Promise]]'];
11317 }
11318 }
11319 });
11320
11321 // 25.4.4.4 Promise.reject ( r )
11322
11323 define(Promise, 'reject', function reject(r) {
11324 var c = strict(this);
11325 var promiseCapability = NewPromiseCapability(c);
11326 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
11327 return promiseCapability['[[Promise]]'];
11328 });
11329
11330 // 25.4.4.5 Promise.resolve ( x )
11331
11332 define(Promise, 'resolve', function resolve(x) {
11333 var c = strict(this);
11334 if (IsPromise(x)) {
11335 var constructor = x['[[PromiseConstructor]]'];
11336 if (SameValue(constructor, c)) return x;
11337 }
11338 var promiseCapability = NewPromiseCapability(c);
11339 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
11340 return promiseCapability['[[Promise]]'];
11341 });
11342
11343 // 25.4.4.6 Promise [ @@create ] ( )
11344 // 25.4.4.6.1 AllocatePromise ( constructor )
11345 // 25.4.5 Properties of the Promise Prototype Object
11346 // 25.4.5.1 Promise.prototype.catch ( onRejected )
11347
11348 define(Promise.prototype, 'catch', function catch_(onRejected) {
11349 var promise = this;
11350 return promise.then(undefined, onRejected);
11351 });
11352
11353 // 25.4.5.2 Promise.prototype.constructor
11354
11355 Promise.prototype.constructor = Promise;
11356
11357 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
11358
11359 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
11360 var promise = this;
11361 if (!IsPromise(promise)) throw TypeError();
11362 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
11363 if (!IsCallable(onRejected)) onRejected = 'Thrower';
11364 var c = promise.constructor;
11365 var promiseCapability = NewPromiseCapability(c);
11366 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
11367 '[[Handler]]': onFulfilled };
11368 var rejectReaction = { '[[Capabilities]]': promiseCapability,
11369 '[[Handler]]': onRejected };
11370 if (promise['[[PromiseState]]'] === 'pending') {
11371 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
11372 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
11373 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
11374 var value = promise['[[PromiseResult]]'];
11375 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
11376 } else if (promise['[[PromiseState]]'] === 'rejected') {
11377 var reason = promise['[[PromiseResult]]'];
11378 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
11379 }
11380 return promiseCapability['[[Promise]]'];
11381 });
11382
11383 // 25.4.6 Properties of Promise Instances
11384
11385 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11386 global.Promise = Promise;
11387
11388 // Patch early Promise.cast vs. Promise.resolve implementations
11389 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
11390 }());
11391
11392 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
11393 define(Promise.prototype, $$toStringTag, 'Promise');
11394
11395 // ---------------------------------------
11396 // 26 Reflection
11397 // ---------------------------------------
11398
11399 (function() {
11400 // 26.1 The Reflect Object
11401 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11402 global.Reflect = {};
11403
11404 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
11405 define(
11406 Reflect, 'apply',
11407 function apply(target, thisArgument, argumentsList) {
11408 if (!IsCallable(target)) throw TypeError();
11409 return Function.prototype.apply.call(target, thisArgument, argumentsList);
11410 });
11411
11412 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
11413 define(
11414 Reflect, 'construct',
11415 function construct(target, argumentsList) {
11416 return __cons(target, argumentsList);
11417 });
11418
11419 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
11420 define(
11421 Reflect, 'defineProperty',
11422 function defineProperty(target, propertyKey, attributes) {
11423 try {
11424 Object.defineProperty(target, propertyKey, attributes);
11425 return true;
11426 } catch (_) {
11427 return false;
11428 }
11429 });
11430
11431 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
11432 define(
11433 Reflect, 'deleteProperty',
11434 function deleteProperty(target,name) {
11435 try {
11436 delete target[name];
11437 return !HasOwnProperty(target, name);
11438 } catch (_) {
11439 return false;
11440 }
11441 });
11442
11443 // 26.1.5 Reflect.enumerate ( target )
11444 define(
11445 Reflect, 'enumerate',
11446 function enumerate(target) {
11447 target = ToObject(target);
11448 var iterator = Enumerate(target);
11449 return iterator;
11450 });
11451
11452 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
11453 define(
11454 Reflect, 'get',
11455 function get(target, name, receiver) {
11456 target = ToObject(target);
11457 name = String(name);
11458 receiver = (receiver === undefined) ? target : ToObject(receiver);
11459 var desc = getPropertyDescriptor(target, name);
11460 if (desc && 'get' in desc)
11461 return Function.prototype.call.call(desc['get'], receiver);
11462 return target[name];
11463 });
11464
11465 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
11466 define(
11467 Reflect, 'getOwnPropertyDescriptor',
11468 Object.getOwnPropertyDescriptor);
11469
11470 // 26.1.8 Reflect.getPrototypeOf ( target )
11471 define(
11472 Reflect, 'getPrototypeOf',
11473 Object.getPrototypeOf);
11474
11475 // 26.1.9 Reflect.has ( target, propertyKey )
11476 define(
11477 Reflect, 'has',
11478 function has(target,name) {
11479 return String(name) in ToObject(target);
11480 });
11481
11482 // 26.1.10 Reflect.isExtensible (target)
11483 define(
11484 Reflect, 'isExtensible',
11485 Object.isExtensible);
11486
11487 // 26.1.11 Reflect.ownKeys ( target )
11488 define(
11489 Reflect, 'ownKeys',
11490 function ownKeys(target) {
11491 var obj = ToObject(target);
11492 return Object.getOwnPropertyNames(obj);
11493 });
11494
11495 // 26.1.12 Reflect.preventExtensions ( target )
11496 define(
11497 Reflect, 'preventExtensions',
11498 function preventExtensions(target) {
11499 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
11500 });
11501
11502 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
11503 define(
11504 Reflect, 'set',
11505 function set(target, name, value, receiver) {
11506 target = ToObject(target);
11507 name = String(name);
11508 receiver = (receiver === undefined) ? target : ToObject(receiver);
11509 var desc = getPropertyDescriptor(target, name);
11510 try {
11511 if (desc && 'set' in desc)
11512 Function.prototype.call.call(desc['set'], receiver, value);
11513 else
11514 target[name] = value;
11515 return true;
11516 } catch (_) {
11517 return false;
11518 }
11519 });
11520
11521 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
11522 define(
11523 Reflect, 'setPrototypeOf',
11524 function setPrototypeOf(target, proto) {
11525 try {
11526 target.__proto__ = proto;
11527 return Reflect.getPrototypeOf(target) === proto;
11528 } catch(_) {
11529 return false;
11530 }
11531 });
11532
11533 }());
11534
11535 // ---------------------------------------
11536 // 26.2 Proxy Objects
11537 // ---------------------------------------
11538
11539 // Not polyfillable.
11540
11541 }(self));
11542
11543 // This helper is defined outside the main scope so that the use of
11544 // 'eval' does not taint the scope for minifiers.
11545 function __cons(t, a) {
11546 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
11547 }
11548 </script>
11549 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.foo = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
11550 'use strict'
11551
11552 exports.byteLength = byteLength
11553 exports.toByteArray = toByteArray
11554 exports.fromByteArray = fromByteArray
11555
11556 var lookup = []
11557 var revLookup = []
11558 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
11559
11560 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
11561 for (var i = 0, len = code.length; i < len; ++i) {
11562 lookup[i] = code[i]
11563 revLookup[code.charCodeAt(i)] = i
11564 }
11565
11566 revLookup['-'.charCodeAt(0)] = 62
11567 revLookup['_'.charCodeAt(0)] = 63
11568
11569 function placeHoldersCount (b64) {
11570 var len = b64.length
11571 if (len % 4 > 0) {
11572 throw new Error('Invalid string. Length must be a multiple of 4')
11573 }
11574
11575 // the number of equal signs (place holders)
11576 // if there are two placeholders, than the two characters before it
11577 // represent one byte
11578 // if there is only one, then the three characters before it represent 2 bytes
11579 // this is just a cheap hack to not do indexOf twice
11580 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
11581 }
11582
11583 function byteLength (b64) {
11584 // base64 is 4/3 + up to two characters of the original data
11585 return b64.length * 3 / 4 - placeHoldersCount(b64)
11586 }
11587
11588 function toByteArray (b64) {
11589 var i, j, l, tmp, placeHolders, arr
11590 var len = b64.length
11591 placeHolders = placeHoldersCount(b64)
11592
11593 arr = new Arr(len * 3 / 4 - placeHolders)
11594
11595 // if there are placeholders, only get up to the last complete 4 chars
11596 l = placeHolders > 0 ? len - 4 : len
11597
11598 var L = 0
11599
11600 for (i = 0, j = 0; i < l; i += 4, j += 3) {
11601 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
11602 arr[L++] = (tmp >> 16) & 0xFF
11603 arr[L++] = (tmp >> 8) & 0xFF
11604 arr[L++] = tmp & 0xFF
11605 }
11606
11607 if (placeHolders === 2) {
11608 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
11609 arr[L++] = tmp & 0xFF
11610 } else if (placeHolders === 1) {
11611 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
11612 arr[L++] = (tmp >> 8) & 0xFF
11613 arr[L++] = tmp & 0xFF
11614 }
11615
11616 return arr
11617 }
11618
11619 function tripletToBase64 (num) {
11620 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
11621 }
11622
11623 function encodeChunk (uint8, start, end) {
11624 var tmp
11625 var output = []
11626 for (var i = start; i < end; i += 3) {
11627 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
11628 output.push(tripletToBase64(tmp))
11629 }
11630 return output.join('')
11631 }
11632
11633 function fromByteArray (uint8) {
11634 var tmp
11635 var len = uint8.length
11636 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
11637 var output = ''
11638 var parts = []
11639 var maxChunkLength = 16383 // must be multiple of 3
11640
11641 // go through the array every three bytes, we'll deal with trailing stuff later
11642 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
11643 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
11644 }
11645
11646 // pad the end with zeros, but make sure to not forget the extra bytes
11647 if (extraBytes === 1) {
11648 tmp = uint8[len - 1]
11649 output += lookup[tmp >> 2]
11650 output += lookup[(tmp << 4) & 0x3F]
11651 output += '=='
11652 } else if (extraBytes === 2) {
11653 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
11654 output += lookup[tmp >> 10]
11655 output += lookup[(tmp >> 4) & 0x3F]
11656 output += lookup[(tmp << 2) & 0x3F]
11657 output += '='
11658 }
11659
11660 parts.push(output)
11661
11662 return parts.join('')
11663 }
11664
11665 },{}],2:[function(require,module,exports){
11666 /*!
11667 * The buffer module from node.js, for the browser.
11668 *
11669 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
11670 * @license MIT
11671 */
11672 /* eslint-disable no-proto */
11673
11674 'use strict'
11675
11676 var base64 = require('base64-js')
11677 var ieee754 = require('ieee754')
11678
11679 exports.Buffer = Buffer
11680 exports.SlowBuffer = SlowBuffer
11681 exports.INSPECT_MAX_BYTES = 50
11682
11683 var K_MAX_LENGTH = 0x7fffffff
11684 exports.kMaxLength = K_MAX_LENGTH
11685
11686 /**
11687 * If `Buffer.TYPED_ARRAY_SUPPORT`:
11688 * === true Use Uint8Array implementation (fastest)
11689 * === false Print warning and recommend using `buffer` v4.x which has an Object
11690 * implementation (most compatible, even IE6)
11691 *
11692 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
11693 * Opera 11.6+, iOS 4.2+.
11694 *
11695 * We report that the browser does not support typed arrays if the are not subclassable
11696 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
11697 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
11698 * for __proto__ and has a buggy typed array implementation.
11699 */
11700 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
11701
11702 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
11703 typeof console.error === 'function') {
11704 console.error(
11705 'This browser lacks typed array (Uint8Array) support which is required by ' +
11706 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
11707 )
11708 }
11709
11710 function typedArraySupport () {
11711 // Can typed array instances can be augmented?
11712 try {
11713 var arr = new Uint8Array(1)
11714 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
11715 return arr.foo() === 42
11716 } catch (e) {
11717 return false
11718 }
11719 }
11720
11721 function createBuffer (length) {
11722 if (length > K_MAX_LENGTH) {
11723 throw new RangeError('Invalid typed array length')
11724 }
11725 // Return an augmented `Uint8Array` instance
11726 var buf = new Uint8Array(length)
11727 buf.__proto__ = Buffer.prototype
11728 return buf
11729 }
11730
11731 /**
11732 * The Buffer constructor returns instances of `Uint8Array` that have their
11733 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
11734 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
11735 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
11736 * returns a single octet.
11737 *
11738 * The `Uint8Array` prototype remains unmodified.
11739 */
11740
11741 function Buffer (arg, encodingOrOffset, length) {
11742 // Common case.
11743 if (typeof arg === 'number') {
11744 if (typeof encodingOrOffset === 'string') {
11745 throw new Error(
11746 'If encoding is specified then the first argument must be a string'
11747 )
11748 }
11749 return allocUnsafe(arg)
11750 }
11751 return from(arg, encodingOrOffset, length)
11752 }
11753
11754 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
11755 if (typeof Symbol !== 'undefined' && Symbol.species &&
11756 Buffer[Symbol.species] === Buffer) {
11757 Object.defineProperty(Buffer, Symbol.species, {
11758 value: null,
11759 configurable: true,
11760 enumerable: false,
11761 writable: false
11762 })
11763 }
11764
11765 Buffer.poolSize = 8192 // not used by this implementation
11766
11767 function from (value, encodingOrOffset, length) {
11768 if (typeof value === 'number') {
11769 throw new TypeError('"value" argument must not be a number')
11770 }
11771
11772 if (value instanceof ArrayBuffer) {
11773 return fromArrayBuffer(value, encodingOrOffset, length)
11774 }
11775
11776 if (typeof value === 'string') {
11777 return fromString(value, encodingOrOffset)
11778 }
11779
11780 return fromObject(value)
11781 }
11782
11783 /**
11784 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
11785 * if value is a number.
11786 * Buffer.from(str[, encoding])
11787 * Buffer.from(array)
11788 * Buffer.from(buffer)
11789 * Buffer.from(arrayBuffer[, byteOffset[, length]])
11790 **/
11791 Buffer.from = function (value, encodingOrOffset, length) {
11792 return from(value, encodingOrOffset, length)
11793 }
11794
11795 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
11796 // https://github.com/feross/buffer/pull/148
11797 Buffer.prototype.__proto__ = Uint8Array.prototype
11798 Buffer.__proto__ = Uint8Array
11799
11800 function assertSize (size) {
11801 if (typeof size !== 'number') {
11802 throw new TypeError('"size" argument must be a number')
11803 } else if (size < 0) {
11804 throw new RangeError('"size" argument must not be negative')
11805 }
11806 }
11807
11808 function alloc (size, fill, encoding) {
11809 assertSize(size)
11810 if (size <= 0) {
11811 return createBuffer(size)
11812 }
11813 if (fill !== undefined) {
11814 // Only pay attention to encoding if it's a string. This
11815 // prevents accidentally sending in a number that would
11816 // be interpretted as a start offset.
11817 return typeof encoding === 'string'
11818 ? createBuffer(size).fill(fill, encoding)
11819 : createBuffer(size).fill(fill)
11820 }
11821 return createBuffer(size)
11822 }
11823
11824 /**
11825 * Creates a new filled Buffer instance.
11826 * alloc(size[, fill[, encoding]])
11827 **/
11828 Buffer.alloc = function (size, fill, encoding) {
11829 return alloc(size, fill, encoding)
11830 }
11831
11832 function allocUnsafe (size) {
11833 assertSize(size)
11834 return createBuffer(size < 0 ? 0 : checked(size) | 0)
11835 }
11836
11837 /**
11838 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
11839 * */
11840 Buffer.allocUnsafe = function (size) {
11841 return allocUnsafe(size)
11842 }
11843 /**
11844 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
11845 */
11846 Buffer.allocUnsafeSlow = function (size) {
11847 return allocUnsafe(size)
11848 }
11849
11850 function fromString (string, encoding) {
11851 if (typeof encoding !== 'string' || encoding === '') {
11852 encoding = 'utf8'
11853 }
11854
11855 if (!Buffer.isEncoding(encoding)) {
11856 throw new TypeError('"encoding" must be a valid string encoding')
11857 }
11858
11859 var length = byteLength(string, encoding) | 0
11860 var buf = createBuffer(length)
11861
11862 var actual = buf.write(string, encoding)
11863
11864 if (actual !== length) {
11865 // Writing a hex string, for example, that contains invalid characters will
11866 // cause everything after the first invalid character to be ignored. (e.g.
11867 // 'abxxcd' will be treated as 'ab')
11868 buf = buf.slice(0, actual)
11869 }
11870
11871 return buf
11872 }
11873
11874 function fromArrayLike (array) {
11875 var length = array.length < 0 ? 0 : checked(array.length) | 0
11876 var buf = createBuffer(length)
11877 for (var i = 0; i < length; i += 1) {
11878 buf[i] = array[i] & 255
11879 }
11880 return buf
11881 }
11882
11883 function fromArrayBuffer (array, byteOffset, length) {
11884 if (byteOffset < 0 || array.byteLength < byteOffset) {
11885 throw new RangeError('\'offset\' is out of bounds')
11886 }
11887
11888 if (array.byteLength < byteOffset + (length || 0)) {
11889 throw new RangeError('\'length\' is out of bounds')
11890 }
11891
11892 var buf
11893 if (byteOffset === undefined && length === undefined) {
11894 buf = new Uint8Array(array)
11895 } else if (length === undefined) {
11896 buf = new Uint8Array(array, byteOffset)
11897 } else {
11898 buf = new Uint8Array(array, byteOffset, length)
11899 }
11900
11901 // Return an augmented `Uint8Array` instance
11902 buf.__proto__ = Buffer.prototype
11903 return buf
11904 }
11905
11906 function fromObject (obj) {
11907 if (Buffer.isBuffer(obj)) {
11908 var len = checked(obj.length) | 0
11909 var buf = createBuffer(len)
11910
11911 if (buf.length === 0) {
11912 return buf
11913 }
11914
11915 obj.copy(buf, 0, 0, len)
11916 return buf
11917 }
11918
11919 if (obj) {
11920 if (isArrayBufferView(obj) || 'length' in obj) {
11921 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
11922 return createBuffer(0)
11923 }
11924 return fromArrayLike(obj)
11925 }
11926
11927 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
11928 return fromArrayLike(obj.data)
11929 }
11930 }
11931
11932 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
11933 }
11934
11935 function checked (length) {
11936 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
11937 // length is NaN (which is otherwise coerced to zero.)
11938 if (length >= K_MAX_LENGTH) {
11939 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
11940 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
11941 }
11942 return length | 0
11943 }
11944
11945 function SlowBuffer (length) {
11946 if (+length != length) { // eslint-disable-line eqeqeq
11947 length = 0
11948 }
11949 return Buffer.alloc(+length)
11950 }
11951
11952 Buffer.isBuffer = function isBuffer (b) {
11953 return b != null && b._isBuffer === true
11954 }
11955
11956 Buffer.compare = function compare (a, b) {
11957 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
11958 throw new TypeError('Arguments must be Buffers')
11959 }
11960
11961 if (a === b) return 0
11962
11963 var x = a.length
11964 var y = b.length
11965
11966 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
11967 if (a[i] !== b[i]) {
11968 x = a[i]
11969 y = b[i]
11970 break
11971 }
11972 }
11973
11974 if (x < y) return -1
11975 if (y < x) return 1
11976 return 0
11977 }
11978
11979 Buffer.isEncoding = function isEncoding (encoding) {
11980 switch (String(encoding).toLowerCase()) {
11981 case 'hex':
11982 case 'utf8':
11983 case 'utf-8':
11984 case 'ascii':
11985 case 'latin1':
11986 case 'binary':
11987 case 'base64':
11988 case 'ucs2':
11989 case 'ucs-2':
11990 case 'utf16le':
11991 case 'utf-16le':
11992 return true
11993 default:
11994 return false
11995 }
11996 }
11997
11998 Buffer.concat = function concat (list, length) {
11999 if (!Array.isArray(list)) {
12000 throw new TypeError('"list" argument must be an Array of Buffers')
12001 }
12002
12003 if (list.length === 0) {
12004 return Buffer.alloc(0)
12005 }
12006
12007 var i
12008 if (length === undefined) {
12009 length = 0
12010 for (i = 0; i < list.length; ++i) {
12011 length += list[i].length
12012 }
12013 }
12014
12015 var buffer = Buffer.allocUnsafe(length)
12016 var pos = 0
12017 for (i = 0; i < list.length; ++i) {
12018 var buf = list[i]
12019 if (!Buffer.isBuffer(buf)) {
12020 throw new TypeError('"list" argument must be an Array of Buffers')
12021 }
12022 buf.copy(buffer, pos)
12023 pos += buf.length
12024 }
12025 return buffer
12026 }
12027
12028 function byteLength (string, encoding) {
12029 if (Buffer.isBuffer(string)) {
12030 return string.length
12031 }
12032 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
12033 return string.byteLength
12034 }
12035 if (typeof string !== 'string') {
12036 string = '' + string
12037 }
12038
12039 var len = string.length
12040 if (len === 0) return 0
12041
12042 // Use a for loop to avoid recursion
12043 var loweredCase = false
12044 for (;;) {
12045 switch (encoding) {
12046 case 'ascii':
12047 case 'latin1':
12048 case 'binary':
12049 return len
12050 case 'utf8':
12051 case 'utf-8':
12052 case undefined:
12053 return utf8ToBytes(string).length
12054 case 'ucs2':
12055 case 'ucs-2':
12056 case 'utf16le':
12057 case 'utf-16le':
12058 return len * 2
12059 case 'hex':
12060 return len >>> 1
12061 case 'base64':
12062 return base64ToBytes(string).length
12063 default:
12064 if (loweredCase) return utf8ToBytes(string).length // assume utf8
12065 encoding = ('' + encoding).toLowerCase()
12066 loweredCase = true
12067 }
12068 }
12069 }
12070 Buffer.byteLength = byteLength
12071
12072 function slowToString (encoding, start, end) {
12073 var loweredCase = false
12074
12075 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
12076 // property of a typed array.
12077
12078 // This behaves neither like String nor Uint8Array in that we set start/end
12079 // to their upper/lower bounds if the value passed is out of range.
12080 // undefined is handled specially as per ECMA-262 6th Edition,
12081 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
12082 if (start === undefined || start < 0) {
12083 start = 0
12084 }
12085 // Return early if start > this.length. Done here to prevent potential uint32
12086 // coercion fail below.
12087 if (start > this.length) {
12088 return ''
12089 }
12090
12091 if (end === undefined || end > this.length) {
12092 end = this.length
12093 }
12094
12095 if (end <= 0) {
12096 return ''
12097 }
12098
12099 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
12100 end >>>= 0
12101 start >>>= 0
12102
12103 if (end <= start) {
12104 return ''
12105 }
12106
12107 if (!encoding) encoding = 'utf8'
12108
12109 while (true) {
12110 switch (encoding) {
12111 case 'hex':
12112 return hexSlice(this, start, end)
12113
12114 case 'utf8':
12115 case 'utf-8':
12116 return utf8Slice(this, start, end)
12117
12118 case 'ascii':
12119 return asciiSlice(this, start, end)
12120
12121 case 'latin1':
12122 case 'binary':
12123 return latin1Slice(this, start, end)
12124
12125 case 'base64':
12126 return base64Slice(this, start, end)
12127
12128 case 'ucs2':
12129 case 'ucs-2':
12130 case 'utf16le':
12131 case 'utf-16le':
12132 return utf16leSlice(this, start, end)
12133
12134 default:
12135 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12136 encoding = (encoding + '').toLowerCase()
12137 loweredCase = true
12138 }
12139 }
12140 }
12141
12142 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
12143 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
12144 // reliably in a browserify context because there could be multiple different
12145 // copies of the 'buffer' package in use. This method works even for Buffer
12146 // instances that were created from another copy of the `buffer` package.
12147 // See: https://github.com/feross/buffer/issues/154
12148 Buffer.prototype._isBuffer = true
12149
12150 function swap (b, n, m) {
12151 var i = b[n]
12152 b[n] = b[m]
12153 b[m] = i
12154 }
12155
12156 Buffer.prototype.swap16 = function swap16 () {
12157 var len = this.length
12158 if (len % 2 !== 0) {
12159 throw new RangeError('Buffer size must be a multiple of 16-bits')
12160 }
12161 for (var i = 0; i < len; i += 2) {
12162 swap(this, i, i + 1)
12163 }
12164 return this
12165 }
12166
12167 Buffer.prototype.swap32 = function swap32 () {
12168 var len = this.length
12169 if (len % 4 !== 0) {
12170 throw new RangeError('Buffer size must be a multiple of 32-bits')
12171 }
12172 for (var i = 0; i < len; i += 4) {
12173 swap(this, i, i + 3)
12174 swap(this, i + 1, i + 2)
12175 }
12176 return this
12177 }
12178
12179 Buffer.prototype.swap64 = function swap64 () {
12180 var len = this.length
12181 if (len % 8 !== 0) {
12182 throw new RangeError('Buffer size must be a multiple of 64-bits')
12183 }
12184 for (var i = 0; i < len; i += 8) {
12185 swap(this, i, i + 7)
12186 swap(this, i + 1, i + 6)
12187 swap(this, i + 2, i + 5)
12188 swap(this, i + 3, i + 4)
12189 }
12190 return this
12191 }
12192
12193 Buffer.prototype.toString = function toString () {
12194 var length = this.length
12195 if (length === 0) return ''
12196 if (arguments.length === 0) return utf8Slice(this, 0, length)
12197 return slowToString.apply(this, arguments)
12198 }
12199
12200 Buffer.prototype.equals = function equals (b) {
12201 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
12202 if (this === b) return true
12203 return Buffer.compare(this, b) === 0
12204 }
12205
12206 Buffer.prototype.inspect = function inspect () {
12207 var str = ''
12208 var max = exports.INSPECT_MAX_BYTES
12209 if (this.length > 0) {
12210 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
12211 if (this.length > max) str += ' ... '
12212 }
12213 return '<Buffer ' + str + '>'
12214 }
12215
12216 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
12217 if (!Buffer.isBuffer(target)) {
12218 throw new TypeError('Argument must be a Buffer')
12219 }
12220
12221 if (start === undefined) {
12222 start = 0
12223 }
12224 if (end === undefined) {
12225 end = target ? target.length : 0
12226 }
12227 if (thisStart === undefined) {
12228 thisStart = 0
12229 }
12230 if (thisEnd === undefined) {
12231 thisEnd = this.length
12232 }
12233
12234 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
12235 throw new RangeError('out of range index')
12236 }
12237
12238 if (thisStart >= thisEnd && start >= end) {
12239 return 0
12240 }
12241 if (thisStart >= thisEnd) {
12242 return -1
12243 }
12244 if (start >= end) {
12245 return 1
12246 }
12247
12248 start >>>= 0
12249 end >>>= 0
12250 thisStart >>>= 0
12251 thisEnd >>>= 0
12252
12253 if (this === target) return 0
12254
12255 var x = thisEnd - thisStart
12256 var y = end - start
12257 var len = Math.min(x, y)
12258
12259 var thisCopy = this.slice(thisStart, thisEnd)
12260 var targetCopy = target.slice(start, end)
12261
12262 for (var i = 0; i < len; ++i) {
12263 if (thisCopy[i] !== targetCopy[i]) {
12264 x = thisCopy[i]
12265 y = targetCopy[i]
12266 break
12267 }
12268 }
12269
12270 if (x < y) return -1
12271 if (y < x) return 1
12272 return 0
12273 }
12274
12275 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
12276 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
12277 //
12278 // Arguments:
12279 // - buffer - a Buffer to search
12280 // - val - a string, Buffer, or number
12281 // - byteOffset - an index into `buffer`; will be clamped to an int32
12282 // - encoding - an optional encoding, relevant is val is a string
12283 // - dir - true for indexOf, false for lastIndexOf
12284 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
12285 // Empty buffer means no match
12286 if (buffer.length === 0) return -1
12287
12288 // Normalize byteOffset
12289 if (typeof byteOffset === 'string') {
12290 encoding = byteOffset
12291 byteOffset = 0
12292 } else if (byteOffset > 0x7fffffff) {
12293 byteOffset = 0x7fffffff
12294 } else if (byteOffset < -0x80000000) {
12295 byteOffset = -0x80000000
12296 }
12297 byteOffset = +byteOffset // Coerce to Number.
12298 if (numberIsNaN(byteOffset)) {
12299 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
12300 byteOffset = dir ? 0 : (buffer.length - 1)
12301 }
12302
12303 // Normalize byteOffset: negative offsets start from the end of the buffer
12304 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
12305 if (byteOffset >= buffer.length) {
12306 if (dir) return -1
12307 else byteOffset = buffer.length - 1
12308 } else if (byteOffset < 0) {
12309 if (dir) byteOffset = 0
12310 else return -1
12311 }
12312
12313 // Normalize val
12314 if (typeof val === 'string') {
12315 val = Buffer.from(val, encoding)
12316 }
12317
12318 // Finally, search either indexOf (if dir is true) or lastIndexOf
12319 if (Buffer.isBuffer(val)) {
12320 // Special case: looking for empty string/buffer always fails
12321 if (val.length === 0) {
12322 return -1
12323 }
12324 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
12325 } else if (typeof val === 'number') {
12326 val = val & 0xFF // Search for a byte value [0-255]
12327 if (typeof Uint8Array.prototype.indexOf === 'function') {
12328 if (dir) {
12329 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
12330 } else {
12331 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
12332 }
12333 }
12334 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
12335 }
12336
12337 throw new TypeError('val must be string, number or Buffer')
12338 }
12339
12340 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
12341 var indexSize = 1
12342 var arrLength = arr.length
12343 var valLength = val.length
12344
12345 if (encoding !== undefined) {
12346 encoding = String(encoding).toLowerCase()
12347 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
12348 encoding === 'utf16le' || encoding === 'utf-16le') {
12349 if (arr.length < 2 || val.length < 2) {
12350 return -1
12351 }
12352 indexSize = 2
12353 arrLength /= 2
12354 valLength /= 2
12355 byteOffset /= 2
12356 }
12357 }
12358
12359 function read (buf, i) {
12360 if (indexSize === 1) {
12361 return buf[i]
12362 } else {
12363 return buf.readUInt16BE(i * indexSize)
12364 }
12365 }
12366
12367 var i
12368 if (dir) {
12369 var foundIndex = -1
12370 for (i = byteOffset; i < arrLength; i++) {
12371 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
12372 if (foundIndex === -1) foundIndex = i
12373 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
12374 } else {
12375 if (foundIndex !== -1) i -= i - foundIndex
12376 foundIndex = -1
12377 }
12378 }
12379 } else {
12380 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
12381 for (i = byteOffset; i >= 0; i--) {
12382 var found = true
12383 for (var j = 0; j < valLength; j++) {
12384 if (read(arr, i + j) !== read(val, j)) {
12385 found = false
12386 break
12387 }
12388 }
12389 if (found) return i
12390 }
12391 }
12392
12393 return -1
12394 }
12395
12396 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
12397 return this.indexOf(val, byteOffset, encoding) !== -1
12398 }
12399
12400 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
12401 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
12402 }
12403
12404 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
12405 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
12406 }
12407
12408 function hexWrite (buf, string, offset, length) {
12409 offset = Number(offset) || 0
12410 var remaining = buf.length - offset
12411 if (!length) {
12412 length = remaining
12413 } else {
12414 length = Number(length)
12415 if (length > remaining) {
12416 length = remaining
12417 }
12418 }
12419
12420 // must be an even number of digits
12421 var strLen = string.length
12422 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
12423
12424 if (length > strLen / 2) {
12425 length = strLen / 2
12426 }
12427 for (var i = 0; i < length; ++i) {
12428 var parsed = parseInt(string.substr(i * 2, 2), 16)
12429 if (numberIsNaN(parsed)) return i
12430 buf[offset + i] = parsed
12431 }
12432 return i
12433 }
12434
12435 function utf8Write (buf, string, offset, length) {
12436 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
12437 }
12438
12439 function asciiWrite (buf, string, offset, length) {
12440 return blitBuffer(asciiToBytes(string), buf, offset, length)
12441 }
12442
12443 function latin1Write (buf, string, offset, length) {
12444 return asciiWrite(buf, string, offset, length)
12445 }
12446
12447 function base64Write (buf, string, offset, length) {
12448 return blitBuffer(base64ToBytes(string), buf, offset, length)
12449 }
12450
12451 function ucs2Write (buf, string, offset, length) {
12452 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
12453 }
12454
12455 Buffer.prototype.write = function write (string, offset, length, encoding) {
12456 // Buffer#write(string)
12457 if (offset === undefined) {
12458 encoding = 'utf8'
12459 length = this.length
12460 offset = 0
12461 // Buffer#write(string, encoding)
12462 } else if (length === undefined && typeof offset === 'string') {
12463 encoding = offset
12464 length = this.length
12465 offset = 0
12466 // Buffer#write(string, offset[, length][, encoding])
12467 } else if (isFinite(offset)) {
12468 offset = offset >>> 0
12469 if (isFinite(length)) {
12470 length = length >>> 0
12471 if (encoding === undefined) encoding = 'utf8'
12472 } else {
12473 encoding = length
12474 length = undefined
12475 }
12476 } else {
12477 throw new Error(
12478 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
12479 )
12480 }
12481
12482 var remaining = this.length - offset
12483 if (length === undefined || length > remaining) length = remaining
12484
12485 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
12486 throw new RangeError('Attempt to write outside buffer bounds')
12487 }
12488
12489 if (!encoding) encoding = 'utf8'
12490
12491 var loweredCase = false
12492 for (;;) {
12493 switch (encoding) {
12494 case 'hex':
12495 return hexWrite(this, string, offset, length)
12496
12497 case 'utf8':
12498 case 'utf-8':
12499 return utf8Write(this, string, offset, length)
12500
12501 case 'ascii':
12502 return asciiWrite(this, string, offset, length)
12503
12504 case 'latin1':
12505 case 'binary':
12506 return latin1Write(this, string, offset, length)
12507
12508 case 'base64':
12509 // Warning: maxLength not taken into account in base64Write
12510 return base64Write(this, string, offset, length)
12511
12512 case 'ucs2':
12513 case 'ucs-2':
12514 case 'utf16le':
12515 case 'utf-16le':
12516 return ucs2Write(this, string, offset, length)
12517
12518 default:
12519 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12520 encoding = ('' + encoding).toLowerCase()
12521 loweredCase = true
12522 }
12523 }
12524 }
12525
12526 Buffer.prototype.toJSON = function toJSON () {
12527 return {
12528 type: 'Buffer',
12529 data: Array.prototype.slice.call(this._arr || this, 0)
12530 }
12531 }
12532
12533 function base64Slice (buf, start, end) {
12534 if (start === 0 && end === buf.length) {
12535 return base64.fromByteArray(buf)
12536 } else {
12537 return base64.fromByteArray(buf.slice(start, end))
12538 }
12539 }
12540
12541 function utf8Slice (buf, start, end) {
12542 end = Math.min(buf.length, end)
12543 var res = []
12544
12545 var i = start
12546 while (i < end) {
12547 var firstByte = buf[i]
12548 var codePoint = null
12549 var bytesPerSequence = (firstByte > 0xEF) ? 4
12550 : (firstByte > 0xDF) ? 3
12551 : (firstByte > 0xBF) ? 2
12552 : 1
12553
12554 if (i + bytesPerSequence <= end) {
12555 var secondByte, thirdByte, fourthByte, tempCodePoint
12556
12557 switch (bytesPerSequence) {
12558 case 1:
12559 if (firstByte < 0x80) {
12560 codePoint = firstByte
12561 }
12562 break
12563 case 2:
12564 secondByte = buf[i + 1]
12565 if ((secondByte & 0xC0) === 0x80) {
12566 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
12567 if (tempCodePoint > 0x7F) {
12568 codePoint = tempCodePoint
12569 }
12570 }
12571 break
12572 case 3:
12573 secondByte = buf[i + 1]
12574 thirdByte = buf[i + 2]
12575 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
12576 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
12577 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
12578 codePoint = tempCodePoint
12579 }
12580 }
12581 break
12582 case 4:
12583 secondByte = buf[i + 1]
12584 thirdByte = buf[i + 2]
12585 fourthByte = buf[i + 3]
12586 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
12587 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
12588 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
12589 codePoint = tempCodePoint
12590 }
12591 }
12592 }
12593 }
12594
12595 if (codePoint === null) {
12596 // we did not generate a valid codePoint so insert a
12597 // replacement char (U+FFFD) and advance only 1 byte
12598 codePoint = 0xFFFD
12599 bytesPerSequence = 1
12600 } else if (codePoint > 0xFFFF) {
12601 // encode to utf16 (surrogate pair dance)
12602 codePoint -= 0x10000
12603 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
12604 codePoint = 0xDC00 | codePoint & 0x3FF
12605 }
12606
12607 res.push(codePoint)
12608 i += bytesPerSequence
12609 }
12610
12611 return decodeCodePointsArray(res)
12612 }
12613
12614 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
12615 // the lowest limit is Chrome, with 0x10000 args.
12616 // We go 1 magnitude less, for safety
12617 var MAX_ARGUMENTS_LENGTH = 0x1000
12618
12619 function decodeCodePointsArray (codePoints) {
12620 var len = codePoints.length
12621 if (len <= MAX_ARGUMENTS_LENGTH) {
12622 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
12623 }
12624
12625 // Decode in chunks to avoid "call stack size exceeded".
12626 var res = ''
12627 var i = 0
12628 while (i < len) {
12629 res += String.fromCharCode.apply(
12630 String,
12631 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
12632 )
12633 }
12634 return res
12635 }
12636
12637 function asciiSlice (buf, start, end) {
12638 var ret = ''
12639 end = Math.min(buf.length, end)
12640
12641 for (var i = start; i < end; ++i) {
12642 ret += String.fromCharCode(buf[i] & 0x7F)
12643 }
12644 return ret
12645 }
12646
12647 function latin1Slice (buf, start, end) {
12648 var ret = ''
12649 end = Math.min(buf.length, end)
12650
12651 for (var i = start; i < end; ++i) {
12652 ret += String.fromCharCode(buf[i])
12653 }
12654 return ret
12655 }
12656
12657 function hexSlice (buf, start, end) {
12658 var len = buf.length
12659
12660 if (!start || start < 0) start = 0
12661 if (!end || end < 0 || end > len) end = len
12662
12663 var out = ''
12664 for (var i = start; i < end; ++i) {
12665 out += toHex(buf[i])
12666 }
12667 return out
12668 }
12669
12670 function utf16leSlice (buf, start, end) {
12671 var bytes = buf.slice(start, end)
12672 var res = ''
12673 for (var i = 0; i < bytes.length; i += 2) {
12674 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
12675 }
12676 return res
12677 }
12678
12679 Buffer.prototype.slice = function slice (start, end) {
12680 var len = this.length
12681 start = ~~start
12682 end = end === undefined ? len : ~~end
12683
12684 if (start < 0) {
12685 start += len
12686 if (start < 0) start = 0
12687 } else if (start > len) {
12688 start = len
12689 }
12690
12691 if (end < 0) {
12692 end += len
12693 if (end < 0) end = 0
12694 } else if (end > len) {
12695 end = len
12696 }
12697
12698 if (end < start) end = start
12699
12700 var newBuf = this.subarray(start, end)
12701 // Return an augmented `Uint8Array` instance
12702 newBuf.__proto__ = Buffer.prototype
12703 return newBuf
12704 }
12705
12706 /*
12707 * Need to make sure that buffer isn't trying to write out of bounds.
12708 */
12709 function checkOffset (offset, ext, length) {
12710 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
12711 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
12712 }
12713
12714 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
12715 offset = offset >>> 0
12716 byteLength = byteLength >>> 0
12717 if (!noAssert) checkOffset(offset, byteLength, this.length)
12718
12719 var val = this[offset]
12720 var mul = 1
12721 var i = 0
12722 while (++i < byteLength && (mul *= 0x100)) {
12723 val += this[offset + i] * mul
12724 }
12725
12726 return val
12727 }
12728
12729 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
12730 offset = offset >>> 0
12731 byteLength = byteLength >>> 0
12732 if (!noAssert) {
12733 checkOffset(offset, byteLength, this.length)
12734 }
12735
12736 var val = this[offset + --byteLength]
12737 var mul = 1
12738 while (byteLength > 0 && (mul *= 0x100)) {
12739 val += this[offset + --byteLength] * mul
12740 }
12741
12742 return val
12743 }
12744
12745 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
12746 offset = offset >>> 0
12747 if (!noAssert) checkOffset(offset, 1, this.length)
12748 return this[offset]
12749 }
12750
12751 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
12752 offset = offset >>> 0
12753 if (!noAssert) checkOffset(offset, 2, this.length)
12754 return this[offset] | (this[offset + 1] << 8)
12755 }
12756
12757 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
12758 offset = offset >>> 0
12759 if (!noAssert) checkOffset(offset, 2, this.length)
12760 return (this[offset] << 8) | this[offset + 1]
12761 }
12762
12763 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
12764 offset = offset >>> 0
12765 if (!noAssert) checkOffset(offset, 4, this.length)
12766
12767 return ((this[offset]) |
12768 (this[offset + 1] << 8) |
12769 (this[offset + 2] << 16)) +
12770 (this[offset + 3] * 0x1000000)
12771 }
12772
12773 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
12774 offset = offset >>> 0
12775 if (!noAssert) checkOffset(offset, 4, this.length)
12776
12777 return (this[offset] * 0x1000000) +
12778 ((this[offset + 1] << 16) |
12779 (this[offset + 2] << 8) |
12780 this[offset + 3])
12781 }
12782
12783 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
12784 offset = offset >>> 0
12785 byteLength = byteLength >>> 0
12786 if (!noAssert) checkOffset(offset, byteLength, this.length)
12787
12788 var val = this[offset]
12789 var mul = 1
12790 var i = 0
12791 while (++i < byteLength && (mul *= 0x100)) {
12792 val += this[offset + i] * mul
12793 }
12794 mul *= 0x80
12795
12796 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12797
12798 return val
12799 }
12800
12801 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
12802 offset = offset >>> 0
12803 byteLength = byteLength >>> 0
12804 if (!noAssert) checkOffset(offset, byteLength, this.length)
12805
12806 var i = byteLength
12807 var mul = 1
12808 var val = this[offset + --i]
12809 while (i > 0 && (mul *= 0x100)) {
12810 val += this[offset + --i] * mul
12811 }
12812 mul *= 0x80
12813
12814 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12815
12816 return val
12817 }
12818
12819 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
12820 offset = offset >>> 0
12821 if (!noAssert) checkOffset(offset, 1, this.length)
12822 if (!(this[offset] & 0x80)) return (this[offset])
12823 return ((0xff - this[offset] + 1) * -1)
12824 }
12825
12826 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
12827 offset = offset >>> 0
12828 if (!noAssert) checkOffset(offset, 2, this.length)
12829 var val = this[offset] | (this[offset + 1] << 8)
12830 return (val & 0x8000) ? val | 0xFFFF0000 : val
12831 }
12832
12833 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
12834 offset = offset >>> 0
12835 if (!noAssert) checkOffset(offset, 2, this.length)
12836 var val = this[offset + 1] | (this[offset] << 8)
12837 return (val & 0x8000) ? val | 0xFFFF0000 : val
12838 }
12839
12840 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
12841 offset = offset >>> 0
12842 if (!noAssert) checkOffset(offset, 4, this.length)
12843
12844 return (this[offset]) |
12845 (this[offset + 1] << 8) |
12846 (this[offset + 2] << 16) |
12847 (this[offset + 3] << 24)
12848 }
12849
12850 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
12851 offset = offset >>> 0
12852 if (!noAssert) checkOffset(offset, 4, this.length)
12853
12854 return (this[offset] << 24) |
12855 (this[offset + 1] << 16) |
12856 (this[offset + 2] << 8) |
12857 (this[offset + 3])
12858 }
12859
12860 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
12861 offset = offset >>> 0
12862 if (!noAssert) checkOffset(offset, 4, this.length)
12863 return ieee754.read(this, offset, true, 23, 4)
12864 }
12865
12866 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
12867 offset = offset >>> 0
12868 if (!noAssert) checkOffset(offset, 4, this.length)
12869 return ieee754.read(this, offset, false, 23, 4)
12870 }
12871
12872 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
12873 offset = offset >>> 0
12874 if (!noAssert) checkOffset(offset, 8, this.length)
12875 return ieee754.read(this, offset, true, 52, 8)
12876 }
12877
12878 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
12879 offset = offset >>> 0
12880 if (!noAssert) checkOffset(offset, 8, this.length)
12881 return ieee754.read(this, offset, false, 52, 8)
12882 }
12883
12884 function checkInt (buf, value, offset, ext, max, min) {
12885 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
12886 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
12887 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12888 }
12889
12890 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
12891 value = +value
12892 offset = offset >>> 0
12893 byteLength = byteLength >>> 0
12894 if (!noAssert) {
12895 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12896 checkInt(this, value, offset, byteLength, maxBytes, 0)
12897 }
12898
12899 var mul = 1
12900 var i = 0
12901 this[offset] = value & 0xFF
12902 while (++i < byteLength && (mul *= 0x100)) {
12903 this[offset + i] = (value / mul) & 0xFF
12904 }
12905
12906 return offset + byteLength
12907 }
12908
12909 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
12910 value = +value
12911 offset = offset >>> 0
12912 byteLength = byteLength >>> 0
12913 if (!noAssert) {
12914 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12915 checkInt(this, value, offset, byteLength, maxBytes, 0)
12916 }
12917
12918 var i = byteLength - 1
12919 var mul = 1
12920 this[offset + i] = value & 0xFF
12921 while (--i >= 0 && (mul *= 0x100)) {
12922 this[offset + i] = (value / mul) & 0xFF
12923 }
12924
12925 return offset + byteLength
12926 }
12927
12928 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
12929 value = +value
12930 offset = offset >>> 0
12931 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
12932 this[offset] = (value & 0xff)
12933 return offset + 1
12934 }
12935
12936 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
12937 value = +value
12938 offset = offset >>> 0
12939 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12940 this[offset] = (value & 0xff)
12941 this[offset + 1] = (value >>> 8)
12942 return offset + 2
12943 }
12944
12945 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
12946 value = +value
12947 offset = offset >>> 0
12948 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12949 this[offset] = (value >>> 8)
12950 this[offset + 1] = (value & 0xff)
12951 return offset + 2
12952 }
12953
12954 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
12955 value = +value
12956 offset = offset >>> 0
12957 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12958 this[offset + 3] = (value >>> 24)
12959 this[offset + 2] = (value >>> 16)
12960 this[offset + 1] = (value >>> 8)
12961 this[offset] = (value & 0xff)
12962 return offset + 4
12963 }
12964
12965 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
12966 value = +value
12967 offset = offset >>> 0
12968 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12969 this[offset] = (value >>> 24)
12970 this[offset + 1] = (value >>> 16)
12971 this[offset + 2] = (value >>> 8)
12972 this[offset + 3] = (value & 0xff)
12973 return offset + 4
12974 }
12975
12976 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
12977 value = +value
12978 offset = offset >>> 0
12979 if (!noAssert) {
12980 var limit = Math.pow(2, (8 * byteLength) - 1)
12981
12982 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12983 }
12984
12985 var i = 0
12986 var mul = 1
12987 var sub = 0
12988 this[offset] = value & 0xFF
12989 while (++i < byteLength && (mul *= 0x100)) {
12990 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
12991 sub = 1
12992 }
12993 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
12994 }
12995
12996 return offset + byteLength
12997 }
12998
12999 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
13000 value = +value
13001 offset = offset >>> 0
13002 if (!noAssert) {
13003 var limit = Math.pow(2, (8 * byteLength) - 1)
13004
13005 checkInt(this, value, offset, byteLength, limit - 1, -limit)
13006 }
13007
13008 var i = byteLength - 1
13009 var mul = 1
13010 var sub = 0
13011 this[offset + i] = value & 0xFF
13012 while (--i >= 0 && (mul *= 0x100)) {
13013 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
13014 sub = 1
13015 }
13016 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
13017 }
13018
13019 return offset + byteLength
13020 }
13021
13022 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
13023 value = +value
13024 offset = offset >>> 0
13025 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
13026 if (value < 0) value = 0xff + value + 1
13027 this[offset] = (value & 0xff)
13028 return offset + 1
13029 }
13030
13031 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
13032 value = +value
13033 offset = offset >>> 0
13034 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13035 this[offset] = (value & 0xff)
13036 this[offset + 1] = (value >>> 8)
13037 return offset + 2
13038 }
13039
13040 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
13041 value = +value
13042 offset = offset >>> 0
13043 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13044 this[offset] = (value >>> 8)
13045 this[offset + 1] = (value & 0xff)
13046 return offset + 2
13047 }
13048
13049 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
13050 value = +value
13051 offset = offset >>> 0
13052 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13053 this[offset] = (value & 0xff)
13054 this[offset + 1] = (value >>> 8)
13055 this[offset + 2] = (value >>> 16)
13056 this[offset + 3] = (value >>> 24)
13057 return offset + 4
13058 }
13059
13060 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
13061 value = +value
13062 offset = offset >>> 0
13063 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13064 if (value < 0) value = 0xffffffff + value + 1
13065 this[offset] = (value >>> 24)
13066 this[offset + 1] = (value >>> 16)
13067 this[offset + 2] = (value >>> 8)
13068 this[offset + 3] = (value & 0xff)
13069 return offset + 4
13070 }
13071
13072 function checkIEEE754 (buf, value, offset, ext, max, min) {
13073 if (offset + ext > buf.length) throw new RangeError('Index out of range')
13074 if (offset < 0) throw new RangeError('Index out of range')
13075 }
13076
13077 function writeFloat (buf, value, offset, littleEndian, noAssert) {
13078 value = +value
13079 offset = offset >>> 0
13080 if (!noAssert) {
13081 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
13082 }
13083 ieee754.write(buf, value, offset, littleEndian, 23, 4)
13084 return offset + 4
13085 }
13086
13087 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
13088 return writeFloat(this, value, offset, true, noAssert)
13089 }
13090
13091 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
13092 return writeFloat(this, value, offset, false, noAssert)
13093 }
13094
13095 function writeDouble (buf, value, offset, littleEndian, noAssert) {
13096 value = +value
13097 offset = offset >>> 0
13098 if (!noAssert) {
13099 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
13100 }
13101 ieee754.write(buf, value, offset, littleEndian, 52, 8)
13102 return offset + 8
13103 }
13104
13105 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
13106 return writeDouble(this, value, offset, true, noAssert)
13107 }
13108
13109 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
13110 return writeDouble(this, value, offset, false, noAssert)
13111 }
13112
13113 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
13114 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
13115 if (!start) start = 0
13116 if (!end && end !== 0) end = this.length
13117 if (targetStart >= target.length) targetStart = target.length
13118 if (!targetStart) targetStart = 0
13119 if (end > 0 && end < start) end = start
13120
13121 // Copy 0 bytes; we're done
13122 if (end === start) return 0
13123 if (target.length === 0 || this.length === 0) return 0
13124
13125 // Fatal error conditions
13126 if (targetStart < 0) {
13127 throw new RangeError('targetStart out of bounds')
13128 }
13129 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
13130 if (end < 0) throw new RangeError('sourceEnd out of bounds')
13131
13132 // Are we oob?
13133 if (end > this.length) end = this.length
13134 if (target.length - targetStart < end - start) {
13135 end = target.length - targetStart + start
13136 }
13137
13138 var len = end - start
13139 var i
13140
13141 if (this === target && start < targetStart && targetStart < end) {
13142 // descending copy from end
13143 for (i = len - 1; i >= 0; --i) {
13144 target[i + targetStart] = this[i + start]
13145 }
13146 } else if (len < 1000) {
13147 // ascending copy from start
13148 for (i = 0; i < len; ++i) {
13149 target[i + targetStart] = this[i + start]
13150 }
13151 } else {
13152 Uint8Array.prototype.set.call(
13153 target,
13154 this.subarray(start, start + len),
13155 targetStart
13156 )
13157 }
13158
13159 return len
13160 }
13161
13162 // Usage:
13163 // buffer.fill(number[, offset[, end]])
13164 // buffer.fill(buffer[, offset[, end]])
13165 // buffer.fill(string[, offset[, end]][, encoding])
13166 Buffer.prototype.fill = function fill (val, start, end, encoding) {
13167 // Handle string cases:
13168 if (typeof val === 'string') {
13169 if (typeof start === 'string') {
13170 encoding = start
13171 start = 0
13172 end = this.length
13173 } else if (typeof end === 'string') {
13174 encoding = end
13175 end = this.length
13176 }
13177 if (val.length === 1) {
13178 var code = val.charCodeAt(0)
13179 if (code < 256) {
13180 val = code
13181 }
13182 }
13183 if (encoding !== undefined && typeof encoding !== 'string') {
13184 throw new TypeError('encoding must be a string')
13185 }
13186 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
13187 throw new TypeError('Unknown encoding: ' + encoding)
13188 }
13189 } else if (typeof val === 'number') {
13190 val = val & 255
13191 }
13192
13193 // Invalid ranges are not set to a default, so can range check early.
13194 if (start < 0 || this.length < start || this.length < end) {
13195 throw new RangeError('Out of range index')
13196 }
13197
13198 if (end <= start) {
13199 return this
13200 }
13201
13202 start = start >>> 0
13203 end = end === undefined ? this.length : end >>> 0
13204
13205 if (!val) val = 0
13206
13207 var i
13208 if (typeof val === 'number') {
13209 for (i = start; i < end; ++i) {
13210 this[i] = val
13211 }
13212 } else {
13213 var bytes = Buffer.isBuffer(val)
13214 ? val
13215 : new Buffer(val, encoding)
13216 var len = bytes.length
13217 for (i = 0; i < end - start; ++i) {
13218 this[i + start] = bytes[i % len]
13219 }
13220 }
13221
13222 return this
13223 }
13224
13225 // HELPER FUNCTIONS
13226 // ================
13227
13228 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
13229
13230 function base64clean (str) {
13231 // Node strips out invalid characters like \n and \t from the string, base64-js does not
13232 str = str.trim().replace(INVALID_BASE64_RE, '')
13233 // Node converts strings with length < 2 to ''
13234 if (str.length < 2) return ''
13235 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
13236 while (str.length % 4 !== 0) {
13237 str = str + '='
13238 }
13239 return str
13240 }
13241
13242 function toHex (n) {
13243 if (n < 16) return '0' + n.toString(16)
13244 return n.toString(16)
13245 }
13246
13247 function utf8ToBytes (string, units) {
13248 units = units || Infinity
13249 var codePoint
13250 var length = string.length
13251 var leadSurrogate = null
13252 var bytes = []
13253
13254 for (var i = 0; i < length; ++i) {
13255 codePoint = string.charCodeAt(i)
13256
13257 // is surrogate component
13258 if (codePoint > 0xD7FF && codePoint < 0xE000) {
13259 // last char was a lead
13260 if (!leadSurrogate) {
13261 // no lead yet
13262 if (codePoint > 0xDBFF) {
13263 // unexpected trail
13264 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13265 continue
13266 } else if (i + 1 === length) {
13267 // unpaired lead
13268 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13269 continue
13270 }
13271
13272 // valid lead
13273 leadSurrogate = codePoint
13274
13275 continue
13276 }
13277
13278 // 2 leads in a row
13279 if (codePoint < 0xDC00) {
13280 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13281 leadSurrogate = codePoint
13282 continue
13283 }
13284
13285 // valid surrogate pair
13286 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
13287 } else if (leadSurrogate) {
13288 // valid bmp char, but last char was a lead
13289 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13290 }
13291
13292 leadSurrogate = null
13293
13294 // encode utf8
13295 if (codePoint < 0x80) {
13296 if ((units -= 1) < 0) break
13297 bytes.push(codePoint)
13298 } else if (codePoint < 0x800) {
13299 if ((units -= 2) < 0) break
13300 bytes.push(
13301 codePoint >> 0x6 | 0xC0,
13302 codePoint & 0x3F | 0x80
13303 )
13304 } else if (codePoint < 0x10000) {
13305 if ((units -= 3) < 0) break
13306 bytes.push(
13307 codePoint >> 0xC | 0xE0,
13308 codePoint >> 0x6 & 0x3F | 0x80,
13309 codePoint & 0x3F | 0x80
13310 )
13311 } else if (codePoint < 0x110000) {
13312 if ((units -= 4) < 0) break
13313 bytes.push(
13314 codePoint >> 0x12 | 0xF0,
13315 codePoint >> 0xC & 0x3F | 0x80,
13316 codePoint >> 0x6 & 0x3F | 0x80,
13317 codePoint & 0x3F | 0x80
13318 )
13319 } else {
13320 throw new Error('Invalid code point')
13321 }
13322 }
13323
13324 return bytes
13325 }
13326
13327 function asciiToBytes (str) {
13328 var byteArray = []
13329 for (var i = 0; i < str.length; ++i) {
13330 // Node's code seems to be doing this and not & 0x7F..
13331 byteArray.push(str.charCodeAt(i) & 0xFF)
13332 }
13333 return byteArray
13334 }
13335
13336 function utf16leToBytes (str, units) {
13337 var c, hi, lo
13338 var byteArray = []
13339 for (var i = 0; i < str.length; ++i) {
13340 if ((units -= 2) < 0) break
13341
13342 c = str.charCodeAt(i)
13343 hi = c >> 8
13344 lo = c % 256
13345 byteArray.push(lo)
13346 byteArray.push(hi)
13347 }
13348
13349 return byteArray
13350 }
13351
13352 function base64ToBytes (str) {
13353 return base64.toByteArray(base64clean(str))
13354 }
13355
13356 function blitBuffer (src, dst, offset, length) {
13357 for (var i = 0; i < length; ++i) {
13358 if ((i + offset >= dst.length) || (i >= src.length)) break
13359 dst[i + offset] = src[i]
13360 }
13361 return i
13362 }
13363
13364 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
13365 function isArrayBufferView (obj) {
13366 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
13367 }
13368
13369 function numberIsNaN (obj) {
13370 return obj !== obj // eslint-disable-line no-self-compare
13371 }
13372
13373 },{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
13374 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
13375 var e, m
13376 var eLen = nBytes * 8 - mLen - 1
13377 var eMax = (1 << eLen) - 1
13378 var eBias = eMax >> 1
13379 var nBits = -7
13380 var i = isLE ? (nBytes - 1) : 0
13381 var d = isLE ? -1 : 1
13382 var s = buffer[offset + i]
13383
13384 i += d
13385
13386 e = s & ((1 << (-nBits)) - 1)
13387 s >>= (-nBits)
13388 nBits += eLen
13389 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13390
13391 m = e & ((1 << (-nBits)) - 1)
13392 e >>= (-nBits)
13393 nBits += mLen
13394 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13395
13396 if (e === 0) {
13397 e = 1 - eBias
13398 } else if (e === eMax) {
13399 return m ? NaN : ((s ? -1 : 1) * Infinity)
13400 } else {
13401 m = m + Math.pow(2, mLen)
13402 e = e - eBias
13403 }
13404 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
13405 }
13406
13407 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
13408 var e, m, c
13409 var eLen = nBytes * 8 - mLen - 1
13410 var eMax = (1 << eLen) - 1
13411 var eBias = eMax >> 1
13412 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
13413 var i = isLE ? 0 : (nBytes - 1)
13414 var d = isLE ? 1 : -1
13415 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
13416
13417 value = Math.abs(value)
13418
13419 if (isNaN(value) || value === Infinity) {
13420 m = isNaN(value) ? 1 : 0
13421 e = eMax
13422 } else {
13423 e = Math.floor(Math.log(value) / Math.LN2)
13424 if (value * (c = Math.pow(2, -e)) < 1) {
13425 e--
13426 c *= 2
13427 }
13428 if (e + eBias >= 1) {
13429 value += rt / c
13430 } else {
13431 value += rt * Math.pow(2, 1 - eBias)
13432 }
13433 if (value * c >= 2) {
13434 e++
13435 c /= 2
13436 }
13437
13438 if (e + eBias >= eMax) {
13439 m = 0
13440 e = eMax
13441 } else if (e + eBias >= 1) {
13442 m = (value * c - 1) * Math.pow(2, mLen)
13443 e = e + eBias
13444 } else {
13445 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
13446 e = 0
13447 }
13448 }
13449
13450 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
13451
13452 e = (e << mLen) | m
13453 eLen += mLen
13454 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
13455
13456 buffer[offset + i - d] |= s * 128
13457 }
13458
13459 },{}],4:[function(require,module,exports){
13460 window.basex = require('base-x')
13461 },{"base-x":5}],5:[function(require,module,exports){
13462 // base-x encoding
13463 // Forked from https://github.com/cryptocoinjs/bs58
13464 // Originally written by Mike Hearn for BitcoinJ
13465 // Copyright (c) 2011 Google Inc
13466 // Ported to JavaScript by Stefan Thomas
13467 // Merged Buffer refactorings from base58-native by Stephen Pair
13468 // Copyright (c) 2013 BitPay Inc
13469
13470 var Buffer = require('safe-buffer').Buffer
13471
13472 module.exports = function base (ALPHABET) {
13473 var ALPHABET_MAP = {}
13474 var BASE = ALPHABET.length
13475 var LEADER = ALPHABET.charAt(0)
13476
13477 // pre-compute lookup table
13478 for (var z = 0; z < ALPHABET.length; z++) {
13479 var x = ALPHABET.charAt(z)
13480
13481 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13482 ALPHABET_MAP[x] = z
13483 }
13484
13485 function encode (source) {
13486 if (source.length === 0) return ''
13487
13488 var digits = [0]
13489 for (var i = 0; i < source.length; ++i) {
13490 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13491 carry += digits[j] << 8
13492 digits[j] = carry % BASE
13493 carry = (carry / BASE) | 0
13494 }
13495
13496 while (carry > 0) {
13497 digits.push(carry % BASE)
13498 carry = (carry / BASE) | 0
13499 }
13500 }
13501
13502 var string = ''
13503
13504 // deal with leading zeros
13505 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13506 // convert digits to a string
13507 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
13508
13509 return string
13510 }
13511
13512 function decodeUnsafe (string) {
13513 if (string.length === 0) return Buffer.allocUnsafe(0)
13514
13515 var bytes = [0]
13516 for (var i = 0; i < string.length; i++) {
13517 var value = ALPHABET_MAP[string[i]]
13518 if (value === undefined) return
13519
13520 for (var j = 0, carry = value; j < bytes.length; ++j) {
13521 carry += bytes[j] * BASE
13522 bytes[j] = carry & 0xff
13523 carry >>= 8
13524 }
13525
13526 while (carry > 0) {
13527 bytes.push(carry & 0xff)
13528 carry >>= 8
13529 }
13530 }
13531
13532 // deal with leading zeros
13533 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13534 bytes.push(0)
13535 }
13536
13537 return Buffer.from(bytes.reverse())
13538 }
13539
13540 function decode (string) {
13541 var buffer = decodeUnsafe(string)
13542 if (buffer) return buffer
13543
13544 throw new Error('Non-base' + BASE + ' character')
13545 }
13546
13547 return {
13548 encode: encode,
13549 decodeUnsafe: decodeUnsafe,
13550 decode: decode
13551 }
13552 }
13553
13554 },{"safe-buffer":6}],6:[function(require,module,exports){
13555 module.exports = require('buffer')
13556
13557 },{"buffer":2}]},{},[4])(4)
13558 });</script>
13559 <script>// Polyfill for NFKD normalization
13560 // See https://github.com/walling/unorm
13561
13562 (function (root) {
13563 "use strict";
13564
13565 /***** unorm.js *****/
13566
13567 /*
13568 * UnicodeNormalizer 1.0.0
13569 * Copyright (c) 2008 Matsuza
13570 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
13571 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
13572 * $Rev: 13309 $
13573 */
13574
13575 var DEFAULT_FEATURE = [null, 0, {}];
13576 var CACHE_THRESHOLD = 10;
13577 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
13578 var NCount = VCount * TCount; // 588
13579 var SCount = LCount * NCount; // 11172
13580
13581 var UChar = function(cp, feature){
13582 this.codepoint = cp;
13583 this.feature = feature;
13584 };
13585
13586 // Strategies
13587 var cache = {};
13588 var cacheCounter = [];
13589 for (var i = 0; i <= 0xFF; ++i){
13590 cacheCounter[i] = 0;
13591 }
13592
13593 function fromCache(next, cp, needFeature){
13594 var ret = cache[cp];
13595 if(!ret){
13596 ret = next(cp, needFeature);
13597 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
13598 cache[cp] = ret;
13599 }
13600 }
13601 return ret;
13602 }
13603
13604 function fromData(next, cp, needFeature){
13605 var hash = cp & 0xFF00;
13606 var dunit = UChar.udata[hash] || {};
13607 var f = dunit[cp];
13608 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
13609 }
13610 function fromCpOnly(next, cp, needFeature){
13611 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
13612 }
13613 function fromRuleBasedJamo(next, cp, needFeature){
13614 var j;
13615 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
13616 return next(cp, needFeature);
13617 }
13618 if(LBase <= cp && cp < LBase + LCount){
13619 var c = {};
13620 var base = (cp - LBase) * VCount;
13621 for (j = 0; j < VCount; ++j){
13622 c[VBase + j] = SBase + TCount * (j + base);
13623 }
13624 return new UChar(cp, [,,c]);
13625 }
13626
13627 var SIndex = cp - SBase;
13628 var TIndex = SIndex % TCount;
13629 var feature = [];
13630 if(TIndex !== 0){
13631 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
13632 } else {
13633 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
13634 feature[2] = {};
13635 for (j = 1; j < TCount; ++j){
13636 feature[2][TBase + j] = cp + j;
13637 }
13638 }
13639 return new UChar(cp, feature);
13640 }
13641 function fromCpFilter(next, cp, needFeature){
13642 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
13643 }
13644
13645 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
13646
13647 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
13648 return function (cp, needFeature) {
13649 return strategy(next, cp, needFeature);
13650 };
13651 }, null);
13652
13653 UChar.isHighSurrogate = function(cp){
13654 return cp >= 0xD800 && cp <= 0xDBFF;
13655 };
13656 UChar.isLowSurrogate = function(cp){
13657 return cp >= 0xDC00 && cp <= 0xDFFF;
13658 };
13659
13660 UChar.prototype.prepFeature = function(){
13661 if(!this.feature){
13662 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
13663 }
13664 };
13665
13666 UChar.prototype.toString = function(){
13667 if(this.codepoint < 0x10000){
13668 return String.fromCharCode(this.codepoint);
13669 } else {
13670 var x = this.codepoint - 0x10000;
13671 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
13672 }
13673 };
13674
13675 UChar.prototype.getDecomp = function(){
13676 this.prepFeature();
13677 return this.feature[0] || null;
13678 };
13679
13680 UChar.prototype.isCompatibility = function(){
13681 this.prepFeature();
13682 return !!this.feature[1] && (this.feature[1] & (1 << 8));
13683 };
13684 UChar.prototype.isExclude = function(){
13685 this.prepFeature();
13686 return !!this.feature[1] && (this.feature[1] & (1 << 9));
13687 };
13688 UChar.prototype.getCanonicalClass = function(){
13689 this.prepFeature();
13690 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
13691 };
13692 UChar.prototype.getComposite = function(following){
13693 this.prepFeature();
13694 if(!this.feature[2]){
13695 return null;
13696 }
13697 var cp = this.feature[2][following.codepoint];
13698 return cp ? UChar.fromCharCode(cp) : null;
13699 };
13700
13701 var UCharIterator = function(str){
13702 this.str = str;
13703 this.cursor = 0;
13704 };
13705 UCharIterator.prototype.next = function(){
13706 if(!!this.str && this.cursor < this.str.length){
13707 var cp = this.str.charCodeAt(this.cursor++);
13708 var d;
13709 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
13710 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
13711 ++this.cursor;
13712 }
13713 return UChar.fromCharCode(cp);
13714 } else {
13715 this.str = null;
13716 return null;
13717 }
13718 };
13719
13720 var RecursDecompIterator = function(it, cano){
13721 this.it = it;
13722 this.canonical = cano;
13723 this.resBuf = [];
13724 };
13725
13726 RecursDecompIterator.prototype.next = function(){
13727 function recursiveDecomp(cano, uchar){
13728 var decomp = uchar.getDecomp();
13729 if(!!decomp && !(cano && uchar.isCompatibility())){
13730 var ret = [];
13731 for(var i = 0; i < decomp.length; ++i){
13732 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
13733 ret = ret.concat(a);
13734 }
13735 return ret;
13736 } else {
13737 return [uchar];
13738 }
13739 }
13740 if(this.resBuf.length === 0){
13741 var uchar = this.it.next();
13742 if(!uchar){
13743 return null;
13744 }
13745 this.resBuf = recursiveDecomp(this.canonical, uchar);
13746 }
13747 return this.resBuf.shift();
13748 };
13749
13750 var DecompIterator = function(it){
13751 this.it = it;
13752 this.resBuf = [];
13753 };
13754
13755 DecompIterator.prototype.next = function(){
13756 var cc;
13757 if(this.resBuf.length === 0){
13758 do{
13759 var uchar = this.it.next();
13760 if(!uchar){
13761 break;
13762 }
13763 cc = uchar.getCanonicalClass();
13764 var inspt = this.resBuf.length;
13765 if(cc !== 0){
13766 for(; inspt > 0; --inspt){
13767 var uchar2 = this.resBuf[inspt - 1];
13768 var cc2 = uchar2.getCanonicalClass();
13769 if(cc2 <= cc){
13770 break;
13771 }
13772 }
13773 }
13774 this.resBuf.splice(inspt, 0, uchar);
13775 } while(cc !== 0);
13776 }
13777 return this.resBuf.shift();
13778 };
13779
13780 var CompIterator = function(it){
13781 this.it = it;
13782 this.procBuf = [];
13783 this.resBuf = [];
13784 this.lastClass = null;
13785 };
13786
13787 CompIterator.prototype.next = function(){
13788 while(this.resBuf.length === 0){
13789 var uchar = this.it.next();
13790 if(!uchar){
13791 this.resBuf = this.procBuf;
13792 this.procBuf = [];
13793 break;
13794 }
13795 if(this.procBuf.length === 0){
13796 this.lastClass = uchar.getCanonicalClass();
13797 this.procBuf.push(uchar);
13798 } else {
13799 var starter = this.procBuf[0];
13800 var composite = starter.getComposite(uchar);
13801 var cc = uchar.getCanonicalClass();
13802 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
13803 this.procBuf[0] = composite;
13804 } else {
13805 if(cc === 0){
13806 this.resBuf = this.procBuf;
13807 this.procBuf = [];
13808 }
13809 this.lastClass = cc;
13810 this.procBuf.push(uchar);
13811 }
13812 }
13813 }
13814 return this.resBuf.shift();
13815 };
13816
13817 var createIterator = function(mode, str){
13818 switch(mode){
13819 case "NFD":
13820 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
13821 case "NFKD":
13822 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
13823 case "NFC":
13824 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
13825 case "NFKC":
13826 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
13827 }
13828 throw mode + " is invalid";
13829 };
13830 var normalize = function(mode, str){
13831 var it = createIterator(mode, str);
13832 var ret = "";
13833 var uchar;
13834 while(!!(uchar = it.next())){
13835 ret += uchar.toString();
13836 }
13837 return ret;
13838 };
13839
13840 /* API functions */
13841 function nfd(str){
13842 return normalize("NFD", str);
13843 }
13844
13845 function nfkd(str){
13846 return normalize("NFKD", str);
13847 }
13848
13849 function nfc(str){
13850 return normalize("NFC", str);
13851 }
13852
13853 function nfkc(str){
13854 return normalize("NFKC", str);
13855 }
13856
13857 /* Unicode data */
13858 UChar.udata={
13859 0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
13860 256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
13861 512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
13862 768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
13863 1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
13864 1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
13865 1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
13866 1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
13867 2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
13868 2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
13869 2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
13870 2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
13871 3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
13872 3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
13873 3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
13874 3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
13875 4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
13876 4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
13877 4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
13878 4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
13879 5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
13880 5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
13881 5632:{71231:[,9],71350:[,9],71351:[,7]},
13882 5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
13883 6144:{6313:[,228]},
13884 6400:{6457:[,222],6458:[,230],6459:[,220]},
13885 6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
13886 6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
13887 7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
13888 7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
13889 7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
13890 7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
13891 8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
13892 8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
13893 8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
13894 8960:{9001:[[12296]],9002:[[12297]]},
13895 9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
13896 10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
13897 11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
13898 11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
13899 11776:{11935:[[27597],256],12019:[[40863],256]},
13900 12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
13901 12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
13902 12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
13903 12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
13904 13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
13905 27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
13906 27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
13907 42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
13908 42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
13909 43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
13910 43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
13911 43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
13912 43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
13913 48128:{113822:[,1]},
13914 53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
13915 53760:{119362:[,230],119363:[,230],119364:[,230]},
13916 54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
13917 54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
13918 54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
13919 55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
13920 59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
13921 60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
13922 61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
13923 61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
13924 63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
13925 63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
13926 64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
13927 64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
13928 64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
13929 64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
13930 65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
13931 65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
13932
13933 };
13934
13935 /***** Module to export */
13936 var unorm = {
13937 nfc: nfc,
13938 nfd: nfd,
13939 nfkc: nfkc,
13940 nfkd: nfkd
13941 };
13942
13943 /*globals module:true,define:true*/
13944
13945 // CommonJS
13946 if (typeof module === "object") {
13947 module.exports = unorm;
13948
13949 // AMD
13950 } else if (typeof define === "function" && define.amd) {
13951 define("unorm", function () {
13952 return unorm;
13953 });
13954
13955 // Global
13956 } else {
13957 root.unorm = unorm;
13958 }
13959
13960 /***** Export as shim for String::normalize method *****/
13961 /*
13962 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
13963
13964 21.1.3.12 String.prototype.normalize(form="NFC")
13965 When the normalize method is called with one argument form, the following steps are taken:
13966
13967 1. Let O be CheckObjectCoercible(this value).
13968 2. Let S be ToString(O).
13969 3. ReturnIfAbrupt(S).
13970 4. If form is not provided or undefined let form be "NFC".
13971 5. Let f be ToString(form).
13972 6. ReturnIfAbrupt(f).
13973 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
13974 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
13975 9. Return ns.
13976
13977 The length property of the normalize method is 0.
13978
13979 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
13980 */
13981 unorm.shimApplied = false;
13982
13983 if (!String.prototype.normalize) {
13984 String.prototype.normalize = function(form) {
13985 var str = "" + this;
13986 form = form === undefined ? "NFC" : form;
13987
13988 if (form === "NFC") {
13989 return unorm.nfc(str);
13990 } else if (form === "NFD") {
13991 return unorm.nfd(str);
13992 } else if (form === "NFKC") {
13993 return unorm.nfkc(str);
13994 } else if (form === "NFKD") {
13995 return unorm.nfkd(str);
13996 } else {
13997 throw new RangeError("Invalid normalization form: " + form);
13998 }
13999 };
14000
14001 unorm.shimApplied = true;
14002 }
14003 }(this));
14004 </script>
14005 <script>/*!
14006 * jQuery JavaScript Library v3.2.1
14007 * https://jquery.com/
14008 *
14009 * Includes Sizzle.js
14010 * https://sizzlejs.com/
14011 *
14012 * Copyright JS Foundation and other contributors
14013 * Released under the MIT license
14014 * https://jquery.org/license
14015 *
14016 * Date: 2017-03-20T18:59Z
14017 */
14018 ( function( global, factory ) {
14019
14020 "use strict";
14021
14022 if ( typeof module === "object" && typeof module.exports === "object" ) {
14023
14024 // For CommonJS and CommonJS-like environments where a proper `window`
14025 // is present, execute the factory and get jQuery.
14026 // For environments that do not have a `window` with a `document`
14027 // (such as Node.js), expose a factory as module.exports.
14028 // This accentuates the need for the creation of a real `window`.
14029 // e.g. var jQuery = require("jquery")(window);
14030 // See ticket #14549 for more info.
14031 module.exports = global.document ?
14032 factory( global, true ) :
14033 function( w ) {
14034 if ( !w.document ) {
14035 throw new Error( "jQuery requires a window with a document" );
14036 }
14037 return factory( w );
14038 };
14039 } else {
14040 factory( global );
14041 }
14042
14043 // Pass this if window is not defined yet
14044 } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
14045
14046 // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
14047 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
14048 // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
14049 // enough that all such attempts are guarded in a try block.
14050 "use strict";
14051
14052 var arr = [];
14053
14054 var document = window.document;
14055
14056 var getProto = Object.getPrototypeOf;
14057
14058 var slice = arr.slice;
14059
14060 var concat = arr.concat;
14061
14062 var push = arr.push;
14063
14064 var indexOf = arr.indexOf;
14065
14066 var class2type = {};
14067
14068 var toString = class2type.toString;
14069
14070 var hasOwn = class2type.hasOwnProperty;
14071
14072 var fnToString = hasOwn.toString;
14073
14074 var ObjectFunctionString = fnToString.call( Object );
14075
14076 var support = {};
14077
14078
14079
14080 function DOMEval( code, doc ) {
14081 doc = doc || document;
14082
14083 var script = doc.createElement( "script" );
14084
14085 script.text = code;
14086 doc.head.appendChild( script ).parentNode.removeChild( script );
14087 }
14088 /* global Symbol */
14089 // Defining this global in .eslintrc.json would create a danger of using the global
14090 // unguarded in another place, it seems safer to define global only for this module
14091
14092
14093
14094 var
14095 version = "3.2.1",
14096
14097 // Define a local copy of jQuery
14098 jQuery = function( selector, context ) {
14099
14100 // The jQuery object is actually just the init constructor 'enhanced'
14101 // Need init if jQuery is called (just allow error to be thrown if not included)
14102 return new jQuery.fn.init( selector, context );
14103 },
14104
14105 // Support: Android <=4.0 only
14106 // Make sure we trim BOM and NBSP
14107 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
14108
14109 // Matches dashed string for camelizing
14110 rmsPrefix = /^-ms-/,
14111 rdashAlpha = /-([a-z])/g,
14112
14113 // Used by jQuery.camelCase as callback to replace()
14114 fcamelCase = function( all, letter ) {
14115 return letter.toUpperCase();
14116 };
14117
14118 jQuery.fn = jQuery.prototype = {
14119
14120 // The current version of jQuery being used
14121 jquery: version,
14122
14123 constructor: jQuery,
14124
14125 // The default length of a jQuery object is 0
14126 length: 0,
14127
14128 toArray: function() {
14129 return slice.call( this );
14130 },
14131
14132 // Get the Nth element in the matched element set OR
14133 // Get the whole matched element set as a clean array
14134 get: function( num ) {
14135
14136 // Return all the elements in a clean array
14137 if ( num == null ) {
14138 return slice.call( this );
14139 }
14140
14141 // Return just the one element from the set
14142 return num < 0 ? this[ num + this.length ] : this[ num ];
14143 },
14144
14145 // Take an array of elements and push it onto the stack
14146 // (returning the new matched element set)
14147 pushStack: function( elems ) {
14148
14149 // Build a new jQuery matched element set
14150 var ret = jQuery.merge( this.constructor(), elems );
14151
14152 // Add the old object onto the stack (as a reference)
14153 ret.prevObject = this;
14154
14155 // Return the newly-formed element set
14156 return ret;
14157 },
14158
14159 // Execute a callback for every element in the matched set.
14160 each: function( callback ) {
14161 return jQuery.each( this, callback );
14162 },
14163
14164 map: function( callback ) {
14165 return this.pushStack( jQuery.map( this, function( elem, i ) {
14166 return callback.call( elem, i, elem );
14167 } ) );
14168 },
14169
14170 slice: function() {
14171 return this.pushStack( slice.apply( this, arguments ) );
14172 },
14173
14174 first: function() {
14175 return this.eq( 0 );
14176 },
14177
14178 last: function() {
14179 return this.eq( -1 );
14180 },
14181
14182 eq: function( i ) {
14183 var len = this.length,
14184 j = +i + ( i < 0 ? len : 0 );
14185 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
14186 },
14187
14188 end: function() {
14189 return this.prevObject || this.constructor();
14190 },
14191
14192 // For internal use only.
14193 // Behaves like an Array's method, not like a jQuery method.
14194 push: push,
14195 sort: arr.sort,
14196 splice: arr.splice
14197 };
14198
14199 jQuery.extend = jQuery.fn.extend = function() {
14200 var options, name, src, copy, copyIsArray, clone,
14201 target = arguments[ 0 ] || {},
14202 i = 1,
14203 length = arguments.length,
14204 deep = false;
14205
14206 // Handle a deep copy situation
14207 if ( typeof target === "boolean" ) {
14208 deep = target;
14209
14210 // Skip the boolean and the target
14211 target = arguments[ i ] || {};
14212 i++;
14213 }
14214
14215 // Handle case when target is a string or something (possible in deep copy)
14216 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
14217 target = {};
14218 }
14219
14220 // Extend jQuery itself if only one argument is passed
14221 if ( i === length ) {
14222 target = this;
14223 i--;
14224 }
14225
14226 for ( ; i < length; i++ ) {
14227
14228 // Only deal with non-null/undefined values
14229 if ( ( options = arguments[ i ] ) != null ) {
14230
14231 // Extend the base object
14232 for ( name in options ) {
14233 src = target[ name ];
14234 copy = options[ name ];
14235
14236 // Prevent never-ending loop
14237 if ( target === copy ) {
14238 continue;
14239 }
14240
14241 // Recurse if we're merging plain objects or arrays
14242 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
14243 ( copyIsArray = Array.isArray( copy ) ) ) ) {
14244
14245 if ( copyIsArray ) {
14246 copyIsArray = false;
14247 clone = src && Array.isArray( src ) ? src : [];
14248
14249 } else {
14250 clone = src && jQuery.isPlainObject( src ) ? src : {};
14251 }
14252
14253 // Never move original objects, clone them
14254 target[ name ] = jQuery.extend( deep, clone, copy );
14255
14256 // Don't bring in undefined values
14257 } else if ( copy !== undefined ) {
14258 target[ name ] = copy;
14259 }
14260 }
14261 }
14262 }
14263
14264 // Return the modified object
14265 return target;
14266 };
14267
14268 jQuery.extend( {
14269
14270 // Unique for each copy of jQuery on the page
14271 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
14272
14273 // Assume jQuery is ready without the ready module
14274 isReady: true,
14275
14276 error: function( msg ) {
14277 throw new Error( msg );
14278 },
14279
14280 noop: function() {},
14281
14282 isFunction: function( obj ) {
14283 return jQuery.type( obj ) === "function";
14284 },
14285
14286 isWindow: function( obj ) {
14287 return obj != null && obj === obj.window;
14288 },
14289
14290 isNumeric: function( obj ) {
14291
14292 // As of jQuery 3.0, isNumeric is limited to
14293 // strings and numbers (primitives or objects)
14294 // that can be coerced to finite numbers (gh-2662)
14295 var type = jQuery.type( obj );
14296 return ( type === "number" || type === "string" ) &&
14297
14298 // parseFloat NaNs numeric-cast false positives ("")
14299 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
14300 // subtraction forces infinities to NaN
14301 !isNaN( obj - parseFloat( obj ) );
14302 },
14303
14304 isPlainObject: function( obj ) {
14305 var proto, Ctor;
14306
14307 // Detect obvious negatives
14308 // Use toString instead of jQuery.type to catch host objects
14309 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
14310 return false;
14311 }
14312
14313 proto = getProto( obj );
14314
14315 // Objects with no prototype (e.g., `Object.create( null )`) are plain
14316 if ( !proto ) {
14317 return true;
14318 }
14319
14320 // Objects with prototype are plain iff they were constructed by a global Object function
14321 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
14322 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
14323 },
14324
14325 isEmptyObject: function( obj ) {
14326
14327 /* eslint-disable no-unused-vars */
14328 // See https://github.com/eslint/eslint/issues/6125
14329 var name;
14330
14331 for ( name in obj ) {
14332 return false;
14333 }
14334 return true;
14335 },
14336
14337 type: function( obj ) {
14338 if ( obj == null ) {
14339 return obj + "";
14340 }
14341
14342 // Support: Android <=2.3 only (functionish RegExp)
14343 return typeof obj === "object" || typeof obj === "function" ?
14344 class2type[ toString.call( obj ) ] || "object" :
14345 typeof obj;
14346 },
14347
14348 // Evaluates a script in a global context
14349 globalEval: function( code ) {
14350 DOMEval( code );
14351 },
14352
14353 // Convert dashed to camelCase; used by the css and data modules
14354 // Support: IE <=9 - 11, Edge 12 - 13
14355 // Microsoft forgot to hump their vendor prefix (#9572)
14356 camelCase: function( string ) {
14357 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
14358 },
14359
14360 each: function( obj, callback ) {
14361 var length, i = 0;
14362
14363 if ( isArrayLike( obj ) ) {
14364 length = obj.length;
14365 for ( ; i < length; i++ ) {
14366 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14367 break;
14368 }
14369 }
14370 } else {
14371 for ( i in obj ) {
14372 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14373 break;
14374 }
14375 }
14376 }
14377
14378 return obj;
14379 },
14380
14381 // Support: Android <=4.0 only
14382 trim: function( text ) {
14383 return text == null ?
14384 "" :
14385 ( text + "" ).replace( rtrim, "" );
14386 },
14387
14388 // results is for internal usage only
14389 makeArray: function( arr, results ) {
14390 var ret = results || [];
14391
14392 if ( arr != null ) {
14393 if ( isArrayLike( Object( arr ) ) ) {
14394 jQuery.merge( ret,
14395 typeof arr === "string" ?
14396 [ arr ] : arr
14397 );
14398 } else {
14399 push.call( ret, arr );
14400 }
14401 }
14402
14403 return ret;
14404 },
14405
14406 inArray: function( elem, arr, i ) {
14407 return arr == null ? -1 : indexOf.call( arr, elem, i );
14408 },
14409
14410 // Support: Android <=4.0 only, PhantomJS 1 only
14411 // push.apply(_, arraylike) throws on ancient WebKit
14412 merge: function( first, second ) {
14413 var len = +second.length,
14414 j = 0,
14415 i = first.length;
14416
14417 for ( ; j < len; j++ ) {
14418 first[ i++ ] = second[ j ];
14419 }
14420
14421 first.length = i;
14422
14423 return first;
14424 },
14425
14426 grep: function( elems, callback, invert ) {
14427 var callbackInverse,
14428 matches = [],
14429 i = 0,
14430 length = elems.length,
14431 callbackExpect = !invert;
14432
14433 // Go through the array, only saving the items
14434 // that pass the validator function
14435 for ( ; i < length; i++ ) {
14436 callbackInverse = !callback( elems[ i ], i );
14437 if ( callbackInverse !== callbackExpect ) {
14438 matches.push( elems[ i ] );
14439 }
14440 }
14441
14442 return matches;
14443 },
14444
14445 // arg is for internal usage only
14446 map: function( elems, callback, arg ) {
14447 var length, value,
14448 i = 0,
14449 ret = [];
14450
14451 // Go through the array, translating each of the items to their new values
14452 if ( isArrayLike( elems ) ) {
14453 length = elems.length;
14454 for ( ; i < length; i++ ) {
14455 value = callback( elems[ i ], i, arg );
14456
14457 if ( value != null ) {
14458 ret.push( value );
14459 }
14460 }
14461
14462 // Go through every key on the object,
14463 } else {
14464 for ( i in elems ) {
14465 value = callback( elems[ i ], i, arg );
14466
14467 if ( value != null ) {
14468 ret.push( value );
14469 }
14470 }
14471 }
14472
14473 // Flatten any nested arrays
14474 return concat.apply( [], ret );
14475 },
14476
14477 // A global GUID counter for objects
14478 guid: 1,
14479
14480 // Bind a function to a context, optionally partially applying any
14481 // arguments.
14482 proxy: function( fn, context ) {
14483 var tmp, args, proxy;
14484
14485 if ( typeof context === "string" ) {
14486 tmp = fn[ context ];
14487 context = fn;
14488 fn = tmp;
14489 }
14490
14491 // Quick check to determine if target is callable, in the spec
14492 // this throws a TypeError, but we will just return undefined.
14493 if ( !jQuery.isFunction( fn ) ) {
14494 return undefined;
14495 }
14496
14497 // Simulated bind
14498 args = slice.call( arguments, 2 );
14499 proxy = function() {
14500 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
14501 };
14502
14503 // Set the guid of unique handler to the same of original handler, so it can be removed
14504 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
14505
14506 return proxy;
14507 },
14508
14509 now: Date.now,
14510
14511 // jQuery.support is not used in Core but other projects attach their
14512 // properties to it so it needs to exist.
14513 support: support
14514 } );
14515
14516 if ( typeof Symbol === "function" ) {
14517 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
14518 }
14519
14520 // Populate the class2type map
14521 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
14522 function( i, name ) {
14523 class2type[ "[object " + name + "]" ] = name.toLowerCase();
14524 } );
14525
14526 function isArrayLike( obj ) {
14527
14528 // Support: real iOS 8.2 only (not reproducible in simulator)
14529 // `in` check used to prevent JIT error (gh-2145)
14530 // hasOwn isn't used here due to false negatives
14531 // regarding Nodelist length in IE
14532 var length = !!obj && "length" in obj && obj.length,
14533 type = jQuery.type( obj );
14534
14535 if ( type === "function" || jQuery.isWindow( obj ) ) {
14536 return false;
14537 }
14538
14539 return type === "array" || length === 0 ||
14540 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
14541 }
14542 var Sizzle =
14543 /*!
14544 * Sizzle CSS Selector Engine v2.3.3
14545 * https://sizzlejs.com/
14546 *
14547 * Copyright jQuery Foundation and other contributors
14548 * Released under the MIT license
14549 * http://jquery.org/license
14550 *
14551 * Date: 2016-08-08
14552 */
14553 (function( window ) {
14554
14555 var i,
14556 support,
14557 Expr,
14558 getText,
14559 isXML,
14560 tokenize,
14561 compile,
14562 select,
14563 outermostContext,
14564 sortInput,
14565 hasDuplicate,
14566
14567 // Local document vars
14568 setDocument,
14569 document,
14570 docElem,
14571 documentIsHTML,
14572 rbuggyQSA,
14573 rbuggyMatches,
14574 matches,
14575 contains,
14576
14577 // Instance-specific data
14578 expando = "sizzle" + 1 * new Date(),
14579 preferredDoc = window.document,
14580 dirruns = 0,
14581 done = 0,
14582 classCache = createCache(),
14583 tokenCache = createCache(),
14584 compilerCache = createCache(),
14585 sortOrder = function( a, b ) {
14586 if ( a === b ) {
14587 hasDuplicate = true;
14588 }
14589 return 0;
14590 },
14591
14592 // Instance methods
14593 hasOwn = ({}).hasOwnProperty,
14594 arr = [],
14595 pop = arr.pop,
14596 push_native = arr.push,
14597 push = arr.push,
14598 slice = arr.slice,
14599 // Use a stripped-down indexOf as it's faster than native
14600 // https://jsperf.com/thor-indexof-vs-for/5
14601 indexOf = function( list, elem ) {
14602 var i = 0,
14603 len = list.length;
14604 for ( ; i < len; i++ ) {
14605 if ( list[i] === elem ) {
14606 return i;
14607 }
14608 }
14609 return -1;
14610 },
14611
14612 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
14613
14614 // Regular expressions
14615
14616 // http://www.w3.org/TR/css3-selectors/#whitespace
14617 whitespace = "[\\x20\\t\\r\\n\\f]",
14618
14619 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
14620 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
14621
14622 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
14623 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
14624 // Operator (capture 2)
14625 "*([*^$|!~]?=)" + whitespace +
14626 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
14627 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
14628 "*\\]",
14629
14630 pseudos = ":(" + identifier + ")(?:\\((" +
14631 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
14632 // 1. quoted (capture 3; capture 4 or capture 5)
14633 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
14634 // 2. simple (capture 6)
14635 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
14636 // 3. anything else (capture 2)
14637 ".*" +
14638 ")\\)|)",
14639
14640 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
14641 rwhitespace = new RegExp( whitespace + "+", "g" ),
14642 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
14643
14644 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
14645 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
14646
14647 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
14648
14649 rpseudo = new RegExp( pseudos ),
14650 ridentifier = new RegExp( "^" + identifier + "$" ),
14651
14652 matchExpr = {
14653 "ID": new RegExp( "^#(" + identifier + ")" ),
14654 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
14655 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
14656 "ATTR": new RegExp( "^" + attributes ),
14657 "PSEUDO": new RegExp( "^" + pseudos ),
14658 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
14659 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
14660 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
14661 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
14662 // For use in libraries implementing .is()
14663 // We use this for POS matching in `select`
14664 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
14665 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
14666 },
14667
14668 rinputs = /^(?:input|select|textarea|button)$/i,
14669 rheader = /^h\d$/i,
14670
14671 rnative = /^[^{]+\{\s*\[native \w/,
14672
14673 // Easily-parseable/retrievable ID or TAG or CLASS selectors
14674 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
14675
14676 rsibling = /[+~]/,
14677
14678 // CSS escapes
14679 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
14680 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
14681 funescape = function( _, escaped, escapedWhitespace ) {
14682 var high = "0x" + escaped - 0x10000;
14683 // NaN means non-codepoint
14684 // Support: Firefox<24
14685 // Workaround erroneous numeric interpretation of +"0x"
14686 return high !== high || escapedWhitespace ?
14687 escaped :
14688 high < 0 ?
14689 // BMP codepoint
14690 String.fromCharCode( high + 0x10000 ) :
14691 // Supplemental Plane codepoint (surrogate pair)
14692 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
14693 },
14694
14695 // CSS string/identifier serialization
14696 // https://drafts.csswg.org/cssom/#common-serializing-idioms
14697 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
14698 fcssescape = function( ch, asCodePoint ) {
14699 if ( asCodePoint ) {
14700
14701 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
14702 if ( ch === "\0" ) {
14703 return "\uFFFD";
14704 }
14705
14706 // Control characters and (dependent upon position) numbers get escaped as code points
14707 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
14708 }
14709
14710 // Other potentially-special ASCII characters get backslash-escaped
14711 return "\\" + ch;
14712 },
14713
14714 // Used for iframes
14715 // See setDocument()
14716 // Removing the function wrapper causes a "Permission Denied"
14717 // error in IE
14718 unloadHandler = function() {
14719 setDocument();
14720 },
14721
14722 disabledAncestor = addCombinator(
14723 function( elem ) {
14724 return elem.disabled === true && ("form" in elem || "label" in elem);
14725 },
14726 { dir: "parentNode", next: "legend" }
14727 );
14728
14729 // Optimize for push.apply( _, NodeList )
14730 try {
14731 push.apply(
14732 (arr = slice.call( preferredDoc.childNodes )),
14733 preferredDoc.childNodes
14734 );
14735 // Support: Android<4.0
14736 // Detect silently failing push.apply
14737 arr[ preferredDoc.childNodes.length ].nodeType;
14738 } catch ( e ) {
14739 push = { apply: arr.length ?
14740
14741 // Leverage slice if possible
14742 function( target, els ) {
14743 push_native.apply( target, slice.call(els) );
14744 } :
14745
14746 // Support: IE<9
14747 // Otherwise append directly
14748 function( target, els ) {
14749 var j = target.length,
14750 i = 0;
14751 // Can't trust NodeList.length
14752 while ( (target[j++] = els[i++]) ) {}
14753 target.length = j - 1;
14754 }
14755 };
14756 }
14757
14758 function Sizzle( selector, context, results, seed ) {
14759 var m, i, elem, nid, match, groups, newSelector,
14760 newContext = context && context.ownerDocument,
14761
14762 // nodeType defaults to 9, since context defaults to document
14763 nodeType = context ? context.nodeType : 9;
14764
14765 results = results || [];
14766
14767 // Return early from calls with invalid selector or context
14768 if ( typeof selector !== "string" || !selector ||
14769 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
14770
14771 return results;
14772 }
14773
14774 // Try to shortcut find operations (as opposed to filters) in HTML documents
14775 if ( !seed ) {
14776
14777 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
14778 setDocument( context );
14779 }
14780 context = context || document;
14781
14782 if ( documentIsHTML ) {
14783
14784 // If the selector is sufficiently simple, try using a "get*By*" DOM method
14785 // (excepting DocumentFragment context, where the methods don't exist)
14786 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
14787
14788 // ID selector
14789 if ( (m = match[1]) ) {
14790
14791 // Document context
14792 if ( nodeType === 9 ) {
14793 if ( (elem = context.getElementById( m )) ) {
14794
14795 // Support: IE, Opera, Webkit
14796 // TODO: identify versions
14797 // getElementById can match elements by name instead of ID
14798 if ( elem.id === m ) {
14799 results.push( elem );
14800 return results;
14801 }
14802 } else {
14803 return results;
14804 }
14805
14806 // Element context
14807 } else {
14808
14809 // Support: IE, Opera, Webkit
14810 // TODO: identify versions
14811 // getElementById can match elements by name instead of ID
14812 if ( newContext && (elem = newContext.getElementById( m )) &&
14813 contains( context, elem ) &&
14814 elem.id === m ) {
14815
14816 results.push( elem );
14817 return results;
14818 }
14819 }
14820
14821 // Type selector
14822 } else if ( match[2] ) {
14823 push.apply( results, context.getElementsByTagName( selector ) );
14824 return results;
14825
14826 // Class selector
14827 } else if ( (m = match[3]) && support.getElementsByClassName &&
14828 context.getElementsByClassName ) {
14829
14830 push.apply( results, context.getElementsByClassName( m ) );
14831 return results;
14832 }
14833 }
14834
14835 // Take advantage of querySelectorAll
14836 if ( support.qsa &&
14837 !compilerCache[ selector + " " ] &&
14838 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
14839
14840 if ( nodeType !== 1 ) {
14841 newContext = context;
14842 newSelector = selector;
14843
14844 // qSA looks outside Element context, which is not what we want
14845 // Thanks to Andrew Dupont for this workaround technique
14846 // Support: IE <=8
14847 // Exclude object elements
14848 } else if ( context.nodeName.toLowerCase() !== "object" ) {
14849
14850 // Capture the context ID, setting it first if necessary
14851 if ( (nid = context.getAttribute( "id" )) ) {
14852 nid = nid.replace( rcssescape, fcssescape );
14853 } else {
14854 context.setAttribute( "id", (nid = expando) );
14855 }
14856
14857 // Prefix every selector in the list
14858 groups = tokenize( selector );
14859 i = groups.length;
14860 while ( i-- ) {
14861 groups[i] = "#" + nid + " " + toSelector( groups[i] );
14862 }
14863 newSelector = groups.join( "," );
14864
14865 // Expand context for sibling selectors
14866 newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
14867 context;
14868 }
14869
14870 if ( newSelector ) {
14871 try {
14872 push.apply( results,
14873 newContext.querySelectorAll( newSelector )
14874 );
14875 return results;
14876 } catch ( qsaError ) {
14877 } finally {
14878 if ( nid === expando ) {
14879 context.removeAttribute( "id" );
14880 }
14881 }
14882 }
14883 }
14884 }
14885 }
14886
14887 // All others
14888 return select( selector.replace( rtrim, "$1" ), context, results, seed );
14889 }
14890
14891 /**
14892 * Create key-value caches of limited size
14893 * @returns {function(string, object)} Returns the Object data after storing it on itself with
14894 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
14895 * deleting the oldest entry
14896 */
14897 function createCache() {
14898 var keys = [];
14899
14900 function cache( key, value ) {
14901 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
14902 if ( keys.push( key + " " ) > Expr.cacheLength ) {
14903 // Only keep the most recent entries
14904 delete cache[ keys.shift() ];
14905 }
14906 return (cache[ key + " " ] = value);
14907 }
14908 return cache;
14909 }
14910
14911 /**
14912 * Mark a function for special use by Sizzle
14913 * @param {Function} fn The function to mark
14914 */
14915 function markFunction( fn ) {
14916 fn[ expando ] = true;
14917 return fn;
14918 }
14919
14920 /**
14921 * Support testing using an element
14922 * @param {Function} fn Passed the created element and returns a boolean result
14923 */
14924 function assert( fn ) {
14925 var el = document.createElement("fieldset");
14926
14927 try {
14928 return !!fn( el );
14929 } catch (e) {
14930 return false;
14931 } finally {
14932 // Remove from its parent by default
14933 if ( el.parentNode ) {
14934 el.parentNode.removeChild( el );
14935 }
14936 // release memory in IE
14937 el = null;
14938 }
14939 }
14940
14941 /**
14942 * Adds the same handler for all of the specified attrs
14943 * @param {String} attrs Pipe-separated list of attributes
14944 * @param {Function} handler The method that will be applied
14945 */
14946 function addHandle( attrs, handler ) {
14947 var arr = attrs.split("|"),
14948 i = arr.length;
14949
14950 while ( i-- ) {
14951 Expr.attrHandle[ arr[i] ] = handler;
14952 }
14953 }
14954
14955 /**
14956 * Checks document order of two siblings
14957 * @param {Element} a
14958 * @param {Element} b
14959 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
14960 */
14961 function siblingCheck( a, b ) {
14962 var cur = b && a,
14963 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
14964 a.sourceIndex - b.sourceIndex;
14965
14966 // Use IE sourceIndex if available on both nodes
14967 if ( diff ) {
14968 return diff;
14969 }
14970
14971 // Check if b follows a
14972 if ( cur ) {
14973 while ( (cur = cur.nextSibling) ) {
14974 if ( cur === b ) {
14975 return -1;
14976 }
14977 }
14978 }
14979
14980 return a ? 1 : -1;
14981 }
14982
14983 /**
14984 * Returns a function to use in pseudos for input types
14985 * @param {String} type
14986 */
14987 function createInputPseudo( type ) {
14988 return function( elem ) {
14989 var name = elem.nodeName.toLowerCase();
14990 return name === "input" && elem.type === type;
14991 };
14992 }
14993
14994 /**
14995 * Returns a function to use in pseudos for buttons
14996 * @param {String} type
14997 */
14998 function createButtonPseudo( type ) {
14999 return function( elem ) {
15000 var name = elem.nodeName.toLowerCase();
15001 return (name === "input" || name === "button") && elem.type === type;
15002 };
15003 }
15004
15005 /**
15006 * Returns a function to use in pseudos for :enabled/:disabled
15007 * @param {Boolean} disabled true for :disabled; false for :enabled
15008 */
15009 function createDisabledPseudo( disabled ) {
15010
15011 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
15012 return function( elem ) {
15013
15014 // Only certain elements can match :enabled or :disabled
15015 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
15016 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
15017 if ( "form" in elem ) {
15018
15019 // Check for inherited disabledness on relevant non-disabled elements:
15020 // * listed form-associated elements in a disabled fieldset
15021 // https://html.spec.whatwg.org/multipage/forms.html#category-listed
15022 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
15023 // * option elements in a disabled optgroup
15024 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
15025 // All such elements have a "form" property.
15026 if ( elem.parentNode && elem.disabled === false ) {
15027
15028 // Option elements defer to a parent optgroup if present
15029 if ( "label" in elem ) {
15030 if ( "label" in elem.parentNode ) {
15031 return elem.parentNode.disabled === disabled;
15032 } else {
15033 return elem.disabled === disabled;
15034 }
15035 }
15036
15037 // Support: IE 6 - 11
15038 // Use the isDisabled shortcut property to check for disabled fieldset ancestors
15039 return elem.isDisabled === disabled ||
15040
15041 // Where there is no isDisabled, check manually
15042 /* jshint -W018 */
15043 elem.isDisabled !== !disabled &&
15044 disabledAncestor( elem ) === disabled;
15045 }
15046
15047 return elem.disabled === disabled;
15048
15049 // Try to winnow out elements that can't be disabled before trusting the disabled property.
15050 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
15051 // even exist on them, let alone have a boolean value.
15052 } else if ( "label" in elem ) {
15053 return elem.disabled === disabled;
15054 }
15055
15056 // Remaining elements are neither :enabled nor :disabled
15057 return false;
15058 };
15059 }
15060
15061 /**
15062 * Returns a function to use in pseudos for positionals
15063 * @param {Function} fn
15064 */
15065 function createPositionalPseudo( fn ) {
15066 return markFunction(function( argument ) {
15067 argument = +argument;
15068 return markFunction(function( seed, matches ) {
15069 var j,
15070 matchIndexes = fn( [], seed.length, argument ),
15071 i = matchIndexes.length;
15072
15073 // Match elements found at the specified indexes
15074 while ( i-- ) {
15075 if ( seed[ (j = matchIndexes[i]) ] ) {
15076 seed[j] = !(matches[j] = seed[j]);
15077 }
15078 }
15079 });
15080 });
15081 }
15082
15083 /**
15084 * Checks a node for validity as a Sizzle context
15085 * @param {Element|Object=} context
15086 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
15087 */
15088 function testContext( context ) {
15089 return context && typeof context.getElementsByTagName !== "undefined" && context;
15090 }
15091
15092 // Expose support vars for convenience
15093 support = Sizzle.support = {};
15094
15095 /**
15096 * Detects XML nodes
15097 * @param {Element|Object} elem An element or a document
15098 * @returns {Boolean} True iff elem is a non-HTML XML node
15099 */
15100 isXML = Sizzle.isXML = function( elem ) {
15101 // documentElement is verified for cases where it doesn't yet exist
15102 // (such as loading iframes in IE - #4833)
15103 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
15104 return documentElement ? documentElement.nodeName !== "HTML" : false;
15105 };
15106
15107 /**
15108 * Sets document-related variables once based on the current document
15109 * @param {Element|Object} [doc] An element or document object to use to set the document
15110 * @returns {Object} Returns the current document
15111 */
15112 setDocument = Sizzle.setDocument = function( node ) {
15113 var hasCompare, subWindow,
15114 doc = node ? node.ownerDocument || node : preferredDoc;
15115
15116 // Return early if doc is invalid or already selected
15117 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
15118 return document;
15119 }
15120
15121 // Update global variables
15122 document = doc;
15123 docElem = document.documentElement;
15124 documentIsHTML = !isXML( document );
15125
15126 // Support: IE 9-11, Edge
15127 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
15128 if ( preferredDoc !== document &&
15129 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
15130
15131 // Support: IE 11, Edge
15132 if ( subWindow.addEventListener ) {
15133 subWindow.addEventListener( "unload", unloadHandler, false );
15134
15135 // Support: IE 9 - 10 only
15136 } else if ( subWindow.attachEvent ) {
15137 subWindow.attachEvent( "onunload", unloadHandler );
15138 }
15139 }
15140
15141 /* Attributes
15142 ---------------------------------------------------------------------- */
15143
15144 // Support: IE<8
15145 // Verify that getAttribute really returns attributes and not properties
15146 // (excepting IE8 booleans)
15147 support.attributes = assert(function( el ) {
15148 el.className = "i";
15149 return !el.getAttribute("className");
15150 });
15151
15152 /* getElement(s)By*
15153 ---------------------------------------------------------------------- */
15154
15155 // Check if getElementsByTagName("*") returns only elements
15156 support.getElementsByTagName = assert(function( el ) {
15157 el.appendChild( document.createComment("") );
15158 return !el.getElementsByTagName("*").length;
15159 });
15160
15161 // Support: IE<9
15162 support.getElementsByClassName = rnative.test( document.getElementsByClassName );
15163
15164 // Support: IE<10
15165 // Check if getElementById returns elements by name
15166 // The broken getElementById methods don't pick up programmatically-set names,
15167 // so use a roundabout getElementsByName test
15168 support.getById = assert(function( el ) {
15169 docElem.appendChild( el ).id = expando;
15170 return !document.getElementsByName || !document.getElementsByName( expando ).length;
15171 });
15172
15173 // ID filter and find
15174 if ( support.getById ) {
15175 Expr.filter["ID"] = function( id ) {
15176 var attrId = id.replace( runescape, funescape );
15177 return function( elem ) {
15178 return elem.getAttribute("id") === attrId;
15179 };
15180 };
15181 Expr.find["ID"] = function( id, context ) {
15182 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15183 var elem = context.getElementById( id );
15184 return elem ? [ elem ] : [];
15185 }
15186 };
15187 } else {
15188 Expr.filter["ID"] = function( id ) {
15189 var attrId = id.replace( runescape, funescape );
15190 return function( elem ) {
15191 var node = typeof elem.getAttributeNode !== "undefined" &&
15192 elem.getAttributeNode("id");
15193 return node && node.value === attrId;
15194 };
15195 };
15196
15197 // Support: IE 6 - 7 only
15198 // getElementById is not reliable as a find shortcut
15199 Expr.find["ID"] = function( id, context ) {
15200 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15201 var node, i, elems,
15202 elem = context.getElementById( id );
15203
15204 if ( elem ) {
15205
15206 // Verify the id attribute
15207 node = elem.getAttributeNode("id");
15208 if ( node && node.value === id ) {
15209 return [ elem ];
15210 }
15211
15212 // Fall back on getElementsByName
15213 elems = context.getElementsByName( id );
15214 i = 0;
15215 while ( (elem = elems[i++]) ) {
15216 node = elem.getAttributeNode("id");
15217 if ( node && node.value === id ) {
15218 return [ elem ];
15219 }
15220 }
15221 }
15222
15223 return [];
15224 }
15225 };
15226 }
15227
15228 // Tag
15229 Expr.find["TAG"] = support.getElementsByTagName ?
15230 function( tag, context ) {
15231 if ( typeof context.getElementsByTagName !== "undefined" ) {
15232 return context.getElementsByTagName( tag );
15233
15234 // DocumentFragment nodes don't have gEBTN
15235 } else if ( support.qsa ) {
15236 return context.querySelectorAll( tag );
15237 }
15238 } :
15239
15240 function( tag, context ) {
15241 var elem,
15242 tmp = [],
15243 i = 0,
15244 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
15245 results = context.getElementsByTagName( tag );
15246
15247 // Filter out possible comments
15248 if ( tag === "*" ) {
15249 while ( (elem = results[i++]) ) {
15250 if ( elem.nodeType === 1 ) {
15251 tmp.push( elem );
15252 }
15253 }
15254
15255 return tmp;
15256 }
15257 return results;
15258 };
15259
15260 // Class
15261 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
15262 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
15263 return context.getElementsByClassName( className );
15264 }
15265 };
15266
15267 /* QSA/matchesSelector
15268 ---------------------------------------------------------------------- */
15269
15270 // QSA and matchesSelector support
15271
15272 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
15273 rbuggyMatches = [];
15274
15275 // qSa(:focus) reports false when true (Chrome 21)
15276 // We allow this because of a bug in IE8/9 that throws an error
15277 // whenever `document.activeElement` is accessed on an iframe
15278 // So, we allow :focus to pass through QSA all the time to avoid the IE error
15279 // See https://bugs.jquery.com/ticket/13378
15280 rbuggyQSA = [];
15281
15282 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
15283 // Build QSA regex
15284 // Regex strategy adopted from Diego Perini
15285 assert(function( el ) {
15286 // Select is set to empty string on purpose
15287 // This is to test IE's treatment of not explicitly
15288 // setting a boolean content attribute,
15289 // since its presence should be enough
15290 // https://bugs.jquery.com/ticket/12359
15291 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
15292 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
15293 "<option selected=''></option></select>";
15294
15295 // Support: IE8, Opera 11-12.16
15296 // Nothing should be selected when empty strings follow ^= or $= or *=
15297 // The test attribute must be unknown in Opera but "safe" for WinRT
15298 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
15299 if ( el.querySelectorAll("[msallowcapture^='']").length ) {
15300 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
15301 }
15302
15303 // Support: IE8
15304 // Boolean attributes and "value" are not treated correctly
15305 if ( !el.querySelectorAll("[selected]").length ) {
15306 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
15307 }
15308
15309 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
15310 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
15311 rbuggyQSA.push("~=");
15312 }
15313
15314 // Webkit/Opera - :checked should return selected option elements
15315 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15316 // IE8 throws error here and will not see later tests
15317 if ( !el.querySelectorAll(":checked").length ) {
15318 rbuggyQSA.push(":checked");
15319 }
15320
15321 // Support: Safari 8+, iOS 8+
15322 // https://bugs.webkit.org/show_bug.cgi?id=136851
15323 // In-page `selector#id sibling-combinator selector` fails
15324 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
15325 rbuggyQSA.push(".#.+[+~]");
15326 }
15327 });
15328
15329 assert(function( el ) {
15330 el.innerHTML = "<a href='' disabled='disabled'></a>" +
15331 "<select disabled='disabled'><option/></select>";
15332
15333 // Support: Windows 8 Native Apps
15334 // The type and name attributes are restricted during .innerHTML assignment
15335 var input = document.createElement("input");
15336 input.setAttribute( "type", "hidden" );
15337 el.appendChild( input ).setAttribute( "name", "D" );
15338
15339 // Support: IE8
15340 // Enforce case-sensitivity of name attribute
15341 if ( el.querySelectorAll("[name=d]").length ) {
15342 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
15343 }
15344
15345 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
15346 // IE8 throws error here and will not see later tests
15347 if ( el.querySelectorAll(":enabled").length !== 2 ) {
15348 rbuggyQSA.push( ":enabled", ":disabled" );
15349 }
15350
15351 // Support: IE9-11+
15352 // IE's :disabled selector does not pick up the children of disabled fieldsets
15353 docElem.appendChild( el ).disabled = true;
15354 if ( el.querySelectorAll(":disabled").length !== 2 ) {
15355 rbuggyQSA.push( ":enabled", ":disabled" );
15356 }
15357
15358 // Opera 10-11 does not throw on post-comma invalid pseudos
15359 el.querySelectorAll("*,:x");
15360 rbuggyQSA.push(",.*:");
15361 });
15362 }
15363
15364 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
15365 docElem.webkitMatchesSelector ||
15366 docElem.mozMatchesSelector ||
15367 docElem.oMatchesSelector ||
15368 docElem.msMatchesSelector) )) ) {
15369
15370 assert(function( el ) {
15371 // Check to see if it's possible to do matchesSelector
15372 // on a disconnected node (IE 9)
15373 support.disconnectedMatch = matches.call( el, "*" );
15374
15375 // This should fail with an exception
15376 // Gecko does not error, returns false instead
15377 matches.call( el, "[s!='']:x" );
15378 rbuggyMatches.push( "!=", pseudos );
15379 });
15380 }
15381
15382 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
15383 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
15384
15385 /* Contains
15386 ---------------------------------------------------------------------- */
15387 hasCompare = rnative.test( docElem.compareDocumentPosition );
15388
15389 // Element contains another
15390 // Purposefully self-exclusive
15391 // As in, an element does not contain itself
15392 contains = hasCompare || rnative.test( docElem.contains ) ?
15393 function( a, b ) {
15394 var adown = a.nodeType === 9 ? a.documentElement : a,
15395 bup = b && b.parentNode;
15396 return a === bup || !!( bup && bup.nodeType === 1 && (
15397 adown.contains ?
15398 adown.contains( bup ) :
15399 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
15400 ));
15401 } :
15402 function( a, b ) {
15403 if ( b ) {
15404 while ( (b = b.parentNode) ) {
15405 if ( b === a ) {
15406 return true;
15407 }
15408 }
15409 }
15410 return false;
15411 };
15412
15413 /* Sorting
15414 ---------------------------------------------------------------------- */
15415
15416 // Document order sorting
15417 sortOrder = hasCompare ?
15418 function( a, b ) {
15419
15420 // Flag for duplicate removal
15421 if ( a === b ) {
15422 hasDuplicate = true;
15423 return 0;
15424 }
15425
15426 // Sort on method existence if only one input has compareDocumentPosition
15427 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
15428 if ( compare ) {
15429 return compare;
15430 }
15431
15432 // Calculate position if both inputs belong to the same document
15433 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
15434 a.compareDocumentPosition( b ) :
15435
15436 // Otherwise we know they are disconnected
15437 1;
15438
15439 // Disconnected nodes
15440 if ( compare & 1 ||
15441 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
15442
15443 // Choose the first element that is related to our preferred document
15444 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
15445 return -1;
15446 }
15447 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
15448 return 1;
15449 }
15450
15451 // Maintain original order
15452 return sortInput ?
15453 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15454 0;
15455 }
15456
15457 return compare & 4 ? -1 : 1;
15458 } :
15459 function( a, b ) {
15460 // Exit early if the nodes are identical
15461 if ( a === b ) {
15462 hasDuplicate = true;
15463 return 0;
15464 }
15465
15466 var cur,
15467 i = 0,
15468 aup = a.parentNode,
15469 bup = b.parentNode,
15470 ap = [ a ],
15471 bp = [ b ];
15472
15473 // Parentless nodes are either documents or disconnected
15474 if ( !aup || !bup ) {
15475 return a === document ? -1 :
15476 b === document ? 1 :
15477 aup ? -1 :
15478 bup ? 1 :
15479 sortInput ?
15480 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15481 0;
15482
15483 // If the nodes are siblings, we can do a quick check
15484 } else if ( aup === bup ) {
15485 return siblingCheck( a, b );
15486 }
15487
15488 // Otherwise we need full lists of their ancestors for comparison
15489 cur = a;
15490 while ( (cur = cur.parentNode) ) {
15491 ap.unshift( cur );
15492 }
15493 cur = b;
15494 while ( (cur = cur.parentNode) ) {
15495 bp.unshift( cur );
15496 }
15497
15498 // Walk down the tree looking for a discrepancy
15499 while ( ap[i] === bp[i] ) {
15500 i++;
15501 }
15502
15503 return i ?
15504 // Do a sibling check if the nodes have a common ancestor
15505 siblingCheck( ap[i], bp[i] ) :
15506
15507 // Otherwise nodes in our document sort first
15508 ap[i] === preferredDoc ? -1 :
15509 bp[i] === preferredDoc ? 1 :
15510 0;
15511 };
15512
15513 return document;
15514 };
15515
15516 Sizzle.matches = function( expr, elements ) {
15517 return Sizzle( expr, null, null, elements );
15518 };
15519
15520 Sizzle.matchesSelector = function( elem, expr ) {
15521 // Set document vars if needed
15522 if ( ( elem.ownerDocument || elem ) !== document ) {
15523 setDocument( elem );
15524 }
15525
15526 // Make sure that attribute selectors are quoted
15527 expr = expr.replace( rattributeQuotes, "='$1']" );
15528
15529 if ( support.matchesSelector && documentIsHTML &&
15530 !compilerCache[ expr + " " ] &&
15531 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
15532 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
15533
15534 try {
15535 var ret = matches.call( elem, expr );
15536
15537 // IE 9's matchesSelector returns false on disconnected nodes
15538 if ( ret || support.disconnectedMatch ||
15539 // As well, disconnected nodes are said to be in a document
15540 // fragment in IE 9
15541 elem.document && elem.document.nodeType !== 11 ) {
15542 return ret;
15543 }
15544 } catch (e) {}
15545 }
15546
15547 return Sizzle( expr, document, null, [ elem ] ).length > 0;
15548 };
15549
15550 Sizzle.contains = function( context, elem ) {
15551 // Set document vars if needed
15552 if ( ( context.ownerDocument || context ) !== document ) {
15553 setDocument( context );
15554 }
15555 return contains( context, elem );
15556 };
15557
15558 Sizzle.attr = function( elem, name ) {
15559 // Set document vars if needed
15560 if ( ( elem.ownerDocument || elem ) !== document ) {
15561 setDocument( elem );
15562 }
15563
15564 var fn = Expr.attrHandle[ name.toLowerCase() ],
15565 // Don't get fooled by Object.prototype properties (jQuery #13807)
15566 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
15567 fn( elem, name, !documentIsHTML ) :
15568 undefined;
15569
15570 return val !== undefined ?
15571 val :
15572 support.attributes || !documentIsHTML ?
15573 elem.getAttribute( name ) :
15574 (val = elem.getAttributeNode(name)) && val.specified ?
15575 val.value :
15576 null;
15577 };
15578
15579 Sizzle.escape = function( sel ) {
15580 return (sel + "").replace( rcssescape, fcssescape );
15581 };
15582
15583 Sizzle.error = function( msg ) {
15584 throw new Error( "Syntax error, unrecognized expression: " + msg );
15585 };
15586
15587 /**
15588 * Document sorting and removing duplicates
15589 * @param {ArrayLike} results
15590 */
15591 Sizzle.uniqueSort = function( results ) {
15592 var elem,
15593 duplicates = [],
15594 j = 0,
15595 i = 0;
15596
15597 // Unless we *know* we can detect duplicates, assume their presence
15598 hasDuplicate = !support.detectDuplicates;
15599 sortInput = !support.sortStable && results.slice( 0 );
15600 results.sort( sortOrder );
15601
15602 if ( hasDuplicate ) {
15603 while ( (elem = results[i++]) ) {
15604 if ( elem === results[ i ] ) {
15605 j = duplicates.push( i );
15606 }
15607 }
15608 while ( j-- ) {
15609 results.splice( duplicates[ j ], 1 );
15610 }
15611 }
15612
15613 // Clear input after sorting to release objects
15614 // See https://github.com/jquery/sizzle/pull/225
15615 sortInput = null;
15616
15617 return results;
15618 };
15619
15620 /**
15621 * Utility function for retrieving the text value of an array of DOM nodes
15622 * @param {Array|Element} elem
15623 */
15624 getText = Sizzle.getText = function( elem ) {
15625 var node,
15626 ret = "",
15627 i = 0,
15628 nodeType = elem.nodeType;
15629
15630 if ( !nodeType ) {
15631 // If no nodeType, this is expected to be an array
15632 while ( (node = elem[i++]) ) {
15633 // Do not traverse comment nodes
15634 ret += getText( node );
15635 }
15636 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
15637 // Use textContent for elements
15638 // innerText usage removed for consistency of new lines (jQuery #11153)
15639 if ( typeof elem.textContent === "string" ) {
15640 return elem.textContent;
15641 } else {
15642 // Traverse its children
15643 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15644 ret += getText( elem );
15645 }
15646 }
15647 } else if ( nodeType === 3 || nodeType === 4 ) {
15648 return elem.nodeValue;
15649 }
15650 // Do not include comment or processing instruction nodes
15651
15652 return ret;
15653 };
15654
15655 Expr = Sizzle.selectors = {
15656
15657 // Can be adjusted by the user
15658 cacheLength: 50,
15659
15660 createPseudo: markFunction,
15661
15662 match: matchExpr,
15663
15664 attrHandle: {},
15665
15666 find: {},
15667
15668 relative: {
15669 ">": { dir: "parentNode", first: true },
15670 " ": { dir: "parentNode" },
15671 "+": { dir: "previousSibling", first: true },
15672 "~": { dir: "previousSibling" }
15673 },
15674
15675 preFilter: {
15676 "ATTR": function( match ) {
15677 match[1] = match[1].replace( runescape, funescape );
15678
15679 // Move the given value to match[3] whether quoted or unquoted
15680 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
15681
15682 if ( match[2] === "~=" ) {
15683 match[3] = " " + match[3] + " ";
15684 }
15685
15686 return match.slice( 0, 4 );
15687 },
15688
15689 "CHILD": function( match ) {
15690 /* matches from matchExpr["CHILD"]
15691 1 type (only|nth|...)
15692 2 what (child|of-type)
15693 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
15694 4 xn-component of xn+y argument ([+-]?\d*n|)
15695 5 sign of xn-component
15696 6 x of xn-component
15697 7 sign of y-component
15698 8 y of y-component
15699 */
15700 match[1] = match[1].toLowerCase();
15701
15702 if ( match[1].slice( 0, 3 ) === "nth" ) {
15703 // nth-* requires argument
15704 if ( !match[3] ) {
15705 Sizzle.error( match[0] );
15706 }
15707
15708 // numeric x and y parameters for Expr.filter.CHILD
15709 // remember that false/true cast respectively to 0/1
15710 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
15711 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
15712
15713 // other types prohibit arguments
15714 } else if ( match[3] ) {
15715 Sizzle.error( match[0] );
15716 }
15717
15718 return match;
15719 },
15720
15721 "PSEUDO": function( match ) {
15722 var excess,
15723 unquoted = !match[6] && match[2];
15724
15725 if ( matchExpr["CHILD"].test( match[0] ) ) {
15726 return null;
15727 }
15728
15729 // Accept quoted arguments as-is
15730 if ( match[3] ) {
15731 match[2] = match[4] || match[5] || "";
15732
15733 // Strip excess characters from unquoted arguments
15734 } else if ( unquoted && rpseudo.test( unquoted ) &&
15735 // Get excess from tokenize (recursively)
15736 (excess = tokenize( unquoted, true )) &&
15737 // advance to the next closing parenthesis
15738 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
15739
15740 // excess is a negative index
15741 match[0] = match[0].slice( 0, excess );
15742 match[2] = unquoted.slice( 0, excess );
15743 }
15744
15745 // Return only captures needed by the pseudo filter method (type and argument)
15746 return match.slice( 0, 3 );
15747 }
15748 },
15749
15750 filter: {
15751
15752 "TAG": function( nodeNameSelector ) {
15753 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
15754 return nodeNameSelector === "*" ?
15755 function() { return true; } :
15756 function( elem ) {
15757 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
15758 };
15759 },
15760
15761 "CLASS": function( className ) {
15762 var pattern = classCache[ className + " " ];
15763
15764 return pattern ||
15765 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
15766 classCache( className, function( elem ) {
15767 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
15768 });
15769 },
15770
15771 "ATTR": function( name, operator, check ) {
15772 return function( elem ) {
15773 var result = Sizzle.attr( elem, name );
15774
15775 if ( result == null ) {
15776 return operator === "!=";
15777 }
15778 if ( !operator ) {
15779 return true;
15780 }
15781
15782 result += "";
15783
15784 return operator === "=" ? result === check :
15785 operator === "!=" ? result !== check :
15786 operator === "^=" ? check && result.indexOf( check ) === 0 :
15787 operator === "*=" ? check && result.indexOf( check ) > -1 :
15788 operator === "$=" ? check && result.slice( -check.length ) === check :
15789 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
15790 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
15791 false;
15792 };
15793 },
15794
15795 "CHILD": function( type, what, argument, first, last ) {
15796 var simple = type.slice( 0, 3 ) !== "nth",
15797 forward = type.slice( -4 ) !== "last",
15798 ofType = what === "of-type";
15799
15800 return first === 1 && last === 0 ?
15801
15802 // Shortcut for :nth-*(n)
15803 function( elem ) {
15804 return !!elem.parentNode;
15805 } :
15806
15807 function( elem, context, xml ) {
15808 var cache, uniqueCache, outerCache, node, nodeIndex, start,
15809 dir = simple !== forward ? "nextSibling" : "previousSibling",
15810 parent = elem.parentNode,
15811 name = ofType && elem.nodeName.toLowerCase(),
15812 useCache = !xml && !ofType,
15813 diff = false;
15814
15815 if ( parent ) {
15816
15817 // :(first|last|only)-(child|of-type)
15818 if ( simple ) {
15819 while ( dir ) {
15820 node = elem;
15821 while ( (node = node[ dir ]) ) {
15822 if ( ofType ?
15823 node.nodeName.toLowerCase() === name :
15824 node.nodeType === 1 ) {
15825
15826 return false;
15827 }
15828 }
15829 // Reverse direction for :only-* (if we haven't yet done so)
15830 start = dir = type === "only" && !start && "nextSibling";
15831 }
15832 return true;
15833 }
15834
15835 start = [ forward ? parent.firstChild : parent.lastChild ];
15836
15837 // non-xml :nth-child(...) stores cache data on `parent`
15838 if ( forward && useCache ) {
15839
15840 // Seek `elem` from a previously-cached index
15841
15842 // ...in a gzip-friendly way
15843 node = parent;
15844 outerCache = node[ expando ] || (node[ expando ] = {});
15845
15846 // Support: IE <9 only
15847 // Defend against cloned attroperties (jQuery gh-1709)
15848 uniqueCache = outerCache[ node.uniqueID ] ||
15849 (outerCache[ node.uniqueID ] = {});
15850
15851 cache = uniqueCache[ type ] || [];
15852 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15853 diff = nodeIndex && cache[ 2 ];
15854 node = nodeIndex && parent.childNodes[ nodeIndex ];
15855
15856 while ( (node = ++nodeIndex && node && node[ dir ] ||
15857
15858 // Fallback to seeking `elem` from the start
15859 (diff = nodeIndex = 0) || start.pop()) ) {
15860
15861 // When found, cache indexes on `parent` and break
15862 if ( node.nodeType === 1 && ++diff && node === elem ) {
15863 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
15864 break;
15865 }
15866 }
15867
15868 } else {
15869 // Use previously-cached element index if available
15870 if ( useCache ) {
15871 // ...in a gzip-friendly way
15872 node = elem;
15873 outerCache = node[ expando ] || (node[ expando ] = {});
15874
15875 // Support: IE <9 only
15876 // Defend against cloned attroperties (jQuery gh-1709)
15877 uniqueCache = outerCache[ node.uniqueID ] ||
15878 (outerCache[ node.uniqueID ] = {});
15879
15880 cache = uniqueCache[ type ] || [];
15881 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15882 diff = nodeIndex;
15883 }
15884
15885 // xml :nth-child(...)
15886 // or :nth-last-child(...) or :nth(-last)?-of-type(...)
15887 if ( diff === false ) {
15888 // Use the same loop as above to seek `elem` from the start
15889 while ( (node = ++nodeIndex && node && node[ dir ] ||
15890 (diff = nodeIndex = 0) || start.pop()) ) {
15891
15892 if ( ( ofType ?
15893 node.nodeName.toLowerCase() === name :
15894 node.nodeType === 1 ) &&
15895 ++diff ) {
15896
15897 // Cache the index of each encountered element
15898 if ( useCache ) {
15899 outerCache = node[ expando ] || (node[ expando ] = {});
15900
15901 // Support: IE <9 only
15902 // Defend against cloned attroperties (jQuery gh-1709)
15903 uniqueCache = outerCache[ node.uniqueID ] ||
15904 (outerCache[ node.uniqueID ] = {});
15905
15906 uniqueCache[ type ] = [ dirruns, diff ];
15907 }
15908
15909 if ( node === elem ) {
15910 break;
15911 }
15912 }
15913 }
15914 }
15915 }
15916
15917 // Incorporate the offset, then check against cycle size
15918 diff -= last;
15919 return diff === first || ( diff % first === 0 && diff / first >= 0 );
15920 }
15921 };
15922 },
15923
15924 "PSEUDO": function( pseudo, argument ) {
15925 // pseudo-class names are case-insensitive
15926 // http://www.w3.org/TR/selectors/#pseudo-classes
15927 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
15928 // Remember that setFilters inherits from pseudos
15929 var args,
15930 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
15931 Sizzle.error( "unsupported pseudo: " + pseudo );
15932
15933 // The user may use createPseudo to indicate that
15934 // arguments are needed to create the filter function
15935 // just as Sizzle does
15936 if ( fn[ expando ] ) {
15937 return fn( argument );
15938 }
15939
15940 // But maintain support for old signatures
15941 if ( fn.length > 1 ) {
15942 args = [ pseudo, pseudo, "", argument ];
15943 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
15944 markFunction(function( seed, matches ) {
15945 var idx,
15946 matched = fn( seed, argument ),
15947 i = matched.length;
15948 while ( i-- ) {
15949 idx = indexOf( seed, matched[i] );
15950 seed[ idx ] = !( matches[ idx ] = matched[i] );
15951 }
15952 }) :
15953 function( elem ) {
15954 return fn( elem, 0, args );
15955 };
15956 }
15957
15958 return fn;
15959 }
15960 },
15961
15962 pseudos: {
15963 // Potentially complex pseudos
15964 "not": markFunction(function( selector ) {
15965 // Trim the selector passed to compile
15966 // to avoid treating leading and trailing
15967 // spaces as combinators
15968 var input = [],
15969 results = [],
15970 matcher = compile( selector.replace( rtrim, "$1" ) );
15971
15972 return matcher[ expando ] ?
15973 markFunction(function( seed, matches, context, xml ) {
15974 var elem,
15975 unmatched = matcher( seed, null, xml, [] ),
15976 i = seed.length;
15977
15978 // Match elements unmatched by `matcher`
15979 while ( i-- ) {
15980 if ( (elem = unmatched[i]) ) {
15981 seed[i] = !(matches[i] = elem);
15982 }
15983 }
15984 }) :
15985 function( elem, context, xml ) {
15986 input[0] = elem;
15987 matcher( input, null, xml, results );
15988 // Don't keep the element (issue #299)
15989 input[0] = null;
15990 return !results.pop();
15991 };
15992 }),
15993
15994 "has": markFunction(function( selector ) {
15995 return function( elem ) {
15996 return Sizzle( selector, elem ).length > 0;
15997 };
15998 }),
15999
16000 "contains": markFunction(function( text ) {
16001 text = text.replace( runescape, funescape );
16002 return function( elem ) {
16003 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
16004 };
16005 }),
16006
16007 // "Whether an element is represented by a :lang() selector
16008 // is based solely on the element's language value
16009 // being equal to the identifier C,
16010 // or beginning with the identifier C immediately followed by "-".
16011 // The matching of C against the element's language value is performed case-insensitively.
16012 // The identifier C does not have to be a valid language name."
16013 // http://www.w3.org/TR/selectors/#lang-pseudo
16014 "lang": markFunction( function( lang ) {
16015 // lang value must be a valid identifier
16016 if ( !ridentifier.test(lang || "") ) {
16017 Sizzle.error( "unsupported lang: " + lang );
16018 }
16019 lang = lang.replace( runescape, funescape ).toLowerCase();
16020 return function( elem ) {
16021 var elemLang;
16022 do {
16023 if ( (elemLang = documentIsHTML ?
16024 elem.lang :
16025 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
16026
16027 elemLang = elemLang.toLowerCase();
16028 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
16029 }
16030 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
16031 return false;
16032 };
16033 }),
16034
16035 // Miscellaneous
16036 "target": function( elem ) {
16037 var hash = window.location && window.location.hash;
16038 return hash && hash.slice( 1 ) === elem.id;
16039 },
16040
16041 "root": function( elem ) {
16042 return elem === docElem;
16043 },
16044
16045 "focus": function( elem ) {
16046 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
16047 },
16048
16049 // Boolean properties
16050 "enabled": createDisabledPseudo( false ),
16051 "disabled": createDisabledPseudo( true ),
16052
16053 "checked": function( elem ) {
16054 // In CSS3, :checked should return both checked and selected elements
16055 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
16056 var nodeName = elem.nodeName.toLowerCase();
16057 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
16058 },
16059
16060 "selected": function( elem ) {
16061 // Accessing this property makes selected-by-default
16062 // options in Safari work properly
16063 if ( elem.parentNode ) {
16064 elem.parentNode.selectedIndex;
16065 }
16066
16067 return elem.selected === true;
16068 },
16069
16070 // Contents
16071 "empty": function( elem ) {
16072 // http://www.w3.org/TR/selectors/#empty-pseudo
16073 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
16074 // but not by others (comment: 8; processing instruction: 7; etc.)
16075 // nodeType < 6 works because attributes (2) do not appear as children
16076 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
16077 if ( elem.nodeType < 6 ) {
16078 return false;
16079 }
16080 }
16081 return true;
16082 },
16083
16084 "parent": function( elem ) {
16085 return !Expr.pseudos["empty"]( elem );
16086 },
16087
16088 // Element/input types
16089 "header": function( elem ) {
16090 return rheader.test( elem.nodeName );
16091 },
16092
16093 "input": function( elem ) {
16094 return rinputs.test( elem.nodeName );
16095 },
16096
16097 "button": function( elem ) {
16098 var name = elem.nodeName.toLowerCase();
16099 return name === "input" && elem.type === "button" || name === "button";
16100 },
16101
16102 "text": function( elem ) {
16103 var attr;
16104 return elem.nodeName.toLowerCase() === "input" &&
16105 elem.type === "text" &&
16106
16107 // Support: IE<8
16108 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
16109 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
16110 },
16111
16112 // Position-in-collection
16113 "first": createPositionalPseudo(function() {
16114 return [ 0 ];
16115 }),
16116
16117 "last": createPositionalPseudo(function( matchIndexes, length ) {
16118 return [ length - 1 ];
16119 }),
16120
16121 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
16122 return [ argument < 0 ? argument + length : argument ];
16123 }),
16124
16125 "even": createPositionalPseudo(function( matchIndexes, length ) {
16126 var i = 0;
16127 for ( ; i < length; i += 2 ) {
16128 matchIndexes.push( i );
16129 }
16130 return matchIndexes;
16131 }),
16132
16133 "odd": createPositionalPseudo(function( matchIndexes, length ) {
16134 var i = 1;
16135 for ( ; i < length; i += 2 ) {
16136 matchIndexes.push( i );
16137 }
16138 return matchIndexes;
16139 }),
16140
16141 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16142 var i = argument < 0 ? argument + length : argument;
16143 for ( ; --i >= 0; ) {
16144 matchIndexes.push( i );
16145 }
16146 return matchIndexes;
16147 }),
16148
16149 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16150 var i = argument < 0 ? argument + length : argument;
16151 for ( ; ++i < length; ) {
16152 matchIndexes.push( i );
16153 }
16154 return matchIndexes;
16155 })
16156 }
16157 };
16158
16159 Expr.pseudos["nth"] = Expr.pseudos["eq"];
16160
16161 // Add button/input type pseudos
16162 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
16163 Expr.pseudos[ i ] = createInputPseudo( i );
16164 }
16165 for ( i in { submit: true, reset: true } ) {
16166 Expr.pseudos[ i ] = createButtonPseudo( i );
16167 }
16168
16169 // Easy API for creating new setFilters
16170 function setFilters() {}
16171 setFilters.prototype = Expr.filters = Expr.pseudos;
16172 Expr.setFilters = new setFilters();
16173
16174 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
16175 var matched, match, tokens, type,
16176 soFar, groups, preFilters,
16177 cached = tokenCache[ selector + " " ];
16178
16179 if ( cached ) {
16180 return parseOnly ? 0 : cached.slice( 0 );
16181 }
16182
16183 soFar = selector;
16184 groups = [];
16185 preFilters = Expr.preFilter;
16186
16187 while ( soFar ) {
16188
16189 // Comma and first run
16190 if ( !matched || (match = rcomma.exec( soFar )) ) {
16191 if ( match ) {
16192 // Don't consume trailing commas as valid
16193 soFar = soFar.slice( match[0].length ) || soFar;
16194 }
16195 groups.push( (tokens = []) );
16196 }
16197
16198 matched = false;
16199
16200 // Combinators
16201 if ( (match = rcombinators.exec( soFar )) ) {
16202 matched = match.shift();
16203 tokens.push({
16204 value: matched,
16205 // Cast descendant combinators to space
16206 type: match[0].replace( rtrim, " " )
16207 });
16208 soFar = soFar.slice( matched.length );
16209 }
16210
16211 // Filters
16212 for ( type in Expr.filter ) {
16213 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
16214 (match = preFilters[ type ]( match ))) ) {
16215 matched = match.shift();
16216 tokens.push({
16217 value: matched,
16218 type: type,
16219 matches: match
16220 });
16221 soFar = soFar.slice( matched.length );
16222 }
16223 }
16224
16225 if ( !matched ) {
16226 break;
16227 }
16228 }
16229
16230 // Return the length of the invalid excess
16231 // if we're just parsing
16232 // Otherwise, throw an error or return tokens
16233 return parseOnly ?
16234 soFar.length :
16235 soFar ?
16236 Sizzle.error( selector ) :
16237 // Cache the tokens
16238 tokenCache( selector, groups ).slice( 0 );
16239 };
16240
16241 function toSelector( tokens ) {
16242 var i = 0,
16243 len = tokens.length,
16244 selector = "";
16245 for ( ; i < len; i++ ) {
16246 selector += tokens[i].value;
16247 }
16248 return selector;
16249 }
16250
16251 function addCombinator( matcher, combinator, base ) {
16252 var dir = combinator.dir,
16253 skip = combinator.next,
16254 key = skip || dir,
16255 checkNonElements = base && key === "parentNode",
16256 doneName = done++;
16257
16258 return combinator.first ?
16259 // Check against closest ancestor/preceding element
16260 function( elem, context, xml ) {
16261 while ( (elem = elem[ dir ]) ) {
16262 if ( elem.nodeType === 1 || checkNonElements ) {
16263 return matcher( elem, context, xml );
16264 }
16265 }
16266 return false;
16267 } :
16268
16269 // Check against all ancestor/preceding elements
16270 function( elem, context, xml ) {
16271 var oldCache, uniqueCache, outerCache,
16272 newCache = [ dirruns, doneName ];
16273
16274 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
16275 if ( xml ) {
16276 while ( (elem = elem[ dir ]) ) {
16277 if ( elem.nodeType === 1 || checkNonElements ) {
16278 if ( matcher( elem, context, xml ) ) {
16279 return true;
16280 }
16281 }
16282 }
16283 } else {
16284 while ( (elem = elem[ dir ]) ) {
16285 if ( elem.nodeType === 1 || checkNonElements ) {
16286 outerCache = elem[ expando ] || (elem[ expando ] = {});
16287
16288 // Support: IE <9 only
16289 // Defend against cloned attroperties (jQuery gh-1709)
16290 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
16291
16292 if ( skip && skip === elem.nodeName.toLowerCase() ) {
16293 elem = elem[ dir ] || elem;
16294 } else if ( (oldCache = uniqueCache[ key ]) &&
16295 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
16296
16297 // Assign to newCache so results back-propagate to previous elements
16298 return (newCache[ 2 ] = oldCache[ 2 ]);
16299 } else {
16300 // Reuse newcache so results back-propagate to previous elements
16301 uniqueCache[ key ] = newCache;
16302
16303 // A match means we're done; a fail means we have to keep checking
16304 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
16305 return true;
16306 }
16307 }
16308 }
16309 }
16310 }
16311 return false;
16312 };
16313 }
16314
16315 function elementMatcher( matchers ) {
16316 return matchers.length > 1 ?
16317 function( elem, context, xml ) {
16318 var i = matchers.length;
16319 while ( i-- ) {
16320 if ( !matchers[i]( elem, context, xml ) ) {
16321 return false;
16322 }
16323 }
16324 return true;
16325 } :
16326 matchers[0];
16327 }
16328
16329 function multipleContexts( selector, contexts, results ) {
16330 var i = 0,
16331 len = contexts.length;
16332 for ( ; i < len; i++ ) {
16333 Sizzle( selector, contexts[i], results );
16334 }
16335 return results;
16336 }
16337
16338 function condense( unmatched, map, filter, context, xml ) {
16339 var elem,
16340 newUnmatched = [],
16341 i = 0,
16342 len = unmatched.length,
16343 mapped = map != null;
16344
16345 for ( ; i < len; i++ ) {
16346 if ( (elem = unmatched[i]) ) {
16347 if ( !filter || filter( elem, context, xml ) ) {
16348 newUnmatched.push( elem );
16349 if ( mapped ) {
16350 map.push( i );
16351 }
16352 }
16353 }
16354 }
16355
16356 return newUnmatched;
16357 }
16358
16359 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
16360 if ( postFilter && !postFilter[ expando ] ) {
16361 postFilter = setMatcher( postFilter );
16362 }
16363 if ( postFinder && !postFinder[ expando ] ) {
16364 postFinder = setMatcher( postFinder, postSelector );
16365 }
16366 return markFunction(function( seed, results, context, xml ) {
16367 var temp, i, elem,
16368 preMap = [],
16369 postMap = [],
16370 preexisting = results.length,
16371
16372 // Get initial elements from seed or context
16373 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
16374
16375 // Prefilter to get matcher input, preserving a map for seed-results synchronization
16376 matcherIn = preFilter && ( seed || !selector ) ?
16377 condense( elems, preMap, preFilter, context, xml ) :
16378 elems,
16379
16380 matcherOut = matcher ?
16381 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
16382 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
16383
16384 // ...intermediate processing is necessary
16385 [] :
16386
16387 // ...otherwise use results directly
16388 results :
16389 matcherIn;
16390
16391 // Find primary matches
16392 if ( matcher ) {
16393 matcher( matcherIn, matcherOut, context, xml );
16394 }
16395
16396 // Apply postFilter
16397 if ( postFilter ) {
16398 temp = condense( matcherOut, postMap );
16399 postFilter( temp, [], context, xml );
16400
16401 // Un-match failing elements by moving them back to matcherIn
16402 i = temp.length;
16403 while ( i-- ) {
16404 if ( (elem = temp[i]) ) {
16405 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
16406 }
16407 }
16408 }
16409
16410 if ( seed ) {
16411 if ( postFinder || preFilter ) {
16412 if ( postFinder ) {
16413 // Get the final matcherOut by condensing this intermediate into postFinder contexts
16414 temp = [];
16415 i = matcherOut.length;
16416 while ( i-- ) {
16417 if ( (elem = matcherOut[i]) ) {
16418 // Restore matcherIn since elem is not yet a final match
16419 temp.push( (matcherIn[i] = elem) );
16420 }
16421 }
16422 postFinder( null, (matcherOut = []), temp, xml );
16423 }
16424
16425 // Move matched elements from seed to results to keep them synchronized
16426 i = matcherOut.length;
16427 while ( i-- ) {
16428 if ( (elem = matcherOut[i]) &&
16429 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
16430
16431 seed[temp] = !(results[temp] = elem);
16432 }
16433 }
16434 }
16435
16436 // Add elements to results, through postFinder if defined
16437 } else {
16438 matcherOut = condense(
16439 matcherOut === results ?
16440 matcherOut.splice( preexisting, matcherOut.length ) :
16441 matcherOut
16442 );
16443 if ( postFinder ) {
16444 postFinder( null, results, matcherOut, xml );
16445 } else {
16446 push.apply( results, matcherOut );
16447 }
16448 }
16449 });
16450 }
16451
16452 function matcherFromTokens( tokens ) {
16453 var checkContext, matcher, j,
16454 len = tokens.length,
16455 leadingRelative = Expr.relative[ tokens[0].type ],
16456 implicitRelative = leadingRelative || Expr.relative[" "],
16457 i = leadingRelative ? 1 : 0,
16458
16459 // The foundational matcher ensures that elements are reachable from top-level context(s)
16460 matchContext = addCombinator( function( elem ) {
16461 return elem === checkContext;
16462 }, implicitRelative, true ),
16463 matchAnyContext = addCombinator( function( elem ) {
16464 return indexOf( checkContext, elem ) > -1;
16465 }, implicitRelative, true ),
16466 matchers = [ function( elem, context, xml ) {
16467 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
16468 (checkContext = context).nodeType ?
16469 matchContext( elem, context, xml ) :
16470 matchAnyContext( elem, context, xml ) );
16471 // Avoid hanging onto element (issue #299)
16472 checkContext = null;
16473 return ret;
16474 } ];
16475
16476 for ( ; i < len; i++ ) {
16477 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
16478 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
16479 } else {
16480 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
16481
16482 // Return special upon seeing a positional matcher
16483 if ( matcher[ expando ] ) {
16484 // Find the next relative operator (if any) for proper handling
16485 j = ++i;
16486 for ( ; j < len; j++ ) {
16487 if ( Expr.relative[ tokens[j].type ] ) {
16488 break;
16489 }
16490 }
16491 return setMatcher(
16492 i > 1 && elementMatcher( matchers ),
16493 i > 1 && toSelector(
16494 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
16495 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
16496 ).replace( rtrim, "$1" ),
16497 matcher,
16498 i < j && matcherFromTokens( tokens.slice( i, j ) ),
16499 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
16500 j < len && toSelector( tokens )
16501 );
16502 }
16503 matchers.push( matcher );
16504 }
16505 }
16506
16507 return elementMatcher( matchers );
16508 }
16509
16510 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
16511 var bySet = setMatchers.length > 0,
16512 byElement = elementMatchers.length > 0,
16513 superMatcher = function( seed, context, xml, results, outermost ) {
16514 var elem, j, matcher,
16515 matchedCount = 0,
16516 i = "0",
16517 unmatched = seed && [],
16518 setMatched = [],
16519 contextBackup = outermostContext,
16520 // We must always have either seed elements or outermost context
16521 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
16522 // Use integer dirruns iff this is the outermost matcher
16523 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
16524 len = elems.length;
16525
16526 if ( outermost ) {
16527 outermostContext = context === document || context || outermost;
16528 }
16529
16530 // Add elements passing elementMatchers directly to results
16531 // Support: IE<9, Safari
16532 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
16533 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
16534 if ( byElement && elem ) {
16535 j = 0;
16536 if ( !context && elem.ownerDocument !== document ) {
16537 setDocument( elem );
16538 xml = !documentIsHTML;
16539 }
16540 while ( (matcher = elementMatchers[j++]) ) {
16541 if ( matcher( elem, context || document, xml) ) {
16542 results.push( elem );
16543 break;
16544 }
16545 }
16546 if ( outermost ) {
16547 dirruns = dirrunsUnique;
16548 }
16549 }
16550
16551 // Track unmatched elements for set filters
16552 if ( bySet ) {
16553 // They will have gone through all possible matchers
16554 if ( (elem = !matcher && elem) ) {
16555 matchedCount--;
16556 }
16557
16558 // Lengthen the array for every element, matched or not
16559 if ( seed ) {
16560 unmatched.push( elem );
16561 }
16562 }
16563 }
16564
16565 // `i` is now the count of elements visited above, and adding it to `matchedCount`
16566 // makes the latter nonnegative.
16567 matchedCount += i;
16568
16569 // Apply set filters to unmatched elements
16570 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
16571 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
16572 // no element matchers and no seed.
16573 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
16574 // case, which will result in a "00" `matchedCount` that differs from `i` but is also
16575 // numerically zero.
16576 if ( bySet && i !== matchedCount ) {
16577 j = 0;
16578 while ( (matcher = setMatchers[j++]) ) {
16579 matcher( unmatched, setMatched, context, xml );
16580 }
16581
16582 if ( seed ) {
16583 // Reintegrate element matches to eliminate the need for sorting
16584 if ( matchedCount > 0 ) {
16585 while ( i-- ) {
16586 if ( !(unmatched[i] || setMatched[i]) ) {
16587 setMatched[i] = pop.call( results );
16588 }
16589 }
16590 }
16591
16592 // Discard index placeholder values to get only actual matches
16593 setMatched = condense( setMatched );
16594 }
16595
16596 // Add matches to results
16597 push.apply( results, setMatched );
16598
16599 // Seedless set matches succeeding multiple successful matchers stipulate sorting
16600 if ( outermost && !seed && setMatched.length > 0 &&
16601 ( matchedCount + setMatchers.length ) > 1 ) {
16602
16603 Sizzle.uniqueSort( results );
16604 }
16605 }
16606
16607 // Override manipulation of globals by nested matchers
16608 if ( outermost ) {
16609 dirruns = dirrunsUnique;
16610 outermostContext = contextBackup;
16611 }
16612
16613 return unmatched;
16614 };
16615
16616 return bySet ?
16617 markFunction( superMatcher ) :
16618 superMatcher;
16619 }
16620
16621 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
16622 var i,
16623 setMatchers = [],
16624 elementMatchers = [],
16625 cached = compilerCache[ selector + " " ];
16626
16627 if ( !cached ) {
16628 // Generate a function of recursive functions that can be used to check each element
16629 if ( !match ) {
16630 match = tokenize( selector );
16631 }
16632 i = match.length;
16633 while ( i-- ) {
16634 cached = matcherFromTokens( match[i] );
16635 if ( cached[ expando ] ) {
16636 setMatchers.push( cached );
16637 } else {
16638 elementMatchers.push( cached );
16639 }
16640 }
16641
16642 // Cache the compiled function
16643 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
16644
16645 // Save selector and tokenization
16646 cached.selector = selector;
16647 }
16648 return cached;
16649 };
16650
16651 /**
16652 * A low-level selection function that works with Sizzle's compiled
16653 * selector functions
16654 * @param {String|Function} selector A selector or a pre-compiled
16655 * selector function built with Sizzle.compile
16656 * @param {Element} context
16657 * @param {Array} [results]
16658 * @param {Array} [seed] A set of elements to match against
16659 */
16660 select = Sizzle.select = function( selector, context, results, seed ) {
16661 var i, tokens, token, type, find,
16662 compiled = typeof selector === "function" && selector,
16663 match = !seed && tokenize( (selector = compiled.selector || selector) );
16664
16665 results = results || [];
16666
16667 // Try to minimize operations if there is only one selector in the list and no seed
16668 // (the latter of which guarantees us context)
16669 if ( match.length === 1 ) {
16670
16671 // Reduce context if the leading compound selector is an ID
16672 tokens = match[0] = match[0].slice( 0 );
16673 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
16674 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
16675
16676 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
16677 if ( !context ) {
16678 return results;
16679
16680 // Precompiled matchers will still verify ancestry, so step up a level
16681 } else if ( compiled ) {
16682 context = context.parentNode;
16683 }
16684
16685 selector = selector.slice( tokens.shift().value.length );
16686 }
16687
16688 // Fetch a seed set for right-to-left matching
16689 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
16690 while ( i-- ) {
16691 token = tokens[i];
16692
16693 // Abort if we hit a combinator
16694 if ( Expr.relative[ (type = token.type) ] ) {
16695 break;
16696 }
16697 if ( (find = Expr.find[ type ]) ) {
16698 // Search, expanding context for leading sibling combinators
16699 if ( (seed = find(
16700 token.matches[0].replace( runescape, funescape ),
16701 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
16702 )) ) {
16703
16704 // If seed is empty or no tokens remain, we can return early
16705 tokens.splice( i, 1 );
16706 selector = seed.length && toSelector( tokens );
16707 if ( !selector ) {
16708 push.apply( results, seed );
16709 return results;
16710 }
16711
16712 break;
16713 }
16714 }
16715 }
16716 }
16717
16718 // Compile and execute a filtering function if one is not provided
16719 // Provide `match` to avoid retokenization if we modified the selector above
16720 ( compiled || compile( selector, match ) )(
16721 seed,
16722 context,
16723 !documentIsHTML,
16724 results,
16725 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
16726 );
16727 return results;
16728 };
16729
16730 // One-time assignments
16731
16732 // Sort stability
16733 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
16734
16735 // Support: Chrome 14-35+
16736 // Always assume duplicates if they aren't passed to the comparison function
16737 support.detectDuplicates = !!hasDuplicate;
16738
16739 // Initialize against the default document
16740 setDocument();
16741
16742 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
16743 // Detached nodes confoundingly follow *each other*
16744 support.sortDetached = assert(function( el ) {
16745 // Should return 1, but returns 4 (following)
16746 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
16747 });
16748
16749 // Support: IE<8
16750 // Prevent attribute/property "interpolation"
16751 // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
16752 if ( !assert(function( el ) {
16753 el.innerHTML = "<a href='#'></a>";
16754 return el.firstChild.getAttribute("href") === "#" ;
16755 }) ) {
16756 addHandle( "type|href|height|width", function( elem, name, isXML ) {
16757 if ( !isXML ) {
16758 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
16759 }
16760 });
16761 }
16762
16763 // Support: IE<9
16764 // Use defaultValue in place of getAttribute("value")
16765 if ( !support.attributes || !assert(function( el ) {
16766 el.innerHTML = "<input/>";
16767 el.firstChild.setAttribute( "value", "" );
16768 return el.firstChild.getAttribute( "value" ) === "";
16769 }) ) {
16770 addHandle( "value", function( elem, name, isXML ) {
16771 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
16772 return elem.defaultValue;
16773 }
16774 });
16775 }
16776
16777 // Support: IE<9
16778 // Use getAttributeNode to fetch booleans when getAttribute lies
16779 if ( !assert(function( el ) {
16780 return el.getAttribute("disabled") == null;
16781 }) ) {
16782 addHandle( booleans, function( elem, name, isXML ) {
16783 var val;
16784 if ( !isXML ) {
16785 return elem[ name ] === true ? name.toLowerCase() :
16786 (val = elem.getAttributeNode( name )) && val.specified ?
16787 val.value :
16788 null;
16789 }
16790 });
16791 }
16792
16793 return Sizzle;
16794
16795 })( window );
16796
16797
16798
16799 jQuery.find = Sizzle;
16800 jQuery.expr = Sizzle.selectors;
16801
16802 // Deprecated
16803 jQuery.expr[ ":" ] = jQuery.expr.pseudos;
16804 jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
16805 jQuery.text = Sizzle.getText;
16806 jQuery.isXMLDoc = Sizzle.isXML;
16807 jQuery.contains = Sizzle.contains;
16808 jQuery.escapeSelector = Sizzle.escape;
16809
16810
16811
16812
16813 var dir = function( elem, dir, until ) {
16814 var matched = [],
16815 truncate = until !== undefined;
16816
16817 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
16818 if ( elem.nodeType === 1 ) {
16819 if ( truncate && jQuery( elem ).is( until ) ) {
16820 break;
16821 }
16822 matched.push( elem );
16823 }
16824 }
16825 return matched;
16826 };
16827
16828
16829 var siblings = function( n, elem ) {
16830 var matched = [];
16831
16832 for ( ; n; n = n.nextSibling ) {
16833 if ( n.nodeType === 1 && n !== elem ) {
16834 matched.push( n );
16835 }
16836 }
16837
16838 return matched;
16839 };
16840
16841
16842 var rneedsContext = jQuery.expr.match.needsContext;
16843
16844
16845
16846 function nodeName( elem, name ) {
16847
16848 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
16849
16850 };
16851 var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
16852
16853
16854
16855 var risSimple = /^.[^:#\[\.,]*$/;
16856
16857 // Implement the identical functionality for filter and not
16858 function winnow( elements, qualifier, not ) {
16859 if ( jQuery.isFunction( qualifier ) ) {
16860 return jQuery.grep( elements, function( elem, i ) {
16861 return !!qualifier.call( elem, i, elem ) !== not;
16862 } );
16863 }
16864
16865 // Single element
16866 if ( qualifier.nodeType ) {
16867 return jQuery.grep( elements, function( elem ) {
16868 return ( elem === qualifier ) !== not;
16869 } );
16870 }
16871
16872 // Arraylike of elements (jQuery, arguments, Array)
16873 if ( typeof qualifier !== "string" ) {
16874 return jQuery.grep( elements, function( elem ) {
16875 return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
16876 } );
16877 }
16878
16879 // Simple selector that can be filtered directly, removing non-Elements
16880 if ( risSimple.test( qualifier ) ) {
16881 return jQuery.filter( qualifier, elements, not );
16882 }
16883
16884 // Complex selector, compare the two sets, removing non-Elements
16885 qualifier = jQuery.filter( qualifier, elements );
16886 return jQuery.grep( elements, function( elem ) {
16887 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
16888 } );
16889 }
16890
16891 jQuery.filter = function( expr, elems, not ) {
16892 var elem = elems[ 0 ];
16893
16894 if ( not ) {
16895 expr = ":not(" + expr + ")";
16896 }
16897
16898 if ( elems.length === 1 && elem.nodeType === 1 ) {
16899 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
16900 }
16901
16902 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
16903 return elem.nodeType === 1;
16904 } ) );
16905 };
16906
16907 jQuery.fn.extend( {
16908 find: function( selector ) {
16909 var i, ret,
16910 len = this.length,
16911 self = this;
16912
16913 if ( typeof selector !== "string" ) {
16914 return this.pushStack( jQuery( selector ).filter( function() {
16915 for ( i = 0; i < len; i++ ) {
16916 if ( jQuery.contains( self[ i ], this ) ) {
16917 return true;
16918 }
16919 }
16920 } ) );
16921 }
16922
16923 ret = this.pushStack( [] );
16924
16925 for ( i = 0; i < len; i++ ) {
16926 jQuery.find( selector, self[ i ], ret );
16927 }
16928
16929 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
16930 },
16931 filter: function( selector ) {
16932 return this.pushStack( winnow( this, selector || [], false ) );
16933 },
16934 not: function( selector ) {
16935 return this.pushStack( winnow( this, selector || [], true ) );
16936 },
16937 is: function( selector ) {
16938 return !!winnow(
16939 this,
16940
16941 // If this is a positional/relative selector, check membership in the returned set
16942 // so $("p:first").is("p:last") won't return true for a doc with two "p".
16943 typeof selector === "string" && rneedsContext.test( selector ) ?
16944 jQuery( selector ) :
16945 selector || [],
16946 false
16947 ).length;
16948 }
16949 } );
16950
16951
16952 // Initialize a jQuery object
16953
16954
16955 // A central reference to the root jQuery(document)
16956 var rootjQuery,
16957
16958 // A simple way to check for HTML strings
16959 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
16960 // Strict HTML recognition (#11290: must start with <)
16961 // Shortcut simple #id case for speed
16962 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
16963
16964 init = jQuery.fn.init = function( selector, context, root ) {
16965 var match, elem;
16966
16967 // HANDLE: $(""), $(null), $(undefined), $(false)
16968 if ( !selector ) {
16969 return this;
16970 }
16971
16972 // Method init() accepts an alternate rootjQuery
16973 // so migrate can support jQuery.sub (gh-2101)
16974 root = root || rootjQuery;
16975
16976 // Handle HTML strings
16977 if ( typeof selector === "string" ) {
16978 if ( selector[ 0 ] === "<" &&
16979 selector[ selector.length - 1 ] === ">" &&
16980 selector.length >= 3 ) {
16981
16982 // Assume that strings that start and end with <> are HTML and skip the regex check
16983 match = [ null, selector, null ];
16984
16985 } else {
16986 match = rquickExpr.exec( selector );
16987 }
16988
16989 // Match html or make sure no context is specified for #id
16990 if ( match && ( match[ 1 ] || !context ) ) {
16991
16992 // HANDLE: $(html) -> $(array)
16993 if ( match[ 1 ] ) {
16994 context = context instanceof jQuery ? context[ 0 ] : context;
16995
16996 // Option to run scripts is true for back-compat
16997 // Intentionally let the error be thrown if parseHTML is not present
16998 jQuery.merge( this, jQuery.parseHTML(
16999 match[ 1 ],
17000 context && context.nodeType ? context.ownerDocument || context : document,
17001 true
17002 ) );
17003
17004 // HANDLE: $(html, props)
17005 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
17006 for ( match in context ) {
17007
17008 // Properties of context are called as methods if possible
17009 if ( jQuery.isFunction( this[ match ] ) ) {
17010 this[ match ]( context[ match ] );
17011
17012 // ...and otherwise set as attributes
17013 } else {
17014 this.attr( match, context[ match ] );
17015 }
17016 }
17017 }
17018
17019 return this;
17020
17021 // HANDLE: $(#id)
17022 } else {
17023 elem = document.getElementById( match[ 2 ] );
17024
17025 if ( elem ) {
17026
17027 // Inject the element directly into the jQuery object
17028 this[ 0 ] = elem;
17029 this.length = 1;
17030 }
17031 return this;
17032 }
17033
17034 // HANDLE: $(expr, $(...))
17035 } else if ( !context || context.jquery ) {
17036 return ( context || root ).find( selector );
17037
17038 // HANDLE: $(expr, context)
17039 // (which is just equivalent to: $(context).find(expr)
17040 } else {
17041 return this.constructor( context ).find( selector );
17042 }
17043
17044 // HANDLE: $(DOMElement)
17045 } else if ( selector.nodeType ) {
17046 this[ 0 ] = selector;
17047 this.length = 1;
17048 return this;
17049
17050 // HANDLE: $(function)
17051 // Shortcut for document ready
17052 } else if ( jQuery.isFunction( selector ) ) {
17053 return root.ready !== undefined ?
17054 root.ready( selector ) :
17055
17056 // Execute immediately if ready is not present
17057 selector( jQuery );
17058 }
17059
17060 return jQuery.makeArray( selector, this );
17061 };
17062
17063 // Give the init function the jQuery prototype for later instantiation
17064 init.prototype = jQuery.fn;
17065
17066 // Initialize central reference
17067 rootjQuery = jQuery( document );
17068
17069
17070 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
17071
17072 // Methods guaranteed to produce a unique set when starting from a unique set
17073 guaranteedUnique = {
17074 children: true,
17075 contents: true,
17076 next: true,
17077 prev: true
17078 };
17079
17080 jQuery.fn.extend( {
17081 has: function( target ) {
17082 var targets = jQuery( target, this ),
17083 l = targets.length;
17084
17085 return this.filter( function() {
17086 var i = 0;
17087 for ( ; i < l; i++ ) {
17088 if ( jQuery.contains( this, targets[ i ] ) ) {
17089 return true;
17090 }
17091 }
17092 } );
17093 },
17094
17095 closest: function( selectors, context ) {
17096 var cur,
17097 i = 0,
17098 l = this.length,
17099 matched = [],
17100 targets = typeof selectors !== "string" && jQuery( selectors );
17101
17102 // Positional selectors never match, since there's no _selection_ context
17103 if ( !rneedsContext.test( selectors ) ) {
17104 for ( ; i < l; i++ ) {
17105 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
17106
17107 // Always skip document fragments
17108 if ( cur.nodeType < 11 && ( targets ?
17109 targets.index( cur ) > -1 :
17110
17111 // Don't pass non-elements to Sizzle
17112 cur.nodeType === 1 &&
17113 jQuery.find.matchesSelector( cur, selectors ) ) ) {
17114
17115 matched.push( cur );
17116 break;
17117 }
17118 }
17119 }
17120 }
17121
17122 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
17123 },
17124
17125 // Determine the position of an element within the set
17126 index: function( elem ) {
17127
17128 // No argument, return index in parent
17129 if ( !elem ) {
17130 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
17131 }
17132
17133 // Index in selector
17134 if ( typeof elem === "string" ) {
17135 return indexOf.call( jQuery( elem ), this[ 0 ] );
17136 }
17137
17138 // Locate the position of the desired element
17139 return indexOf.call( this,
17140
17141 // If it receives a jQuery object, the first element is used
17142 elem.jquery ? elem[ 0 ] : elem
17143 );
17144 },
17145
17146 add: function( selector, context ) {
17147 return this.pushStack(
17148 jQuery.uniqueSort(
17149 jQuery.merge( this.get(), jQuery( selector, context ) )
17150 )
17151 );
17152 },
17153
17154 addBack: function( selector ) {
17155 return this.add( selector == null ?
17156 this.prevObject : this.prevObject.filter( selector )
17157 );
17158 }
17159 } );
17160
17161 function sibling( cur, dir ) {
17162 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
17163 return cur;
17164 }
17165
17166 jQuery.each( {
17167 parent: function( elem ) {
17168 var parent = elem.parentNode;
17169 return parent && parent.nodeType !== 11 ? parent : null;
17170 },
17171 parents: function( elem ) {
17172 return dir( elem, "parentNode" );
17173 },
17174 parentsUntil: function( elem, i, until ) {
17175 return dir( elem, "parentNode", until );
17176 },
17177 next: function( elem ) {
17178 return sibling( elem, "nextSibling" );
17179 },
17180 prev: function( elem ) {
17181 return sibling( elem, "previousSibling" );
17182 },
17183 nextAll: function( elem ) {
17184 return dir( elem, "nextSibling" );
17185 },
17186 prevAll: function( elem ) {
17187 return dir( elem, "previousSibling" );
17188 },
17189 nextUntil: function( elem, i, until ) {
17190 return dir( elem, "nextSibling", until );
17191 },
17192 prevUntil: function( elem, i, until ) {
17193 return dir( elem, "previousSibling", until );
17194 },
17195 siblings: function( elem ) {
17196 return siblings( ( elem.parentNode || {} ).firstChild, elem );
17197 },
17198 children: function( elem ) {
17199 return siblings( elem.firstChild );
17200 },
17201 contents: function( elem ) {
17202 if ( nodeName( elem, "iframe" ) ) {
17203 return elem.contentDocument;
17204 }
17205
17206 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
17207 // Treat the template element as a regular one in browsers that
17208 // don't support it.
17209 if ( nodeName( elem, "template" ) ) {
17210 elem = elem.content || elem;
17211 }
17212
17213 return jQuery.merge( [], elem.childNodes );
17214 }
17215 }, function( name, fn ) {
17216 jQuery.fn[ name ] = function( until, selector ) {
17217 var matched = jQuery.map( this, fn, until );
17218
17219 if ( name.slice( -5 ) !== "Until" ) {
17220 selector = until;
17221 }
17222
17223 if ( selector && typeof selector === "string" ) {
17224 matched = jQuery.filter( selector, matched );
17225 }
17226
17227 if ( this.length > 1 ) {
17228
17229 // Remove duplicates
17230 if ( !guaranteedUnique[ name ] ) {
17231 jQuery.uniqueSort( matched );
17232 }
17233
17234 // Reverse order for parents* and prev-derivatives
17235 if ( rparentsprev.test( name ) ) {
17236 matched.reverse();
17237 }
17238 }
17239
17240 return this.pushStack( matched );
17241 };
17242 } );
17243 var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
17244
17245
17246
17247 // Convert String-formatted options into Object-formatted ones
17248 function createOptions( options ) {
17249 var object = {};
17250 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
17251 object[ flag ] = true;
17252 } );
17253 return object;
17254 }
17255
17256 /*
17257 * Create a callback list using the following parameters:
17258 *
17259 * options: an optional list of space-separated options that will change how
17260 * the callback list behaves or a more traditional option object
17261 *
17262 * By default a callback list will act like an event callback list and can be
17263 * "fired" multiple times.
17264 *
17265 * Possible options:
17266 *
17267 * once: will ensure the callback list can only be fired once (like a Deferred)
17268 *
17269 * memory: will keep track of previous values and will call any callback added
17270 * after the list has been fired right away with the latest "memorized"
17271 * values (like a Deferred)
17272 *
17273 * unique: will ensure a callback can only be added once (no duplicate in the list)
17274 *
17275 * stopOnFalse: interrupt callings when a callback returns false
17276 *
17277 */
17278 jQuery.Callbacks = function( options ) {
17279
17280 // Convert options from String-formatted to Object-formatted if needed
17281 // (we check in cache first)
17282 options = typeof options === "string" ?
17283 createOptions( options ) :
17284 jQuery.extend( {}, options );
17285
17286 var // Flag to know if list is currently firing
17287 firing,
17288
17289 // Last fire value for non-forgettable lists
17290 memory,
17291
17292 // Flag to know if list was already fired
17293 fired,
17294
17295 // Flag to prevent firing
17296 locked,
17297
17298 // Actual callback list
17299 list = [],
17300
17301 // Queue of execution data for repeatable lists
17302 queue = [],
17303
17304 // Index of currently firing callback (modified by add/remove as needed)
17305 firingIndex = -1,
17306
17307 // Fire callbacks
17308 fire = function() {
17309
17310 // Enforce single-firing
17311 locked = locked || options.once;
17312
17313 // Execute callbacks for all pending executions,
17314 // respecting firingIndex overrides and runtime changes
17315 fired = firing = true;
17316 for ( ; queue.length; firingIndex = -1 ) {
17317 memory = queue.shift();
17318 while ( ++firingIndex < list.length ) {
17319
17320 // Run callback and check for early termination
17321 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
17322 options.stopOnFalse ) {
17323
17324 // Jump to end and forget the data so .add doesn't re-fire
17325 firingIndex = list.length;
17326 memory = false;
17327 }
17328 }
17329 }
17330
17331 // Forget the data if we're done with it
17332 if ( !options.memory ) {
17333 memory = false;
17334 }
17335
17336 firing = false;
17337
17338 // Clean up if we're done firing for good
17339 if ( locked ) {
17340
17341 // Keep an empty list if we have data for future add calls
17342 if ( memory ) {
17343 list = [];
17344
17345 // Otherwise, this object is spent
17346 } else {
17347 list = "";
17348 }
17349 }
17350 },
17351
17352 // Actual Callbacks object
17353 self = {
17354
17355 // Add a callback or a collection of callbacks to the list
17356 add: function() {
17357 if ( list ) {
17358
17359 // If we have memory from a past run, we should fire after adding
17360 if ( memory && !firing ) {
17361 firingIndex = list.length - 1;
17362 queue.push( memory );
17363 }
17364
17365 ( function add( args ) {
17366 jQuery.each( args, function( _, arg ) {
17367 if ( jQuery.isFunction( arg ) ) {
17368 if ( !options.unique || !self.has( arg ) ) {
17369 list.push( arg );
17370 }
17371 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
17372
17373 // Inspect recursively
17374 add( arg );
17375 }
17376 } );
17377 } )( arguments );
17378
17379 if ( memory && !firing ) {
17380 fire();
17381 }
17382 }
17383 return this;
17384 },
17385
17386 // Remove a callback from the list
17387 remove: function() {
17388 jQuery.each( arguments, function( _, arg ) {
17389 var index;
17390 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
17391 list.splice( index, 1 );
17392
17393 // Handle firing indexes
17394 if ( index <= firingIndex ) {
17395 firingIndex--;
17396 }
17397 }
17398 } );
17399 return this;
17400 },
17401
17402 // Check if a given callback is in the list.
17403 // If no argument is given, return whether or not list has callbacks attached.
17404 has: function( fn ) {
17405 return fn ?
17406 jQuery.inArray( fn, list ) > -1 :
17407 list.length > 0;
17408 },
17409
17410 // Remove all callbacks from the list
17411 empty: function() {
17412 if ( list ) {
17413 list = [];
17414 }
17415 return this;
17416 },
17417
17418 // Disable .fire and .add
17419 // Abort any current/pending executions
17420 // Clear all callbacks and values
17421 disable: function() {
17422 locked = queue = [];
17423 list = memory = "";
17424 return this;
17425 },
17426 disabled: function() {
17427 return !list;
17428 },
17429
17430 // Disable .fire
17431 // Also disable .add unless we have memory (since it would have no effect)
17432 // Abort any pending executions
17433 lock: function() {
17434 locked = queue = [];
17435 if ( !memory && !firing ) {
17436 list = memory = "";
17437 }
17438 return this;
17439 },
17440 locked: function() {
17441 return !!locked;
17442 },
17443
17444 // Call all callbacks with the given context and arguments
17445 fireWith: function( context, args ) {
17446 if ( !locked ) {
17447 args = args || [];
17448 args = [ context, args.slice ? args.slice() : args ];
17449 queue.push( args );
17450 if ( !firing ) {
17451 fire();
17452 }
17453 }
17454 return this;
17455 },
17456
17457 // Call all the callbacks with the given arguments
17458 fire: function() {
17459 self.fireWith( this, arguments );
17460 return this;
17461 },
17462
17463 // To know if the callbacks have already been called at least once
17464 fired: function() {
17465 return !!fired;
17466 }
17467 };
17468
17469 return self;
17470 };
17471
17472
17473 function Identity( v ) {
17474 return v;
17475 }
17476 function Thrower( ex ) {
17477 throw ex;
17478 }
17479
17480 function adoptValue( value, resolve, reject, noValue ) {
17481 var method;
17482
17483 try {
17484
17485 // Check for promise aspect first to privilege synchronous behavior
17486 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
17487 method.call( value ).done( resolve ).fail( reject );
17488
17489 // Other thenables
17490 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
17491 method.call( value, resolve, reject );
17492
17493 // Other non-thenables
17494 } else {
17495
17496 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
17497 // * false: [ value ].slice( 0 ) => resolve( value )
17498 // * true: [ value ].slice( 1 ) => resolve()
17499 resolve.apply( undefined, [ value ].slice( noValue ) );
17500 }
17501
17502 // For Promises/A+, convert exceptions into rejections
17503 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
17504 // Deferred#then to conditionally suppress rejection.
17505 } catch ( value ) {
17506
17507 // Support: Android 4.0 only
17508 // Strict mode functions invoked without .call/.apply get global-object context
17509 reject.apply( undefined, [ value ] );
17510 }
17511 }
17512
17513 jQuery.extend( {
17514
17515 Deferred: function( func ) {
17516 var tuples = [
17517
17518 // action, add listener, callbacks,
17519 // ... .then handlers, argument index, [final state]
17520 [ "notify", "progress", jQuery.Callbacks( "memory" ),
17521 jQuery.Callbacks( "memory" ), 2 ],
17522 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
17523 jQuery.Callbacks( "once memory" ), 0, "resolved" ],
17524 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
17525 jQuery.Callbacks( "once memory" ), 1, "rejected" ]
17526 ],
17527 state = "pending",
17528 promise = {
17529 state: function() {
17530 return state;
17531 },
17532 always: function() {
17533 deferred.done( arguments ).fail( arguments );
17534 return this;
17535 },
17536 "catch": function( fn ) {
17537 return promise.then( null, fn );
17538 },
17539
17540 // Keep pipe for back-compat
17541 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
17542 var fns = arguments;
17543
17544 return jQuery.Deferred( function( newDefer ) {
17545 jQuery.each( tuples, function( i, tuple ) {
17546
17547 // Map tuples (progress, done, fail) to arguments (done, fail, progress)
17548 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
17549
17550 // deferred.progress(function() { bind to newDefer or newDefer.notify })
17551 // deferred.done(function() { bind to newDefer or newDefer.resolve })
17552 // deferred.fail(function() { bind to newDefer or newDefer.reject })
17553 deferred[ tuple[ 1 ] ]( function() {
17554 var returned = fn && fn.apply( this, arguments );
17555 if ( returned && jQuery.isFunction( returned.promise ) ) {
17556 returned.promise()
17557 .progress( newDefer.notify )
17558 .done( newDefer.resolve )
17559 .fail( newDefer.reject );
17560 } else {
17561 newDefer[ tuple[ 0 ] + "With" ](
17562 this,
17563 fn ? [ returned ] : arguments
17564 );
17565 }
17566 } );
17567 } );
17568 fns = null;
17569 } ).promise();
17570 },
17571 then: function( onFulfilled, onRejected, onProgress ) {
17572 var maxDepth = 0;
17573 function resolve( depth, deferred, handler, special ) {
17574 return function() {
17575 var that = this,
17576 args = arguments,
17577 mightThrow = function() {
17578 var returned, then;
17579
17580 // Support: Promises/A+ section 2.3.3.3.3
17581 // https://promisesaplus.com/#point-59
17582 // Ignore double-resolution attempts
17583 if ( depth < maxDepth ) {
17584 return;
17585 }
17586
17587 returned = handler.apply( that, args );
17588
17589 // Support: Promises/A+ section 2.3.1
17590 // https://promisesaplus.com/#point-48
17591 if ( returned === deferred.promise() ) {
17592 throw new TypeError( "Thenable self-resolution" );
17593 }
17594
17595 // Support: Promises/A+ sections 2.3.3.1, 3.5
17596 // https://promisesaplus.com/#point-54
17597 // https://promisesaplus.com/#point-75
17598 // Retrieve `then` only once
17599 then = returned &&
17600
17601 // Support: Promises/A+ section 2.3.4
17602 // https://promisesaplus.com/#point-64
17603 // Only check objects and functions for thenability
17604 ( typeof returned === "object" ||
17605 typeof returned === "function" ) &&
17606 returned.then;
17607
17608 // Handle a returned thenable
17609 if ( jQuery.isFunction( then ) ) {
17610
17611 // Special processors (notify) just wait for resolution
17612 if ( special ) {
17613 then.call(
17614 returned,
17615 resolve( maxDepth, deferred, Identity, special ),
17616 resolve( maxDepth, deferred, Thrower, special )
17617 );
17618
17619 // Normal processors (resolve) also hook into progress
17620 } else {
17621
17622 // ...and disregard older resolution values
17623 maxDepth++;
17624
17625 then.call(
17626 returned,
17627 resolve( maxDepth, deferred, Identity, special ),
17628 resolve( maxDepth, deferred, Thrower, special ),
17629 resolve( maxDepth, deferred, Identity,
17630 deferred.notifyWith )
17631 );
17632 }
17633
17634 // Handle all other returned values
17635 } else {
17636
17637 // Only substitute handlers pass on context
17638 // and multiple values (non-spec behavior)
17639 if ( handler !== Identity ) {
17640 that = undefined;
17641 args = [ returned ];
17642 }
17643
17644 // Process the value(s)
17645 // Default process is resolve
17646 ( special || deferred.resolveWith )( that, args );
17647 }
17648 },
17649
17650 // Only normal processors (resolve) catch and reject exceptions
17651 process = special ?
17652 mightThrow :
17653 function() {
17654 try {
17655 mightThrow();
17656 } catch ( e ) {
17657
17658 if ( jQuery.Deferred.exceptionHook ) {
17659 jQuery.Deferred.exceptionHook( e,
17660 process.stackTrace );
17661 }
17662
17663 // Support: Promises/A+ section 2.3.3.3.4.1
17664 // https://promisesaplus.com/#point-61
17665 // Ignore post-resolution exceptions
17666 if ( depth + 1 >= maxDepth ) {
17667
17668 // Only substitute handlers pass on context
17669 // and multiple values (non-spec behavior)
17670 if ( handler !== Thrower ) {
17671 that = undefined;
17672 args = [ e ];
17673 }
17674
17675 deferred.rejectWith( that, args );
17676 }
17677 }
17678 };
17679
17680 // Support: Promises/A+ section 2.3.3.3.1
17681 // https://promisesaplus.com/#point-57
17682 // Re-resolve promises immediately to dodge false rejection from
17683 // subsequent errors
17684 if ( depth ) {
17685 process();
17686 } else {
17687
17688 // Call an optional hook to record the stack, in case of exception
17689 // since it's otherwise lost when execution goes async
17690 if ( jQuery.Deferred.getStackHook ) {
17691 process.stackTrace = jQuery.Deferred.getStackHook();
17692 }
17693 window.setTimeout( process );
17694 }
17695 };
17696 }
17697
17698 return jQuery.Deferred( function( newDefer ) {
17699
17700 // progress_handlers.add( ... )
17701 tuples[ 0 ][ 3 ].add(
17702 resolve(
17703 0,
17704 newDefer,
17705 jQuery.isFunction( onProgress ) ?
17706 onProgress :
17707 Identity,
17708 newDefer.notifyWith
17709 )
17710 );
17711
17712 // fulfilled_handlers.add( ... )
17713 tuples[ 1 ][ 3 ].add(
17714 resolve(
17715 0,
17716 newDefer,
17717 jQuery.isFunction( onFulfilled ) ?
17718 onFulfilled :
17719 Identity
17720 )
17721 );
17722
17723 // rejected_handlers.add( ... )
17724 tuples[ 2 ][ 3 ].add(
17725 resolve(
17726 0,
17727 newDefer,
17728 jQuery.isFunction( onRejected ) ?
17729 onRejected :
17730 Thrower
17731 )
17732 );
17733 } ).promise();
17734 },
17735
17736 // Get a promise for this deferred
17737 // If obj is provided, the promise aspect is added to the object
17738 promise: function( obj ) {
17739 return obj != null ? jQuery.extend( obj, promise ) : promise;
17740 }
17741 },
17742 deferred = {};
17743
17744 // Add list-specific methods
17745 jQuery.each( tuples, function( i, tuple ) {
17746 var list = tuple[ 2 ],
17747 stateString = tuple[ 5 ];
17748
17749 // promise.progress = list.add
17750 // promise.done = list.add
17751 // promise.fail = list.add
17752 promise[ tuple[ 1 ] ] = list.add;
17753
17754 // Handle state
17755 if ( stateString ) {
17756 list.add(
17757 function() {
17758
17759 // state = "resolved" (i.e., fulfilled)
17760 // state = "rejected"
17761 state = stateString;
17762 },
17763
17764 // rejected_callbacks.disable
17765 // fulfilled_callbacks.disable
17766 tuples[ 3 - i ][ 2 ].disable,
17767
17768 // progress_callbacks.lock
17769 tuples[ 0 ][ 2 ].lock
17770 );
17771 }
17772
17773 // progress_handlers.fire
17774 // fulfilled_handlers.fire
17775 // rejected_handlers.fire
17776 list.add( tuple[ 3 ].fire );
17777
17778 // deferred.notify = function() { deferred.notifyWith(...) }
17779 // deferred.resolve = function() { deferred.resolveWith(...) }
17780 // deferred.reject = function() { deferred.rejectWith(...) }
17781 deferred[ tuple[ 0 ] ] = function() {
17782 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
17783 return this;
17784 };
17785
17786 // deferred.notifyWith = list.fireWith
17787 // deferred.resolveWith = list.fireWith
17788 // deferred.rejectWith = list.fireWith
17789 deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
17790 } );
17791
17792 // Make the deferred a promise
17793 promise.promise( deferred );
17794
17795 // Call given func if any
17796 if ( func ) {
17797 func.call( deferred, deferred );
17798 }
17799
17800 // All done!
17801 return deferred;
17802 },
17803
17804 // Deferred helper
17805 when: function( singleValue ) {
17806 var
17807
17808 // count of uncompleted subordinates
17809 remaining = arguments.length,
17810
17811 // count of unprocessed arguments
17812 i = remaining,
17813
17814 // subordinate fulfillment data
17815 resolveContexts = Array( i ),
17816 resolveValues = slice.call( arguments ),
17817
17818 // the master Deferred
17819 master = jQuery.Deferred(),
17820
17821 // subordinate callback factory
17822 updateFunc = function( i ) {
17823 return function( value ) {
17824 resolveContexts[ i ] = this;
17825 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
17826 if ( !( --remaining ) ) {
17827 master.resolveWith( resolveContexts, resolveValues );
17828 }
17829 };
17830 };
17831
17832 // Single- and empty arguments are adopted like Promise.resolve
17833 if ( remaining <= 1 ) {
17834 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
17835 !remaining );
17836
17837 // Use .then() to unwrap secondary thenables (cf. gh-3000)
17838 if ( master.state() === "pending" ||
17839 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
17840
17841 return master.then();
17842 }
17843 }
17844
17845 // Multiple arguments are aggregated like Promise.all array elements
17846 while ( i-- ) {
17847 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
17848 }
17849
17850 return master.promise();
17851 }
17852 } );
17853
17854
17855 // These usually indicate a programmer mistake during development,
17856 // warn about them ASAP rather than swallowing them by default.
17857 var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
17858
17859 jQuery.Deferred.exceptionHook = function( error, stack ) {
17860
17861 // Support: IE 8 - 9 only
17862 // Console exists when dev tools are open, which can happen at any time
17863 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
17864 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
17865 }
17866 };
17867
17868
17869
17870
17871 jQuery.readyException = function( error ) {
17872 window.setTimeout( function() {
17873 throw error;
17874 } );
17875 };
17876
17877
17878
17879
17880 // The deferred used on DOM ready
17881 var readyList = jQuery.Deferred();
17882
17883 jQuery.fn.ready = function( fn ) {
17884
17885 readyList
17886 .then( fn )
17887
17888 // Wrap jQuery.readyException in a function so that the lookup
17889 // happens at the time of error handling instead of callback
17890 // registration.
17891 .catch( function( error ) {
17892 jQuery.readyException( error );
17893 } );
17894
17895 return this;
17896 };
17897
17898 jQuery.extend( {
17899
17900 // Is the DOM ready to be used? Set to true once it occurs.
17901 isReady: false,
17902
17903 // A counter to track how many items to wait for before
17904 // the ready event fires. See #6781
17905 readyWait: 1,
17906
17907 // Handle when the DOM is ready
17908 ready: function( wait ) {
17909
17910 // Abort if there are pending holds or we're already ready
17911 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
17912 return;
17913 }
17914
17915 // Remember that the DOM is ready
17916 jQuery.isReady = true;
17917
17918 // If a normal DOM Ready event fired, decrement, and wait if need be
17919 if ( wait !== true && --jQuery.readyWait > 0 ) {
17920 return;
17921 }
17922
17923 // If there are functions bound, to execute
17924 readyList.resolveWith( document, [ jQuery ] );
17925 }
17926 } );
17927
17928 jQuery.ready.then = readyList.then;
17929
17930 // The ready event handler and self cleanup method
17931 function completed() {
17932 document.removeEventListener( "DOMContentLoaded", completed );
17933 window.removeEventListener( "load", completed );
17934 jQuery.ready();
17935 }
17936
17937 // Catch cases where $(document).ready() is called
17938 // after the browser event has already occurred.
17939 // Support: IE <=9 - 10 only
17940 // Older IE sometimes signals "interactive" too soon
17941 if ( document.readyState === "complete" ||
17942 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
17943
17944 // Handle it asynchronously to allow scripts the opportunity to delay ready
17945 window.setTimeout( jQuery.ready );
17946
17947 } else {
17948
17949 // Use the handy event callback
17950 document.addEventListener( "DOMContentLoaded", completed );
17951
17952 // A fallback to window.onload, that will always work
17953 window.addEventListener( "load", completed );
17954 }
17955
17956
17957
17958
17959 // Multifunctional method to get and set values of a collection
17960 // The value/s can optionally be executed if it's a function
17961 var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
17962 var i = 0,
17963 len = elems.length,
17964 bulk = key == null;
17965
17966 // Sets many values
17967 if ( jQuery.type( key ) === "object" ) {
17968 chainable = true;
17969 for ( i in key ) {
17970 access( elems, fn, i, key[ i ], true, emptyGet, raw );
17971 }
17972
17973 // Sets one value
17974 } else if ( value !== undefined ) {
17975 chainable = true;
17976
17977 if ( !jQuery.isFunction( value ) ) {
17978 raw = true;
17979 }
17980
17981 if ( bulk ) {
17982
17983 // Bulk operations run against the entire set
17984 if ( raw ) {
17985 fn.call( elems, value );
17986 fn = null;
17987
17988 // ...except when executing function values
17989 } else {
17990 bulk = fn;
17991 fn = function( elem, key, value ) {
17992 return bulk.call( jQuery( elem ), value );
17993 };
17994 }
17995 }
17996
17997 if ( fn ) {
17998 for ( ; i < len; i++ ) {
17999 fn(
18000 elems[ i ], key, raw ?
18001 value :
18002 value.call( elems[ i ], i, fn( elems[ i ], key ) )
18003 );
18004 }
18005 }
18006 }
18007
18008 if ( chainable ) {
18009 return elems;
18010 }
18011
18012 // Gets
18013 if ( bulk ) {
18014 return fn.call( elems );
18015 }
18016
18017 return len ? fn( elems[ 0 ], key ) : emptyGet;
18018 };
18019 var acceptData = function( owner ) {
18020
18021 // Accepts only:
18022 // - Node
18023 // - Node.ELEMENT_NODE
18024 // - Node.DOCUMENT_NODE
18025 // - Object
18026 // - Any
18027 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
18028 };
18029
18030
18031
18032
18033 function Data() {
18034 this.expando = jQuery.expando + Data.uid++;
18035 }
18036
18037 Data.uid = 1;
18038
18039 Data.prototype = {
18040
18041 cache: function( owner ) {
18042
18043 // Check if the owner object already has a cache
18044 var value = owner[ this.expando ];
18045
18046 // If not, create one
18047 if ( !value ) {
18048 value = {};
18049
18050 // We can accept data for non-element nodes in modern browsers,
18051 // but we should not, see #8335.
18052 // Always return an empty object.
18053 if ( acceptData( owner ) ) {
18054
18055 // If it is a node unlikely to be stringify-ed or looped over
18056 // use plain assignment
18057 if ( owner.nodeType ) {
18058 owner[ this.expando ] = value;
18059
18060 // Otherwise secure it in a non-enumerable property
18061 // configurable must be true to allow the property to be
18062 // deleted when data is removed
18063 } else {
18064 Object.defineProperty( owner, this.expando, {
18065 value: value,
18066 configurable: true
18067 } );
18068 }
18069 }
18070 }
18071
18072 return value;
18073 },
18074 set: function( owner, data, value ) {
18075 var prop,
18076 cache = this.cache( owner );
18077
18078 // Handle: [ owner, key, value ] args
18079 // Always use camelCase key (gh-2257)
18080 if ( typeof data === "string" ) {
18081 cache[ jQuery.camelCase( data ) ] = value;
18082
18083 // Handle: [ owner, { properties } ] args
18084 } else {
18085
18086 // Copy the properties one-by-one to the cache object
18087 for ( prop in data ) {
18088 cache[ jQuery.camelCase( prop ) ] = data[ prop ];
18089 }
18090 }
18091 return cache;
18092 },
18093 get: function( owner, key ) {
18094 return key === undefined ?
18095 this.cache( owner ) :
18096
18097 // Always use camelCase key (gh-2257)
18098 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
18099 },
18100 access: function( owner, key, value ) {
18101
18102 // In cases where either:
18103 //
18104 // 1. No key was specified
18105 // 2. A string key was specified, but no value provided
18106 //
18107 // Take the "read" path and allow the get method to determine
18108 // which value to return, respectively either:
18109 //
18110 // 1. The entire cache object
18111 // 2. The data stored at the key
18112 //
18113 if ( key === undefined ||
18114 ( ( key && typeof key === "string" ) && value === undefined ) ) {
18115
18116 return this.get( owner, key );
18117 }
18118
18119 // When the key is not a string, or both a key and value
18120 // are specified, set or extend (existing objects) with either:
18121 //
18122 // 1. An object of properties
18123 // 2. A key and value
18124 //
18125 this.set( owner, key, value );
18126
18127 // Since the "set" path can have two possible entry points
18128 // return the expected data based on which path was taken[*]
18129 return value !== undefined ? value : key;
18130 },
18131 remove: function( owner, key ) {
18132 var i,
18133 cache = owner[ this.expando ];
18134
18135 if ( cache === undefined ) {
18136 return;
18137 }
18138
18139 if ( key !== undefined ) {
18140
18141 // Support array or space separated string of keys
18142 if ( Array.isArray( key ) ) {
18143
18144 // If key is an array of keys...
18145 // We always set camelCase keys, so remove that.
18146 key = key.map( jQuery.camelCase );
18147 } else {
18148 key = jQuery.camelCase( key );
18149
18150 // If a key with the spaces exists, use it.
18151 // Otherwise, create an array by matching non-whitespace
18152 key = key in cache ?
18153 [ key ] :
18154 ( key.match( rnothtmlwhite ) || [] );
18155 }
18156
18157 i = key.length;
18158
18159 while ( i-- ) {
18160 delete cache[ key[ i ] ];
18161 }
18162 }
18163
18164 // Remove the expando if there's no more data
18165 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
18166
18167 // Support: Chrome <=35 - 45
18168 // Webkit & Blink performance suffers when deleting properties
18169 // from DOM nodes, so set to undefined instead
18170 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
18171 if ( owner.nodeType ) {
18172 owner[ this.expando ] = undefined;
18173 } else {
18174 delete owner[ this.expando ];
18175 }
18176 }
18177 },
18178 hasData: function( owner ) {
18179 var cache = owner[ this.expando ];
18180 return cache !== undefined && !jQuery.isEmptyObject( cache );
18181 }
18182 };
18183 var dataPriv = new Data();
18184
18185 var dataUser = new Data();
18186
18187
18188
18189 // Implementation Summary
18190 //
18191 // 1. Enforce API surface and semantic compatibility with 1.9.x branch
18192 // 2. Improve the module's maintainability by reducing the storage
18193 // paths to a single mechanism.
18194 // 3. Use the same single mechanism to support "private" and "user" data.
18195 // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
18196 // 5. Avoid exposing implementation details on user objects (eg. expando properties)
18197 // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
18198
18199 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
18200 rmultiDash = /[A-Z]/g;
18201
18202 function getData( data ) {
18203 if ( data === "true" ) {
18204 return true;
18205 }
18206
18207 if ( data === "false" ) {
18208 return false;
18209 }
18210
18211 if ( data === "null" ) {
18212 return null;
18213 }
18214
18215 // Only convert to a number if it doesn't change the string
18216 if ( data === +data + "" ) {
18217 return +data;
18218 }
18219
18220 if ( rbrace.test( data ) ) {
18221 return JSON.parse( data );
18222 }
18223
18224 return data;
18225 }
18226
18227 function dataAttr( elem, key, data ) {
18228 var name;
18229
18230 // If nothing was found internally, try to fetch any
18231 // data from the HTML5 data-* attribute
18232 if ( data === undefined && elem.nodeType === 1 ) {
18233 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
18234 data = elem.getAttribute( name );
18235
18236 if ( typeof data === "string" ) {
18237 try {
18238 data = getData( data );
18239 } catch ( e ) {}
18240
18241 // Make sure we set the data so it isn't changed later
18242 dataUser.set( elem, key, data );
18243 } else {
18244 data = undefined;
18245 }
18246 }
18247 return data;
18248 }
18249
18250 jQuery.extend( {
18251 hasData: function( elem ) {
18252 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
18253 },
18254
18255 data: function( elem, name, data ) {
18256 return dataUser.access( elem, name, data );
18257 },
18258
18259 removeData: function( elem, name ) {
18260 dataUser.remove( elem, name );
18261 },
18262
18263 // TODO: Now that all calls to _data and _removeData have been replaced
18264 // with direct calls to dataPriv methods, these can be deprecated.
18265 _data: function( elem, name, data ) {
18266 return dataPriv.access( elem, name, data );
18267 },
18268
18269 _removeData: function( elem, name ) {
18270 dataPriv.remove( elem, name );
18271 }
18272 } );
18273
18274 jQuery.fn.extend( {
18275 data: function( key, value ) {
18276 var i, name, data,
18277 elem = this[ 0 ],
18278 attrs = elem && elem.attributes;
18279
18280 // Gets all values
18281 if ( key === undefined ) {
18282 if ( this.length ) {
18283 data = dataUser.get( elem );
18284
18285 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
18286 i = attrs.length;
18287 while ( i-- ) {
18288
18289 // Support: IE 11 only
18290 // The attrs elements can be null (#14894)
18291 if ( attrs[ i ] ) {
18292 name = attrs[ i ].name;
18293 if ( name.indexOf( "data-" ) === 0 ) {
18294 name = jQuery.camelCase( name.slice( 5 ) );
18295 dataAttr( elem, name, data[ name ] );
18296 }
18297 }
18298 }
18299 dataPriv.set( elem, "hasDataAttrs", true );
18300 }
18301 }
18302
18303 return data;
18304 }
18305
18306 // Sets multiple values
18307 if ( typeof key === "object" ) {
18308 return this.each( function() {
18309 dataUser.set( this, key );
18310 } );
18311 }
18312
18313 return access( this, function( value ) {
18314 var data;
18315
18316 // The calling jQuery object (element matches) is not empty
18317 // (and therefore has an element appears at this[ 0 ]) and the
18318 // `value` parameter was not undefined. An empty jQuery object
18319 // will result in `undefined` for elem = this[ 0 ] which will
18320 // throw an exception if an attempt to read a data cache is made.
18321 if ( elem && value === undefined ) {
18322
18323 // Attempt to get data from the cache
18324 // The key will always be camelCased in Data
18325 data = dataUser.get( elem, key );
18326 if ( data !== undefined ) {
18327 return data;
18328 }
18329
18330 // Attempt to "discover" the data in
18331 // HTML5 custom data-* attrs
18332 data = dataAttr( elem, key );
18333 if ( data !== undefined ) {
18334 return data;
18335 }
18336
18337 // We tried really hard, but the data doesn't exist.
18338 return;
18339 }
18340
18341 // Set the data...
18342 this.each( function() {
18343
18344 // We always store the camelCased key
18345 dataUser.set( this, key, value );
18346 } );
18347 }, null, value, arguments.length > 1, null, true );
18348 },
18349
18350 removeData: function( key ) {
18351 return this.each( function() {
18352 dataUser.remove( this, key );
18353 } );
18354 }
18355 } );
18356
18357
18358 jQuery.extend( {
18359 queue: function( elem, type, data ) {
18360 var queue;
18361
18362 if ( elem ) {
18363 type = ( type || "fx" ) + "queue";
18364 queue = dataPriv.get( elem, type );
18365
18366 // Speed up dequeue by getting out quickly if this is just a lookup
18367 if ( data ) {
18368 if ( !queue || Array.isArray( data ) ) {
18369 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
18370 } else {
18371 queue.push( data );
18372 }
18373 }
18374 return queue || [];
18375 }
18376 },
18377
18378 dequeue: function( elem, type ) {
18379 type = type || "fx";
18380
18381 var queue = jQuery.queue( elem, type ),
18382 startLength = queue.length,
18383 fn = queue.shift(),
18384 hooks = jQuery._queueHooks( elem, type ),
18385 next = function() {
18386 jQuery.dequeue( elem, type );
18387 };
18388
18389 // If the fx queue is dequeued, always remove the progress sentinel
18390 if ( fn === "inprogress" ) {
18391 fn = queue.shift();
18392 startLength--;
18393 }
18394
18395 if ( fn ) {
18396
18397 // Add a progress sentinel to prevent the fx queue from being
18398 // automatically dequeued
18399 if ( type === "fx" ) {
18400 queue.unshift( "inprogress" );
18401 }
18402
18403 // Clear up the last queue stop function
18404 delete hooks.stop;
18405 fn.call( elem, next, hooks );
18406 }
18407
18408 if ( !startLength && hooks ) {
18409 hooks.empty.fire();
18410 }
18411 },
18412
18413 // Not public - generate a queueHooks object, or return the current one
18414 _queueHooks: function( elem, type ) {
18415 var key = type + "queueHooks";
18416 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
18417 empty: jQuery.Callbacks( "once memory" ).add( function() {
18418 dataPriv.remove( elem, [ type + "queue", key ] );
18419 } )
18420 } );
18421 }
18422 } );
18423
18424 jQuery.fn.extend( {
18425 queue: function( type, data ) {
18426 var setter = 2;
18427
18428 if ( typeof type !== "string" ) {
18429 data = type;
18430 type = "fx";
18431 setter--;
18432 }
18433
18434 if ( arguments.length < setter ) {
18435 return jQuery.queue( this[ 0 ], type );
18436 }
18437
18438 return data === undefined ?
18439 this :
18440 this.each( function() {
18441 var queue = jQuery.queue( this, type, data );
18442
18443 // Ensure a hooks for this queue
18444 jQuery._queueHooks( this, type );
18445
18446 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
18447 jQuery.dequeue( this, type );
18448 }
18449 } );
18450 },
18451 dequeue: function( type ) {
18452 return this.each( function() {
18453 jQuery.dequeue( this, type );
18454 } );
18455 },
18456 clearQueue: function( type ) {
18457 return this.queue( type || "fx", [] );
18458 },
18459
18460 // Get a promise resolved when queues of a certain type
18461 // are emptied (fx is the type by default)
18462 promise: function( type, obj ) {
18463 var tmp,
18464 count = 1,
18465 defer = jQuery.Deferred(),
18466 elements = this,
18467 i = this.length,
18468 resolve = function() {
18469 if ( !( --count ) ) {
18470 defer.resolveWith( elements, [ elements ] );
18471 }
18472 };
18473
18474 if ( typeof type !== "string" ) {
18475 obj = type;
18476 type = undefined;
18477 }
18478 type = type || "fx";
18479
18480 while ( i-- ) {
18481 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
18482 if ( tmp && tmp.empty ) {
18483 count++;
18484 tmp.empty.add( resolve );
18485 }
18486 }
18487 resolve();
18488 return defer.promise( obj );
18489 }
18490 } );
18491 var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
18492
18493 var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
18494
18495
18496 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
18497
18498 var isHiddenWithinTree = function( elem, el ) {
18499
18500 // isHiddenWithinTree might be called from jQuery#filter function;
18501 // in that case, element will be second argument
18502 elem = el || elem;
18503
18504 // Inline style trumps all
18505 return elem.style.display === "none" ||
18506 elem.style.display === "" &&
18507
18508 // Otherwise, check computed style
18509 // Support: Firefox <=43 - 45
18510 // Disconnected elements can have computed display: none, so first confirm that elem is
18511 // in the document.
18512 jQuery.contains( elem.ownerDocument, elem ) &&
18513
18514 jQuery.css( elem, "display" ) === "none";
18515 };
18516
18517 var swap = function( elem, options, callback, args ) {
18518 var ret, name,
18519 old = {};
18520
18521 // Remember the old values, and insert the new ones
18522 for ( name in options ) {
18523 old[ name ] = elem.style[ name ];
18524 elem.style[ name ] = options[ name ];
18525 }
18526
18527 ret = callback.apply( elem, args || [] );
18528
18529 // Revert the old values
18530 for ( name in options ) {
18531 elem.style[ name ] = old[ name ];
18532 }
18533
18534 return ret;
18535 };
18536
18537
18538
18539
18540 function adjustCSS( elem, prop, valueParts, tween ) {
18541 var adjusted,
18542 scale = 1,
18543 maxIterations = 20,
18544 currentValue = tween ?
18545 function() {
18546 return tween.cur();
18547 } :
18548 function() {
18549 return jQuery.css( elem, prop, "" );
18550 },
18551 initial = currentValue(),
18552 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
18553
18554 // Starting value computation is required for potential unit mismatches
18555 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
18556 rcssNum.exec( jQuery.css( elem, prop ) );
18557
18558 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
18559
18560 // Trust units reported by jQuery.css
18561 unit = unit || initialInUnit[ 3 ];
18562
18563 // Make sure we update the tween properties later on
18564 valueParts = valueParts || [];
18565
18566 // Iteratively approximate from a nonzero starting point
18567 initialInUnit = +initial || 1;
18568
18569 do {
18570
18571 // If previous iteration zeroed out, double until we get *something*.
18572 // Use string for doubling so we don't accidentally see scale as unchanged below
18573 scale = scale || ".5";
18574
18575 // Adjust and apply
18576 initialInUnit = initialInUnit / scale;
18577 jQuery.style( elem, prop, initialInUnit + unit );
18578
18579 // Update scale, tolerating zero or NaN from tween.cur()
18580 // Break the loop if scale is unchanged or perfect, or if we've just had enough.
18581 } while (
18582 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
18583 );
18584 }
18585
18586 if ( valueParts ) {
18587 initialInUnit = +initialInUnit || +initial || 0;
18588
18589 // Apply relative offset (+=/-=) if specified
18590 adjusted = valueParts[ 1 ] ?
18591 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
18592 +valueParts[ 2 ];
18593 if ( tween ) {
18594 tween.unit = unit;
18595 tween.start = initialInUnit;
18596 tween.end = adjusted;
18597 }
18598 }
18599 return adjusted;
18600 }
18601
18602
18603 var defaultDisplayMap = {};
18604
18605 function getDefaultDisplay( elem ) {
18606 var temp,
18607 doc = elem.ownerDocument,
18608 nodeName = elem.nodeName,
18609 display = defaultDisplayMap[ nodeName ];
18610
18611 if ( display ) {
18612 return display;
18613 }
18614
18615 temp = doc.body.appendChild( doc.createElement( nodeName ) );
18616 display = jQuery.css( temp, "display" );
18617
18618 temp.parentNode.removeChild( temp );
18619
18620 if ( display === "none" ) {
18621 display = "block";
18622 }
18623 defaultDisplayMap[ nodeName ] = display;
18624
18625 return display;
18626 }
18627
18628 function showHide( elements, show ) {
18629 var display, elem,
18630 values = [],
18631 index = 0,
18632 length = elements.length;
18633
18634 // Determine new display value for elements that need to change
18635 for ( ; index < length; index++ ) {
18636 elem = elements[ index ];
18637 if ( !elem.style ) {
18638 continue;
18639 }
18640
18641 display = elem.style.display;
18642 if ( show ) {
18643
18644 // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
18645 // check is required in this first loop unless we have a nonempty display value (either
18646 // inline or about-to-be-restored)
18647 if ( display === "none" ) {
18648 values[ index ] = dataPriv.get( elem, "display" ) || null;
18649 if ( !values[ index ] ) {
18650 elem.style.display = "";
18651 }
18652 }
18653 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
18654 values[ index ] = getDefaultDisplay( elem );
18655 }
18656 } else {
18657 if ( display !== "none" ) {
18658 values[ index ] = "none";
18659
18660 // Remember what we're overwriting
18661 dataPriv.set( elem, "display", display );
18662 }
18663 }
18664 }
18665
18666 // Set the display of the elements in a second loop to avoid constant reflow
18667 for ( index = 0; index < length; index++ ) {
18668 if ( values[ index ] != null ) {
18669 elements[ index ].style.display = values[ index ];
18670 }
18671 }
18672
18673 return elements;
18674 }
18675
18676 jQuery.fn.extend( {
18677 show: function() {
18678 return showHide( this, true );
18679 },
18680 hide: function() {
18681 return showHide( this );
18682 },
18683 toggle: function( state ) {
18684 if ( typeof state === "boolean" ) {
18685 return state ? this.show() : this.hide();
18686 }
18687
18688 return this.each( function() {
18689 if ( isHiddenWithinTree( this ) ) {
18690 jQuery( this ).show();
18691 } else {
18692 jQuery( this ).hide();
18693 }
18694 } );
18695 }
18696 } );
18697 var rcheckableType = ( /^(?:checkbox|radio)$/i );
18698
18699 var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
18700
18701 var rscriptType = ( /^$|\/(?:java|ecma)script/i );
18702
18703
18704
18705 // We have to close these tags to support XHTML (#13200)
18706 var wrapMap = {
18707
18708 // Support: IE <=9 only
18709 option: [ 1, "<select multiple='multiple'>", "</select>" ],
18710
18711 // XHTML parsers do not magically insert elements in the
18712 // same way that tag soup parsers do. So we cannot shorten
18713 // this by omitting <tbody> or other required elements.
18714 thead: [ 1, "<table>", "</table>" ],
18715 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
18716 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
18717 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
18718
18719 _default: [ 0, "", "" ]
18720 };
18721
18722 // Support: IE <=9 only
18723 wrapMap.optgroup = wrapMap.option;
18724
18725 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
18726 wrapMap.th = wrapMap.td;
18727
18728
18729 function getAll( context, tag ) {
18730
18731 // Support: IE <=9 - 11 only
18732 // Use typeof to avoid zero-argument method invocation on host objects (#15151)
18733 var ret;
18734
18735 if ( typeof context.getElementsByTagName !== "undefined" ) {
18736 ret = context.getElementsByTagName( tag || "*" );
18737
18738 } else if ( typeof context.querySelectorAll !== "undefined" ) {
18739 ret = context.querySelectorAll( tag || "*" );
18740
18741 } else {
18742 ret = [];
18743 }
18744
18745 if ( tag === undefined || tag && nodeName( context, tag ) ) {
18746 return jQuery.merge( [ context ], ret );
18747 }
18748
18749 return ret;
18750 }
18751
18752
18753 // Mark scripts as having already been evaluated
18754 function setGlobalEval( elems, refElements ) {
18755 var i = 0,
18756 l = elems.length;
18757
18758 for ( ; i < l; i++ ) {
18759 dataPriv.set(
18760 elems[ i ],
18761 "globalEval",
18762 !refElements || dataPriv.get( refElements[ i ], "globalEval" )
18763 );
18764 }
18765 }
18766
18767
18768 var rhtml = /<|&#?\w+;/;
18769
18770 function buildFragment( elems, context, scripts, selection, ignored ) {
18771 var elem, tmp, tag, wrap, contains, j,
18772 fragment = context.createDocumentFragment(),
18773 nodes = [],
18774 i = 0,
18775 l = elems.length;
18776
18777 for ( ; i < l; i++ ) {
18778 elem = elems[ i ];
18779
18780 if ( elem || elem === 0 ) {
18781
18782 // Add nodes directly
18783 if ( jQuery.type( elem ) === "object" ) {
18784
18785 // Support: Android <=4.0 only, PhantomJS 1 only
18786 // push.apply(_, arraylike) throws on ancient WebKit
18787 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
18788
18789 // Convert non-html into a text node
18790 } else if ( !rhtml.test( elem ) ) {
18791 nodes.push( context.createTextNode( elem ) );
18792
18793 // Convert html into DOM nodes
18794 } else {
18795 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
18796
18797 // Deserialize a standard representation
18798 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
18799 wrap = wrapMap[ tag ] || wrapMap._default;
18800 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
18801
18802 // Descend through wrappers to the right content
18803 j = wrap[ 0 ];
18804 while ( j-- ) {
18805 tmp = tmp.lastChild;
18806 }
18807
18808 // Support: Android <=4.0 only, PhantomJS 1 only
18809 // push.apply(_, arraylike) throws on ancient WebKit
18810 jQuery.merge( nodes, tmp.childNodes );
18811
18812 // Remember the top-level container
18813 tmp = fragment.firstChild;
18814
18815 // Ensure the created nodes are orphaned (#12392)
18816 tmp.textContent = "";
18817 }
18818 }
18819 }
18820
18821 // Remove wrapper from fragment
18822 fragment.textContent = "";
18823
18824 i = 0;
18825 while ( ( elem = nodes[ i++ ] ) ) {
18826
18827 // Skip elements already in the context collection (trac-4087)
18828 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
18829 if ( ignored ) {
18830 ignored.push( elem );
18831 }
18832 continue;
18833 }
18834
18835 contains = jQuery.contains( elem.ownerDocument, elem );
18836
18837 // Append to fragment
18838 tmp = getAll( fragment.appendChild( elem ), "script" );
18839
18840 // Preserve script evaluation history
18841 if ( contains ) {
18842 setGlobalEval( tmp );
18843 }
18844
18845 // Capture executables
18846 if ( scripts ) {
18847 j = 0;
18848 while ( ( elem = tmp[ j++ ] ) ) {
18849 if ( rscriptType.test( elem.type || "" ) ) {
18850 scripts.push( elem );
18851 }
18852 }
18853 }
18854 }
18855
18856 return fragment;
18857 }
18858
18859
18860 ( function() {
18861 var fragment = document.createDocumentFragment(),
18862 div = fragment.appendChild( document.createElement( "div" ) ),
18863 input = document.createElement( "input" );
18864
18865 // Support: Android 4.0 - 4.3 only
18866 // Check state lost if the name is set (#11217)
18867 // Support: Windows Web Apps (WWA)
18868 // `name` and `type` must use .setAttribute for WWA (#14901)
18869 input.setAttribute( "type", "radio" );
18870 input.setAttribute( "checked", "checked" );
18871 input.setAttribute( "name", "t" );
18872
18873 div.appendChild( input );
18874
18875 // Support: Android <=4.1 only
18876 // Older WebKit doesn't clone checked state correctly in fragments
18877 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
18878
18879 // Support: IE <=11 only
18880 // Make sure textarea (and checkbox) defaultValue is properly cloned
18881 div.innerHTML = "<textarea>x</textarea>";
18882 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
18883 } )();
18884 var documentElement = document.documentElement;
18885
18886
18887
18888 var
18889 rkeyEvent = /^key/,
18890 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
18891 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
18892
18893 function returnTrue() {
18894 return true;
18895 }
18896
18897 function returnFalse() {
18898 return false;
18899 }
18900
18901 // Support: IE <=9 only
18902 // See #13393 for more info
18903 function safeActiveElement() {
18904 try {
18905 return document.activeElement;
18906 } catch ( err ) { }
18907 }
18908
18909 function on( elem, types, selector, data, fn, one ) {
18910 var origFn, type;
18911
18912 // Types can be a map of types/handlers
18913 if ( typeof types === "object" ) {
18914
18915 // ( types-Object, selector, data )
18916 if ( typeof selector !== "string" ) {
18917
18918 // ( types-Object, data )
18919 data = data || selector;
18920 selector = undefined;
18921 }
18922 for ( type in types ) {
18923 on( elem, type, selector, data, types[ type ], one );
18924 }
18925 return elem;
18926 }
18927
18928 if ( data == null && fn == null ) {
18929
18930 // ( types, fn )
18931 fn = selector;
18932 data = selector = undefined;
18933 } else if ( fn == null ) {
18934 if ( typeof selector === "string" ) {
18935
18936 // ( types, selector, fn )
18937 fn = data;
18938 data = undefined;
18939 } else {
18940
18941 // ( types, data, fn )
18942 fn = data;
18943 data = selector;
18944 selector = undefined;
18945 }
18946 }
18947 if ( fn === false ) {
18948 fn = returnFalse;
18949 } else if ( !fn ) {
18950 return elem;
18951 }
18952
18953 if ( one === 1 ) {
18954 origFn = fn;
18955 fn = function( event ) {
18956
18957 // Can use an empty set, since event contains the info
18958 jQuery().off( event );
18959 return origFn.apply( this, arguments );
18960 };
18961
18962 // Use same guid so caller can remove using origFn
18963 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
18964 }
18965 return elem.each( function() {
18966 jQuery.event.add( this, types, fn, data, selector );
18967 } );
18968 }
18969
18970 /*
18971 * Helper functions for managing events -- not part of the public interface.
18972 * Props to Dean Edwards' addEvent library for many of the ideas.
18973 */
18974 jQuery.event = {
18975
18976 global: {},
18977
18978 add: function( elem, types, handler, data, selector ) {
18979
18980 var handleObjIn, eventHandle, tmp,
18981 events, t, handleObj,
18982 special, handlers, type, namespaces, origType,
18983 elemData = dataPriv.get( elem );
18984
18985 // Don't attach events to noData or text/comment nodes (but allow plain objects)
18986 if ( !elemData ) {
18987 return;
18988 }
18989
18990 // Caller can pass in an object of custom data in lieu of the handler
18991 if ( handler.handler ) {
18992 handleObjIn = handler;
18993 handler = handleObjIn.handler;
18994 selector = handleObjIn.selector;
18995 }
18996
18997 // Ensure that invalid selectors throw exceptions at attach time
18998 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
18999 if ( selector ) {
19000 jQuery.find.matchesSelector( documentElement, selector );
19001 }
19002
19003 // Make sure that the handler has a unique ID, used to find/remove it later
19004 if ( !handler.guid ) {
19005 handler.guid = jQuery.guid++;
19006 }
19007
19008 // Init the element's event structure and main handler, if this is the first
19009 if ( !( events = elemData.events ) ) {
19010 events = elemData.events = {};
19011 }
19012 if ( !( eventHandle = elemData.handle ) ) {
19013 eventHandle = elemData.handle = function( e ) {
19014
19015 // Discard the second event of a jQuery.event.trigger() and
19016 // when an event is called after a page has unloaded
19017 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
19018 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
19019 };
19020 }
19021
19022 // Handle multiple events separated by a space
19023 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19024 t = types.length;
19025 while ( t-- ) {
19026 tmp = rtypenamespace.exec( types[ t ] ) || [];
19027 type = origType = tmp[ 1 ];
19028 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19029
19030 // There *must* be a type, no attaching namespace-only handlers
19031 if ( !type ) {
19032 continue;
19033 }
19034
19035 // If event changes its type, use the special event handlers for the changed type
19036 special = jQuery.event.special[ type ] || {};
19037
19038 // If selector defined, determine special event api type, otherwise given type
19039 type = ( selector ? special.delegateType : special.bindType ) || type;
19040
19041 // Update special based on newly reset type
19042 special = jQuery.event.special[ type ] || {};
19043
19044 // handleObj is passed to all event handlers
19045 handleObj = jQuery.extend( {
19046 type: type,
19047 origType: origType,
19048 data: data,
19049 handler: handler,
19050 guid: handler.guid,
19051 selector: selector,
19052 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
19053 namespace: namespaces.join( "." )
19054 }, handleObjIn );
19055
19056 // Init the event handler queue if we're the first
19057 if ( !( handlers = events[ type ] ) ) {
19058 handlers = events[ type ] = [];
19059 handlers.delegateCount = 0;
19060
19061 // Only use addEventListener if the special events handler returns false
19062 if ( !special.setup ||
19063 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
19064
19065 if ( elem.addEventListener ) {
19066 elem.addEventListener( type, eventHandle );
19067 }
19068 }
19069 }
19070
19071 if ( special.add ) {
19072 special.add.call( elem, handleObj );
19073
19074 if ( !handleObj.handler.guid ) {
19075 handleObj.handler.guid = handler.guid;
19076 }
19077 }
19078
19079 // Add to the element's handler list, delegates in front
19080 if ( selector ) {
19081 handlers.splice( handlers.delegateCount++, 0, handleObj );
19082 } else {
19083 handlers.push( handleObj );
19084 }
19085
19086 // Keep track of which events have ever been used, for event optimization
19087 jQuery.event.global[ type ] = true;
19088 }
19089
19090 },
19091
19092 // Detach an event or set of events from an element
19093 remove: function( elem, types, handler, selector, mappedTypes ) {
19094
19095 var j, origCount, tmp,
19096 events, t, handleObj,
19097 special, handlers, type, namespaces, origType,
19098 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
19099
19100 if ( !elemData || !( events = elemData.events ) ) {
19101 return;
19102 }
19103
19104 // Once for each type.namespace in types; type may be omitted
19105 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19106 t = types.length;
19107 while ( t-- ) {
19108 tmp = rtypenamespace.exec( types[ t ] ) || [];
19109 type = origType = tmp[ 1 ];
19110 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19111
19112 // Unbind all events (on this namespace, if provided) for the element
19113 if ( !type ) {
19114 for ( type in events ) {
19115 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
19116 }
19117 continue;
19118 }
19119
19120 special = jQuery.event.special[ type ] || {};
19121 type = ( selector ? special.delegateType : special.bindType ) || type;
19122 handlers = events[ type ] || [];
19123 tmp = tmp[ 2 ] &&
19124 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
19125
19126 // Remove matching events
19127 origCount = j = handlers.length;
19128 while ( j-- ) {
19129 handleObj = handlers[ j ];
19130
19131 if ( ( mappedTypes || origType === handleObj.origType ) &&
19132 ( !handler || handler.guid === handleObj.guid ) &&
19133 ( !tmp || tmp.test( handleObj.namespace ) ) &&
19134 ( !selector || selector === handleObj.selector ||
19135 selector === "**" && handleObj.selector ) ) {
19136 handlers.splice( j, 1 );
19137
19138 if ( handleObj.selector ) {
19139 handlers.delegateCount--;
19140 }
19141 if ( special.remove ) {
19142 special.remove.call( elem, handleObj );
19143 }
19144 }
19145 }
19146
19147 // Remove generic event handler if we removed something and no more handlers exist
19148 // (avoids potential for endless recursion during removal of special event handlers)
19149 if ( origCount && !handlers.length ) {
19150 if ( !special.teardown ||
19151 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
19152
19153 jQuery.removeEvent( elem, type, elemData.handle );
19154 }
19155
19156 delete events[ type ];
19157 }
19158 }
19159
19160 // Remove data and the expando if it's no longer used
19161 if ( jQuery.isEmptyObject( events ) ) {
19162 dataPriv.remove( elem, "handle events" );
19163 }
19164 },
19165
19166 dispatch: function( nativeEvent ) {
19167
19168 // Make a writable jQuery.Event from the native event object
19169 var event = jQuery.event.fix( nativeEvent );
19170
19171 var i, j, ret, matched, handleObj, handlerQueue,
19172 args = new Array( arguments.length ),
19173 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
19174 special = jQuery.event.special[ event.type ] || {};
19175
19176 // Use the fix-ed jQuery.Event rather than the (read-only) native event
19177 args[ 0 ] = event;
19178
19179 for ( i = 1; i < arguments.length; i++ ) {
19180 args[ i ] = arguments[ i ];
19181 }
19182
19183 event.delegateTarget = this;
19184
19185 // Call the preDispatch hook for the mapped type, and let it bail if desired
19186 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
19187 return;
19188 }
19189
19190 // Determine handlers
19191 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
19192
19193 // Run delegates first; they may want to stop propagation beneath us
19194 i = 0;
19195 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
19196 event.currentTarget = matched.elem;
19197
19198 j = 0;
19199 while ( ( handleObj = matched.handlers[ j++ ] ) &&
19200 !event.isImmediatePropagationStopped() ) {
19201
19202 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
19203 // a subset or equal to those in the bound event (both can have no namespace).
19204 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
19205
19206 event.handleObj = handleObj;
19207 event.data = handleObj.data;
19208
19209 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
19210 handleObj.handler ).apply( matched.elem, args );
19211
19212 if ( ret !== undefined ) {
19213 if ( ( event.result = ret ) === false ) {
19214 event.preventDefault();
19215 event.stopPropagation();
19216 }
19217 }
19218 }
19219 }
19220 }
19221
19222 // Call the postDispatch hook for the mapped type
19223 if ( special.postDispatch ) {
19224 special.postDispatch.call( this, event );
19225 }
19226
19227 return event.result;
19228 },
19229
19230 handlers: function( event, handlers ) {
19231 var i, handleObj, sel, matchedHandlers, matchedSelectors,
19232 handlerQueue = [],
19233 delegateCount = handlers.delegateCount,
19234 cur = event.target;
19235
19236 // Find delegate handlers
19237 if ( delegateCount &&
19238
19239 // Support: IE <=9
19240 // Black-hole SVG <use> instance trees (trac-13180)
19241 cur.nodeType &&
19242
19243 // Support: Firefox <=42
19244 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
19245 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
19246 // Support: IE 11 only
19247 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
19248 !( event.type === "click" && event.button >= 1 ) ) {
19249
19250 for ( ; cur !== this; cur = cur.parentNode || this ) {
19251
19252 // Don't check non-elements (#13208)
19253 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
19254 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
19255 matchedHandlers = [];
19256 matchedSelectors = {};
19257 for ( i = 0; i < delegateCount; i++ ) {
19258 handleObj = handlers[ i ];
19259
19260 // Don't conflict with Object.prototype properties (#13203)
19261 sel = handleObj.selector + " ";
19262
19263 if ( matchedSelectors[ sel ] === undefined ) {
19264 matchedSelectors[ sel ] = handleObj.needsContext ?
19265 jQuery( sel, this ).index( cur ) > -1 :
19266 jQuery.find( sel, this, null, [ cur ] ).length;
19267 }
19268 if ( matchedSelectors[ sel ] ) {
19269 matchedHandlers.push( handleObj );
19270 }
19271 }
19272 if ( matchedHandlers.length ) {
19273 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
19274 }
19275 }
19276 }
19277 }
19278
19279 // Add the remaining (directly-bound) handlers
19280 cur = this;
19281 if ( delegateCount < handlers.length ) {
19282 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
19283 }
19284
19285 return handlerQueue;
19286 },
19287
19288 addProp: function( name, hook ) {
19289 Object.defineProperty( jQuery.Event.prototype, name, {
19290 enumerable: true,
19291 configurable: true,
19292
19293 get: jQuery.isFunction( hook ) ?
19294 function() {
19295 if ( this.originalEvent ) {
19296 return hook( this.originalEvent );
19297 }
19298 } :
19299 function() {
19300 if ( this.originalEvent ) {
19301 return this.originalEvent[ name ];
19302 }
19303 },
19304
19305 set: function( value ) {
19306 Object.defineProperty( this, name, {
19307 enumerable: true,
19308 configurable: true,
19309 writable: true,
19310 value: value
19311 } );
19312 }
19313 } );
19314 },
19315
19316 fix: function( originalEvent ) {
19317 return originalEvent[ jQuery.expando ] ?
19318 originalEvent :
19319 new jQuery.Event( originalEvent );
19320 },
19321
19322 special: {
19323 load: {
19324
19325 // Prevent triggered image.load events from bubbling to window.load
19326 noBubble: true
19327 },
19328 focus: {
19329
19330 // Fire native event if possible so blur/focus sequence is correct
19331 trigger: function() {
19332 if ( this !== safeActiveElement() && this.focus ) {
19333 this.focus();
19334 return false;
19335 }
19336 },
19337 delegateType: "focusin"
19338 },
19339 blur: {
19340 trigger: function() {
19341 if ( this === safeActiveElement() && this.blur ) {
19342 this.blur();
19343 return false;
19344 }
19345 },
19346 delegateType: "focusout"
19347 },
19348 click: {
19349
19350 // For checkbox, fire native event so checked state will be right
19351 trigger: function() {
19352 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
19353 this.click();
19354 return false;
19355 }
19356 },
19357
19358 // For cross-browser consistency, don't fire native .click() on links
19359 _default: function( event ) {
19360 return nodeName( event.target, "a" );
19361 }
19362 },
19363
19364 beforeunload: {
19365 postDispatch: function( event ) {
19366
19367 // Support: Firefox 20+
19368 // Firefox doesn't alert if the returnValue field is not set.
19369 if ( event.result !== undefined && event.originalEvent ) {
19370 event.originalEvent.returnValue = event.result;
19371 }
19372 }
19373 }
19374 }
19375 };
19376
19377 jQuery.removeEvent = function( elem, type, handle ) {
19378
19379 // This "if" is needed for plain objects
19380 if ( elem.removeEventListener ) {
19381 elem.removeEventListener( type, handle );
19382 }
19383 };
19384
19385 jQuery.Event = function( src, props ) {
19386
19387 // Allow instantiation without the 'new' keyword
19388 if ( !( this instanceof jQuery.Event ) ) {
19389 return new jQuery.Event( src, props );
19390 }
19391
19392 // Event object
19393 if ( src && src.type ) {
19394 this.originalEvent = src;
19395 this.type = src.type;
19396
19397 // Events bubbling up the document may have been marked as prevented
19398 // by a handler lower down the tree; reflect the correct value.
19399 this.isDefaultPrevented = src.defaultPrevented ||
19400 src.defaultPrevented === undefined &&
19401
19402 // Support: Android <=2.3 only
19403 src.returnValue === false ?
19404 returnTrue :
19405 returnFalse;
19406
19407 // Create target properties
19408 // Support: Safari <=6 - 7 only
19409 // Target should not be a text node (#504, #13143)
19410 this.target = ( src.target && src.target.nodeType === 3 ) ?
19411 src.target.parentNode :
19412 src.target;
19413
19414 this.currentTarget = src.currentTarget;
19415 this.relatedTarget = src.relatedTarget;
19416
19417 // Event type
19418 } else {
19419 this.type = src;
19420 }
19421
19422 // Put explicitly provided properties onto the event object
19423 if ( props ) {
19424 jQuery.extend( this, props );
19425 }
19426
19427 // Create a timestamp if incoming event doesn't have one
19428 this.timeStamp = src && src.timeStamp || jQuery.now();
19429
19430 // Mark it as fixed
19431 this[ jQuery.expando ] = true;
19432 };
19433
19434 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
19435 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
19436 jQuery.Event.prototype = {
19437 constructor: jQuery.Event,
19438 isDefaultPrevented: returnFalse,
19439 isPropagationStopped: returnFalse,
19440 isImmediatePropagationStopped: returnFalse,
19441 isSimulated: false,
19442
19443 preventDefault: function() {
19444 var e = this.originalEvent;
19445
19446 this.isDefaultPrevented = returnTrue;
19447
19448 if ( e && !this.isSimulated ) {
19449 e.preventDefault();
19450 }
19451 },
19452 stopPropagation: function() {
19453 var e = this.originalEvent;
19454
19455 this.isPropagationStopped = returnTrue;
19456
19457 if ( e && !this.isSimulated ) {
19458 e.stopPropagation();
19459 }
19460 },
19461 stopImmediatePropagation: function() {
19462 var e = this.originalEvent;
19463
19464 this.isImmediatePropagationStopped = returnTrue;
19465
19466 if ( e && !this.isSimulated ) {
19467 e.stopImmediatePropagation();
19468 }
19469
19470 this.stopPropagation();
19471 }
19472 };
19473
19474 // Includes all common event props including KeyEvent and MouseEvent specific props
19475 jQuery.each( {
19476 altKey: true,
19477 bubbles: true,
19478 cancelable: true,
19479 changedTouches: true,
19480 ctrlKey: true,
19481 detail: true,
19482 eventPhase: true,
19483 metaKey: true,
19484 pageX: true,
19485 pageY: true,
19486 shiftKey: true,
19487 view: true,
19488 "char": true,
19489 charCode: true,
19490 key: true,
19491 keyCode: true,
19492 button: true,
19493 buttons: true,
19494 clientX: true,
19495 clientY: true,
19496 offsetX: true,
19497 offsetY: true,
19498 pointerId: true,
19499 pointerType: true,
19500 screenX: true,
19501 screenY: true,
19502 targetTouches: true,
19503 toElement: true,
19504 touches: true,
19505
19506 which: function( event ) {
19507 var button = event.button;
19508
19509 // Add which for key events
19510 if ( event.which == null && rkeyEvent.test( event.type ) ) {
19511 return event.charCode != null ? event.charCode : event.keyCode;
19512 }
19513
19514 // Add which for click: 1 === left; 2 === middle; 3 === right
19515 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
19516 if ( button & 1 ) {
19517 return 1;
19518 }
19519
19520 if ( button & 2 ) {
19521 return 3;
19522 }
19523
19524 if ( button & 4 ) {
19525 return 2;
19526 }
19527
19528 return 0;
19529 }
19530
19531 return event.which;
19532 }
19533 }, jQuery.event.addProp );
19534
19535 // Create mouseenter/leave events using mouseover/out and event-time checks
19536 // so that event delegation works in jQuery.
19537 // Do the same for pointerenter/pointerleave and pointerover/pointerout
19538 //
19539 // Support: Safari 7 only
19540 // Safari sends mouseenter too often; see:
19541 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
19542 // for the description of the bug (it existed in older Chrome versions as well).
19543 jQuery.each( {
19544 mouseenter: "mouseover",
19545 mouseleave: "mouseout",
19546 pointerenter: "pointerover",
19547 pointerleave: "pointerout"
19548 }, function( orig, fix ) {
19549 jQuery.event.special[ orig ] = {
19550 delegateType: fix,
19551 bindType: fix,
19552
19553 handle: function( event ) {
19554 var ret,
19555 target = this,
19556 related = event.relatedTarget,
19557 handleObj = event.handleObj;
19558
19559 // For mouseenter/leave call the handler if related is outside the target.
19560 // NB: No relatedTarget if the mouse left/entered the browser window
19561 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
19562 event.type = handleObj.origType;
19563 ret = handleObj.handler.apply( this, arguments );
19564 event.type = fix;
19565 }
19566 return ret;
19567 }
19568 };
19569 } );
19570
19571 jQuery.fn.extend( {
19572
19573 on: function( types, selector, data, fn ) {
19574 return on( this, types, selector, data, fn );
19575 },
19576 one: function( types, selector, data, fn ) {
19577 return on( this, types, selector, data, fn, 1 );
19578 },
19579 off: function( types, selector, fn ) {
19580 var handleObj, type;
19581 if ( types && types.preventDefault && types.handleObj ) {
19582
19583 // ( event ) dispatched jQuery.Event
19584 handleObj = types.handleObj;
19585 jQuery( types.delegateTarget ).off(
19586 handleObj.namespace ?
19587 handleObj.origType + "." + handleObj.namespace :
19588 handleObj.origType,
19589 handleObj.selector,
19590 handleObj.handler
19591 );
19592 return this;
19593 }
19594 if ( typeof types === "object" ) {
19595
19596 // ( types-object [, selector] )
19597 for ( type in types ) {
19598 this.off( type, selector, types[ type ] );
19599 }
19600 return this;
19601 }
19602 if ( selector === false || typeof selector === "function" ) {
19603
19604 // ( types [, fn] )
19605 fn = selector;
19606 selector = undefined;
19607 }
19608 if ( fn === false ) {
19609 fn = returnFalse;
19610 }
19611 return this.each( function() {
19612 jQuery.event.remove( this, types, fn, selector );
19613 } );
19614 }
19615 } );
19616
19617
19618 var
19619
19620 /* eslint-disable max-len */
19621
19622 // See https://github.com/eslint/eslint/issues/3229
19623 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
19624
19625 /* eslint-enable */
19626
19627 // Support: IE <=10 - 11, Edge 12 - 13
19628 // In IE/Edge using regex groups here causes severe slowdowns.
19629 // See https://connect.microsoft.com/IE/feedback/details/1736512/
19630 rnoInnerhtml = /<script|<style|<link/i,
19631
19632 // checked="checked" or checked
19633 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
19634 rscriptTypeMasked = /^true\/(.*)/,
19635 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
19636
19637 // Prefer a tbody over its parent table for containing new rows
19638 function manipulationTarget( elem, content ) {
19639 if ( nodeName( elem, "table" ) &&
19640 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
19641
19642 return jQuery( ">tbody", elem )[ 0 ] || elem;
19643 }
19644
19645 return elem;
19646 }
19647
19648 // Replace/restore the type attribute of script elements for safe DOM manipulation
19649 function disableScript( elem ) {
19650 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
19651 return elem;
19652 }
19653 function restoreScript( elem ) {
19654 var match = rscriptTypeMasked.exec( elem.type );
19655
19656 if ( match ) {
19657 elem.type = match[ 1 ];
19658 } else {
19659 elem.removeAttribute( "type" );
19660 }
19661
19662 return elem;
19663 }
19664
19665 function cloneCopyEvent( src, dest ) {
19666 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
19667
19668 if ( dest.nodeType !== 1 ) {
19669 return;
19670 }
19671
19672 // 1. Copy private data: events, handlers, etc.
19673 if ( dataPriv.hasData( src ) ) {
19674 pdataOld = dataPriv.access( src );
19675 pdataCur = dataPriv.set( dest, pdataOld );
19676 events = pdataOld.events;
19677
19678 if ( events ) {
19679 delete pdataCur.handle;
19680 pdataCur.events = {};
19681
19682 for ( type in events ) {
19683 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
19684 jQuery.event.add( dest, type, events[ type ][ i ] );
19685 }
19686 }
19687 }
19688 }
19689
19690 // 2. Copy user data
19691 if ( dataUser.hasData( src ) ) {
19692 udataOld = dataUser.access( src );
19693 udataCur = jQuery.extend( {}, udataOld );
19694
19695 dataUser.set( dest, udataCur );
19696 }
19697 }
19698
19699 // Fix IE bugs, see support tests
19700 function fixInput( src, dest ) {
19701 var nodeName = dest.nodeName.toLowerCase();
19702
19703 // Fails to persist the checked state of a cloned checkbox or radio button.
19704 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
19705 dest.checked = src.checked;
19706
19707 // Fails to return the selected option to the default selected state when cloning options
19708 } else if ( nodeName === "input" || nodeName === "textarea" ) {
19709 dest.defaultValue = src.defaultValue;
19710 }
19711 }
19712
19713 function domManip( collection, args, callback, ignored ) {
19714
19715 // Flatten any nested arrays
19716 args = concat.apply( [], args );
19717
19718 var fragment, first, scripts, hasScripts, node, doc,
19719 i = 0,
19720 l = collection.length,
19721 iNoClone = l - 1,
19722 value = args[ 0 ],
19723 isFunction = jQuery.isFunction( value );
19724
19725 // We can't cloneNode fragments that contain checked, in WebKit
19726 if ( isFunction ||
19727 ( l > 1 && typeof value === "string" &&
19728 !support.checkClone && rchecked.test( value ) ) ) {
19729 return collection.each( function( index ) {
19730 var self = collection.eq( index );
19731 if ( isFunction ) {
19732 args[ 0 ] = value.call( this, index, self.html() );
19733 }
19734 domManip( self, args, callback, ignored );
19735 } );
19736 }
19737
19738 if ( l ) {
19739 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
19740 first = fragment.firstChild;
19741
19742 if ( fragment.childNodes.length === 1 ) {
19743 fragment = first;
19744 }
19745
19746 // Require either new content or an interest in ignored elements to invoke the callback
19747 if ( first || ignored ) {
19748 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
19749 hasScripts = scripts.length;
19750
19751 // Use the original fragment for the last item
19752 // instead of the first because it can end up
19753 // being emptied incorrectly in certain situations (#8070).
19754 for ( ; i < l; i++ ) {
19755 node = fragment;
19756
19757 if ( i !== iNoClone ) {
19758 node = jQuery.clone( node, true, true );
19759
19760 // Keep references to cloned scripts for later restoration
19761 if ( hasScripts ) {
19762
19763 // Support: Android <=4.0 only, PhantomJS 1 only
19764 // push.apply(_, arraylike) throws on ancient WebKit
19765 jQuery.merge( scripts, getAll( node, "script" ) );
19766 }
19767 }
19768
19769 callback.call( collection[ i ], node, i );
19770 }
19771
19772 if ( hasScripts ) {
19773 doc = scripts[ scripts.length - 1 ].ownerDocument;
19774
19775 // Reenable scripts
19776 jQuery.map( scripts, restoreScript );
19777
19778 // Evaluate executable scripts on first document insertion
19779 for ( i = 0; i < hasScripts; i++ ) {
19780 node = scripts[ i ];
19781 if ( rscriptType.test( node.type || "" ) &&
19782 !dataPriv.access( node, "globalEval" ) &&
19783 jQuery.contains( doc, node ) ) {
19784
19785 if ( node.src ) {
19786
19787 // Optional AJAX dependency, but won't run scripts if not present
19788 if ( jQuery._evalUrl ) {
19789 jQuery._evalUrl( node.src );
19790 }
19791 } else {
19792 DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
19793 }
19794 }
19795 }
19796 }
19797 }
19798 }
19799
19800 return collection;
19801 }
19802
19803 function remove( elem, selector, keepData ) {
19804 var node,
19805 nodes = selector ? jQuery.filter( selector, elem ) : elem,
19806 i = 0;
19807
19808 for ( ; ( node = nodes[ i ] ) != null; i++ ) {
19809 if ( !keepData && node.nodeType === 1 ) {
19810 jQuery.cleanData( getAll( node ) );
19811 }
19812
19813 if ( node.parentNode ) {
19814 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
19815 setGlobalEval( getAll( node, "script" ) );
19816 }
19817 node.parentNode.removeChild( node );
19818 }
19819 }
19820
19821 return elem;
19822 }
19823
19824 jQuery.extend( {
19825 htmlPrefilter: function( html ) {
19826 return html.replace( rxhtmlTag, "<$1></$2>" );
19827 },
19828
19829 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
19830 var i, l, srcElements, destElements,
19831 clone = elem.cloneNode( true ),
19832 inPage = jQuery.contains( elem.ownerDocument, elem );
19833
19834 // Fix IE cloning issues
19835 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
19836 !jQuery.isXMLDoc( elem ) ) {
19837
19838 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
19839 destElements = getAll( clone );
19840 srcElements = getAll( elem );
19841
19842 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19843 fixInput( srcElements[ i ], destElements[ i ] );
19844 }
19845 }
19846
19847 // Copy the events from the original to the clone
19848 if ( dataAndEvents ) {
19849 if ( deepDataAndEvents ) {
19850 srcElements = srcElements || getAll( elem );
19851 destElements = destElements || getAll( clone );
19852
19853 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19854 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
19855 }
19856 } else {
19857 cloneCopyEvent( elem, clone );
19858 }
19859 }
19860
19861 // Preserve script evaluation history
19862 destElements = getAll( clone, "script" );
19863 if ( destElements.length > 0 ) {
19864 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
19865 }
19866
19867 // Return the cloned set
19868 return clone;
19869 },
19870
19871 cleanData: function( elems ) {
19872 var data, elem, type,
19873 special = jQuery.event.special,
19874 i = 0;
19875
19876 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
19877 if ( acceptData( elem ) ) {
19878 if ( ( data = elem[ dataPriv.expando ] ) ) {
19879 if ( data.events ) {
19880 for ( type in data.events ) {
19881 if ( special[ type ] ) {
19882 jQuery.event.remove( elem, type );
19883
19884 // This is a shortcut to avoid jQuery.event.remove's overhead
19885 } else {
19886 jQuery.removeEvent( elem, type, data.handle );
19887 }
19888 }
19889 }
19890
19891 // Support: Chrome <=35 - 45+
19892 // Assign undefined instead of using delete, see Data#remove
19893 elem[ dataPriv.expando ] = undefined;
19894 }
19895 if ( elem[ dataUser.expando ] ) {
19896
19897 // Support: Chrome <=35 - 45+
19898 // Assign undefined instead of using delete, see Data#remove
19899 elem[ dataUser.expando ] = undefined;
19900 }
19901 }
19902 }
19903 }
19904 } );
19905
19906 jQuery.fn.extend( {
19907 detach: function( selector ) {
19908 return remove( this, selector, true );
19909 },
19910
19911 remove: function( selector ) {
19912 return remove( this, selector );
19913 },
19914
19915 text: function( value ) {
19916 return access( this, function( value ) {
19917 return value === undefined ?
19918 jQuery.text( this ) :
19919 this.empty().each( function() {
19920 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19921 this.textContent = value;
19922 }
19923 } );
19924 }, null, value, arguments.length );
19925 },
19926
19927 append: function() {
19928 return domManip( this, arguments, function( elem ) {
19929 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19930 var target = manipulationTarget( this, elem );
19931 target.appendChild( elem );
19932 }
19933 } );
19934 },
19935
19936 prepend: function() {
19937 return domManip( this, arguments, function( elem ) {
19938 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19939 var target = manipulationTarget( this, elem );
19940 target.insertBefore( elem, target.firstChild );
19941 }
19942 } );
19943 },
19944
19945 before: function() {
19946 return domManip( this, arguments, function( elem ) {
19947 if ( this.parentNode ) {
19948 this.parentNode.insertBefore( elem, this );
19949 }
19950 } );
19951 },
19952
19953 after: function() {
19954 return domManip( this, arguments, function( elem ) {
19955 if ( this.parentNode ) {
19956 this.parentNode.insertBefore( elem, this.nextSibling );
19957 }
19958 } );
19959 },
19960
19961 empty: function() {
19962 var elem,
19963 i = 0;
19964
19965 for ( ; ( elem = this[ i ] ) != null; i++ ) {
19966 if ( elem.nodeType === 1 ) {
19967
19968 // Prevent memory leaks
19969 jQuery.cleanData( getAll( elem, false ) );
19970
19971 // Remove any remaining nodes
19972 elem.textContent = "";
19973 }
19974 }
19975
19976 return this;
19977 },
19978
19979 clone: function( dataAndEvents, deepDataAndEvents ) {
19980 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
19981 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
19982
19983 return this.map( function() {
19984 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
19985 } );
19986 },
19987
19988 html: function( value ) {
19989 return access( this, function( value ) {
19990 var elem = this[ 0 ] || {},
19991 i = 0,
19992 l = this.length;
19993
19994 if ( value === undefined && elem.nodeType === 1 ) {
19995 return elem.innerHTML;
19996 }
19997
19998 // See if we can take a shortcut and just use innerHTML
19999 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
20000 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
20001
20002 value = jQuery.htmlPrefilter( value );
20003
20004 try {
20005 for ( ; i < l; i++ ) {
20006 elem = this[ i ] || {};
20007
20008 // Remove element nodes and prevent memory leaks
20009 if ( elem.nodeType === 1 ) {
20010 jQuery.cleanData( getAll( elem, false ) );
20011 elem.innerHTML = value;
20012 }
20013 }
20014
20015 elem = 0;
20016
20017 // If using innerHTML throws an exception, use the fallback method
20018 } catch ( e ) {}
20019 }
20020
20021 if ( elem ) {
20022 this.empty().append( value );
20023 }
20024 }, null, value, arguments.length );
20025 },
20026
20027 replaceWith: function() {
20028 var ignored = [];
20029
20030 // Make the changes, replacing each non-ignored context element with the new content
20031 return domManip( this, arguments, function( elem ) {
20032 var parent = this.parentNode;
20033
20034 if ( jQuery.inArray( this, ignored ) < 0 ) {
20035 jQuery.cleanData( getAll( this ) );
20036 if ( parent ) {
20037 parent.replaceChild( elem, this );
20038 }
20039 }
20040
20041 // Force callback invocation
20042 }, ignored );
20043 }
20044 } );
20045
20046 jQuery.each( {
20047 appendTo: "append",
20048 prependTo: "prepend",
20049 insertBefore: "before",
20050 insertAfter: "after",
20051 replaceAll: "replaceWith"
20052 }, function( name, original ) {
20053 jQuery.fn[ name ] = function( selector ) {
20054 var elems,
20055 ret = [],
20056 insert = jQuery( selector ),
20057 last = insert.length - 1,
20058 i = 0;
20059
20060 for ( ; i <= last; i++ ) {
20061 elems = i === last ? this : this.clone( true );
20062 jQuery( insert[ i ] )[ original ]( elems );
20063
20064 // Support: Android <=4.0 only, PhantomJS 1 only
20065 // .get() because push.apply(_, arraylike) throws on ancient WebKit
20066 push.apply( ret, elems.get() );
20067 }
20068
20069 return this.pushStack( ret );
20070 };
20071 } );
20072 var rmargin = ( /^margin/ );
20073
20074 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
20075
20076 var getStyles = function( elem ) {
20077
20078 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
20079 // IE throws on elements created in popups
20080 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
20081 var view = elem.ownerDocument.defaultView;
20082
20083 if ( !view || !view.opener ) {
20084 view = window;
20085 }
20086
20087 return view.getComputedStyle( elem );
20088 };
20089
20090
20091
20092 ( function() {
20093
20094 // Executing both pixelPosition & boxSizingReliable tests require only one layout
20095 // so they're executed at the same time to save the second computation.
20096 function computeStyleTests() {
20097
20098 // This is a singleton, we need to execute it only once
20099 if ( !div ) {
20100 return;
20101 }
20102
20103 div.style.cssText =
20104 "box-sizing:border-box;" +
20105 "position:relative;display:block;" +
20106 "margin:auto;border:1px;padding:1px;" +
20107 "top:1%;width:50%";
20108 div.innerHTML = "";
20109 documentElement.appendChild( container );
20110
20111 var divStyle = window.getComputedStyle( div );
20112 pixelPositionVal = divStyle.top !== "1%";
20113
20114 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
20115 reliableMarginLeftVal = divStyle.marginLeft === "2px";
20116 boxSizingReliableVal = divStyle.width === "4px";
20117
20118 // Support: Android 4.0 - 4.3 only
20119 // Some styles come back with percentage values, even though they shouldn't
20120 div.style.marginRight = "50%";
20121 pixelMarginRightVal = divStyle.marginRight === "4px";
20122
20123 documentElement.removeChild( container );
20124
20125 // Nullify the div so it wouldn't be stored in the memory and
20126 // it will also be a sign that checks already performed
20127 div = null;
20128 }
20129
20130 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
20131 container = document.createElement( "div" ),
20132 div = document.createElement( "div" );
20133
20134 // Finish early in limited (non-browser) environments
20135 if ( !div.style ) {
20136 return;
20137 }
20138
20139 // Support: IE <=9 - 11 only
20140 // Style of cloned element affects source element cloned (#8908)
20141 div.style.backgroundClip = "content-box";
20142 div.cloneNode( true ).style.backgroundClip = "";
20143 support.clearCloneStyle = div.style.backgroundClip === "content-box";
20144
20145 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
20146 "padding:0;margin-top:1px;position:absolute";
20147 container.appendChild( div );
20148
20149 jQuery.extend( support, {
20150 pixelPosition: function() {
20151 computeStyleTests();
20152 return pixelPositionVal;
20153 },
20154 boxSizingReliable: function() {
20155 computeStyleTests();
20156 return boxSizingReliableVal;
20157 },
20158 pixelMarginRight: function() {
20159 computeStyleTests();
20160 return pixelMarginRightVal;
20161 },
20162 reliableMarginLeft: function() {
20163 computeStyleTests();
20164 return reliableMarginLeftVal;
20165 }
20166 } );
20167 } )();
20168
20169
20170 function curCSS( elem, name, computed ) {
20171 var width, minWidth, maxWidth, ret,
20172
20173 // Support: Firefox 51+
20174 // Retrieving style before computed somehow
20175 // fixes an issue with getting wrong values
20176 // on detached elements
20177 style = elem.style;
20178
20179 computed = computed || getStyles( elem );
20180
20181 // getPropertyValue is needed for:
20182 // .css('filter') (IE 9 only, #12537)
20183 // .css('--customProperty) (#3144)
20184 if ( computed ) {
20185 ret = computed.getPropertyValue( name ) || computed[ name ];
20186
20187 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
20188 ret = jQuery.style( elem, name );
20189 }
20190
20191 // A tribute to the "awesome hack by Dean Edwards"
20192 // Android Browser returns percentage for some values,
20193 // but width seems to be reliably pixels.
20194 // This is against the CSSOM draft spec:
20195 // https://drafts.csswg.org/cssom/#resolved-values
20196 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
20197
20198 // Remember the original values
20199 width = style.width;
20200 minWidth = style.minWidth;
20201 maxWidth = style.maxWidth;
20202
20203 // Put in the new values to get a computed value out
20204 style.minWidth = style.maxWidth = style.width = ret;
20205 ret = computed.width;
20206
20207 // Revert the changed values
20208 style.width = width;
20209 style.minWidth = minWidth;
20210 style.maxWidth = maxWidth;
20211 }
20212 }
20213
20214 return ret !== undefined ?
20215
20216 // Support: IE <=9 - 11 only
20217 // IE returns zIndex value as an integer.
20218 ret + "" :
20219 ret;
20220 }
20221
20222
20223 function addGetHookIf( conditionFn, hookFn ) {
20224
20225 // Define the hook, we'll check on the first run if it's really needed.
20226 return {
20227 get: function() {
20228 if ( conditionFn() ) {
20229
20230 // Hook not needed (or it's not possible to use it due
20231 // to missing dependency), remove it.
20232 delete this.get;
20233 return;
20234 }
20235
20236 // Hook needed; redefine it so that the support test is not executed again.
20237 return ( this.get = hookFn ).apply( this, arguments );
20238 }
20239 };
20240 }
20241
20242
20243 var
20244
20245 // Swappable if display is none or starts with table
20246 // except "table", "table-cell", or "table-caption"
20247 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
20248 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
20249 rcustomProp = /^--/,
20250 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
20251 cssNormalTransform = {
20252 letterSpacing: "0",
20253 fontWeight: "400"
20254 },
20255
20256 cssPrefixes = [ "Webkit", "Moz", "ms" ],
20257 emptyStyle = document.createElement( "div" ).style;
20258
20259 // Return a css property mapped to a potentially vendor prefixed property
20260 function vendorPropName( name ) {
20261
20262 // Shortcut for names that are not vendor prefixed
20263 if ( name in emptyStyle ) {
20264 return name;
20265 }
20266
20267 // Check for vendor prefixed names
20268 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
20269 i = cssPrefixes.length;
20270
20271 while ( i-- ) {
20272 name = cssPrefixes[ i ] + capName;
20273 if ( name in emptyStyle ) {
20274 return name;
20275 }
20276 }
20277 }
20278
20279 // Return a property mapped along what jQuery.cssProps suggests or to
20280 // a vendor prefixed property.
20281 function finalPropName( name ) {
20282 var ret = jQuery.cssProps[ name ];
20283 if ( !ret ) {
20284 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
20285 }
20286 return ret;
20287 }
20288
20289 function setPositiveNumber( elem, value, subtract ) {
20290
20291 // Any relative (+/-) values have already been
20292 // normalized at this point
20293 var matches = rcssNum.exec( value );
20294 return matches ?
20295
20296 // Guard against undefined "subtract", e.g., when used as in cssHooks
20297 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
20298 value;
20299 }
20300
20301 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
20302 var i,
20303 val = 0;
20304
20305 // If we already have the right measurement, avoid augmentation
20306 if ( extra === ( isBorderBox ? "border" : "content" ) ) {
20307 i = 4;
20308
20309 // Otherwise initialize for horizontal or vertical properties
20310 } else {
20311 i = name === "width" ? 1 : 0;
20312 }
20313
20314 for ( ; i < 4; i += 2 ) {
20315
20316 // Both box models exclude margin, so add it if we want it
20317 if ( extra === "margin" ) {
20318 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
20319 }
20320
20321 if ( isBorderBox ) {
20322
20323 // border-box includes padding, so remove it if we want content
20324 if ( extra === "content" ) {
20325 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20326 }
20327
20328 // At this point, extra isn't border nor margin, so remove border
20329 if ( extra !== "margin" ) {
20330 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20331 }
20332 } else {
20333
20334 // At this point, extra isn't content, so add padding
20335 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20336
20337 // At this point, extra isn't content nor padding, so add border
20338 if ( extra !== "padding" ) {
20339 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20340 }
20341 }
20342 }
20343
20344 return val;
20345 }
20346
20347 function getWidthOrHeight( elem, name, extra ) {
20348
20349 // Start with computed style
20350 var valueIsBorderBox,
20351 styles = getStyles( elem ),
20352 val = curCSS( elem, name, styles ),
20353 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
20354
20355 // Computed unit is not pixels. Stop here and return.
20356 if ( rnumnonpx.test( val ) ) {
20357 return val;
20358 }
20359
20360 // Check for style in case a browser which returns unreliable values
20361 // for getComputedStyle silently falls back to the reliable elem.style
20362 valueIsBorderBox = isBorderBox &&
20363 ( support.boxSizingReliable() || val === elem.style[ name ] );
20364
20365 // Fall back to offsetWidth/Height when value is "auto"
20366 // This happens for inline elements with no explicit setting (gh-3571)
20367 if ( val === "auto" ) {
20368 val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
20369 }
20370
20371 // Normalize "", auto, and prepare for extra
20372 val = parseFloat( val ) || 0;
20373
20374 // Use the active box-sizing model to add/subtract irrelevant styles
20375 return ( val +
20376 augmentWidthOrHeight(
20377 elem,
20378 name,
20379 extra || ( isBorderBox ? "border" : "content" ),
20380 valueIsBorderBox,
20381 styles
20382 )
20383 ) + "px";
20384 }
20385
20386 jQuery.extend( {
20387
20388 // Add in style property hooks for overriding the default
20389 // behavior of getting and setting a style property
20390 cssHooks: {
20391 opacity: {
20392 get: function( elem, computed ) {
20393 if ( computed ) {
20394
20395 // We should always get a number back from opacity
20396 var ret = curCSS( elem, "opacity" );
20397 return ret === "" ? "1" : ret;
20398 }
20399 }
20400 }
20401 },
20402
20403 // Don't automatically add "px" to these possibly-unitless properties
20404 cssNumber: {
20405 "animationIterationCount": true,
20406 "columnCount": true,
20407 "fillOpacity": true,
20408 "flexGrow": true,
20409 "flexShrink": true,
20410 "fontWeight": true,
20411 "lineHeight": true,
20412 "opacity": true,
20413 "order": true,
20414 "orphans": true,
20415 "widows": true,
20416 "zIndex": true,
20417 "zoom": true
20418 },
20419
20420 // Add in properties whose names you wish to fix before
20421 // setting or getting the value
20422 cssProps: {
20423 "float": "cssFloat"
20424 },
20425
20426 // Get and set the style property on a DOM Node
20427 style: function( elem, name, value, extra ) {
20428
20429 // Don't set styles on text and comment nodes
20430 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
20431 return;
20432 }
20433
20434 // Make sure that we're working with the right name
20435 var ret, type, hooks,
20436 origName = jQuery.camelCase( name ),
20437 isCustomProp = rcustomProp.test( name ),
20438 style = elem.style;
20439
20440 // Make sure that we're working with the right name. We don't
20441 // want to query the value if it is a CSS custom property
20442 // since they are user-defined.
20443 if ( !isCustomProp ) {
20444 name = finalPropName( origName );
20445 }
20446
20447 // Gets hook for the prefixed version, then unprefixed version
20448 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20449
20450 // Check if we're setting a value
20451 if ( value !== undefined ) {
20452 type = typeof value;
20453
20454 // Convert "+=" or "-=" to relative numbers (#7345)
20455 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
20456 value = adjustCSS( elem, name, ret );
20457
20458 // Fixes bug #9237
20459 type = "number";
20460 }
20461
20462 // Make sure that null and NaN values aren't set (#7116)
20463 if ( value == null || value !== value ) {
20464 return;
20465 }
20466
20467 // If a number was passed in, add the unit (except for certain CSS properties)
20468 if ( type === "number" ) {
20469 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
20470 }
20471
20472 // background-* props affect original clone's values
20473 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
20474 style[ name ] = "inherit";
20475 }
20476
20477 // If a hook was provided, use that value, otherwise just set the specified value
20478 if ( !hooks || !( "set" in hooks ) ||
20479 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
20480
20481 if ( isCustomProp ) {
20482 style.setProperty( name, value );
20483 } else {
20484 style[ name ] = value;
20485 }
20486 }
20487
20488 } else {
20489
20490 // If a hook was provided get the non-computed value from there
20491 if ( hooks && "get" in hooks &&
20492 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
20493
20494 return ret;
20495 }
20496
20497 // Otherwise just get the value from the style object
20498 return style[ name ];
20499 }
20500 },
20501
20502 css: function( elem, name, extra, styles ) {
20503 var val, num, hooks,
20504 origName = jQuery.camelCase( name ),
20505 isCustomProp = rcustomProp.test( name );
20506
20507 // Make sure that we're working with the right name. We don't
20508 // want to modify the value if it is a CSS custom property
20509 // since they are user-defined.
20510 if ( !isCustomProp ) {
20511 name = finalPropName( origName );
20512 }
20513
20514 // Try prefixed name followed by the unprefixed name
20515 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20516
20517 // If a hook was provided get the computed value from there
20518 if ( hooks && "get" in hooks ) {
20519 val = hooks.get( elem, true, extra );
20520 }
20521
20522 // Otherwise, if a way to get the computed value exists, use that
20523 if ( val === undefined ) {
20524 val = curCSS( elem, name, styles );
20525 }
20526
20527 // Convert "normal" to computed value
20528 if ( val === "normal" && name in cssNormalTransform ) {
20529 val = cssNormalTransform[ name ];
20530 }
20531
20532 // Make numeric if forced or a qualifier was provided and val looks numeric
20533 if ( extra === "" || extra ) {
20534 num = parseFloat( val );
20535 return extra === true || isFinite( num ) ? num || 0 : val;
20536 }
20537
20538 return val;
20539 }
20540 } );
20541
20542 jQuery.each( [ "height", "width" ], function( i, name ) {
20543 jQuery.cssHooks[ name ] = {
20544 get: function( elem, computed, extra ) {
20545 if ( computed ) {
20546
20547 // Certain elements can have dimension info if we invisibly show them
20548 // but it must have a current display style that would benefit
20549 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
20550
20551 // Support: Safari 8+
20552 // Table columns in Safari have non-zero offsetWidth & zero
20553 // getBoundingClientRect().width unless display is changed.
20554 // Support: IE <=11 only
20555 // Running getBoundingClientRect on a disconnected node
20556 // in IE throws an error.
20557 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
20558 swap( elem, cssShow, function() {
20559 return getWidthOrHeight( elem, name, extra );
20560 } ) :
20561 getWidthOrHeight( elem, name, extra );
20562 }
20563 },
20564
20565 set: function( elem, value, extra ) {
20566 var matches,
20567 styles = extra && getStyles( elem ),
20568 subtract = extra && augmentWidthOrHeight(
20569 elem,
20570 name,
20571 extra,
20572 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
20573 styles
20574 );
20575
20576 // Convert to pixels if value adjustment is needed
20577 if ( subtract && ( matches = rcssNum.exec( value ) ) &&
20578 ( matches[ 3 ] || "px" ) !== "px" ) {
20579
20580 elem.style[ name ] = value;
20581 value = jQuery.css( elem, name );
20582 }
20583
20584 return setPositiveNumber( elem, value, subtract );
20585 }
20586 };
20587 } );
20588
20589 jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
20590 function( elem, computed ) {
20591 if ( computed ) {
20592 return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
20593 elem.getBoundingClientRect().left -
20594 swap( elem, { marginLeft: 0 }, function() {
20595 return elem.getBoundingClientRect().left;
20596 } )
20597 ) + "px";
20598 }
20599 }
20600 );
20601
20602 // These hooks are used by animate to expand properties
20603 jQuery.each( {
20604 margin: "",
20605 padding: "",
20606 border: "Width"
20607 }, function( prefix, suffix ) {
20608 jQuery.cssHooks[ prefix + suffix ] = {
20609 expand: function( value ) {
20610 var i = 0,
20611 expanded = {},
20612
20613 // Assumes a single number if not a string
20614 parts = typeof value === "string" ? value.split( " " ) : [ value ];
20615
20616 for ( ; i < 4; i++ ) {
20617 expanded[ prefix + cssExpand[ i ] + suffix ] =
20618 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
20619 }
20620
20621 return expanded;
20622 }
20623 };
20624
20625 if ( !rmargin.test( prefix ) ) {
20626 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
20627 }
20628 } );
20629
20630 jQuery.fn.extend( {
20631 css: function( name, value ) {
20632 return access( this, function( elem, name, value ) {
20633 var styles, len,
20634 map = {},
20635 i = 0;
20636
20637 if ( Array.isArray( name ) ) {
20638 styles = getStyles( elem );
20639 len = name.length;
20640
20641 for ( ; i < len; i++ ) {
20642 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
20643 }
20644
20645 return map;
20646 }
20647
20648 return value !== undefined ?
20649 jQuery.style( elem, name, value ) :
20650 jQuery.css( elem, name );
20651 }, name, value, arguments.length > 1 );
20652 }
20653 } );
20654
20655
20656 function Tween( elem, options, prop, end, easing ) {
20657 return new Tween.prototype.init( elem, options, prop, end, easing );
20658 }
20659 jQuery.Tween = Tween;
20660
20661 Tween.prototype = {
20662 constructor: Tween,
20663 init: function( elem, options, prop, end, easing, unit ) {
20664 this.elem = elem;
20665 this.prop = prop;
20666 this.easing = easing || jQuery.easing._default;
20667 this.options = options;
20668 this.start = this.now = this.cur();
20669 this.end = end;
20670 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
20671 },
20672 cur: function() {
20673 var hooks = Tween.propHooks[ this.prop ];
20674
20675 return hooks && hooks.get ?
20676 hooks.get( this ) :
20677 Tween.propHooks._default.get( this );
20678 },
20679 run: function( percent ) {
20680 var eased,
20681 hooks = Tween.propHooks[ this.prop ];
20682
20683 if ( this.options.duration ) {
20684 this.pos = eased = jQuery.easing[ this.easing ](
20685 percent, this.options.duration * percent, 0, 1, this.options.duration
20686 );
20687 } else {
20688 this.pos = eased = percent;
20689 }
20690 this.now = ( this.end - this.start ) * eased + this.start;
20691
20692 if ( this.options.step ) {
20693 this.options.step.call( this.elem, this.now, this );
20694 }
20695
20696 if ( hooks && hooks.set ) {
20697 hooks.set( this );
20698 } else {
20699 Tween.propHooks._default.set( this );
20700 }
20701 return this;
20702 }
20703 };
20704
20705 Tween.prototype.init.prototype = Tween.prototype;
20706
20707 Tween.propHooks = {
20708 _default: {
20709 get: function( tween ) {
20710 var result;
20711
20712 // Use a property on the element directly when it is not a DOM element,
20713 // or when there is no matching style property that exists.
20714 if ( tween.elem.nodeType !== 1 ||
20715 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
20716 return tween.elem[ tween.prop ];
20717 }
20718
20719 // Passing an empty string as a 3rd parameter to .css will automatically
20720 // attempt a parseFloat and fallback to a string if the parse fails.
20721 // Simple values such as "10px" are parsed to Float;
20722 // complex values such as "rotate(1rad)" are returned as-is.
20723 result = jQuery.css( tween.elem, tween.prop, "" );
20724
20725 // Empty strings, null, undefined and "auto" are converted to 0.
20726 return !result || result === "auto" ? 0 : result;
20727 },
20728 set: function( tween ) {
20729
20730 // Use step hook for back compat.
20731 // Use cssHook if its there.
20732 // Use .style if available and use plain properties where available.
20733 if ( jQuery.fx.step[ tween.prop ] ) {
20734 jQuery.fx.step[ tween.prop ]( tween );
20735 } else if ( tween.elem.nodeType === 1 &&
20736 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
20737 jQuery.cssHooks[ tween.prop ] ) ) {
20738 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
20739 } else {
20740 tween.elem[ tween.prop ] = tween.now;
20741 }
20742 }
20743 }
20744 };
20745
20746 // Support: IE <=9 only
20747 // Panic based approach to setting things on disconnected nodes
20748 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
20749 set: function( tween ) {
20750 if ( tween.elem.nodeType && tween.elem.parentNode ) {
20751 tween.elem[ tween.prop ] = tween.now;
20752 }
20753 }
20754 };
20755
20756 jQuery.easing = {
20757 linear: function( p ) {
20758 return p;
20759 },
20760 swing: function( p ) {
20761 return 0.5 - Math.cos( p * Math.PI ) / 2;
20762 },
20763 _default: "swing"
20764 };
20765
20766 jQuery.fx = Tween.prototype.init;
20767
20768 // Back compat <1.8 extension point
20769 jQuery.fx.step = {};
20770
20771
20772
20773
20774 var
20775 fxNow, inProgress,
20776 rfxtypes = /^(?:toggle|show|hide)$/,
20777 rrun = /queueHooks$/;
20778
20779 function schedule() {
20780 if ( inProgress ) {
20781 if ( document.hidden === false && window.requestAnimationFrame ) {
20782 window.requestAnimationFrame( schedule );
20783 } else {
20784 window.setTimeout( schedule, jQuery.fx.interval );
20785 }
20786
20787 jQuery.fx.tick();
20788 }
20789 }
20790
20791 // Animations created synchronously will run synchronously
20792 function createFxNow() {
20793 window.setTimeout( function() {
20794 fxNow = undefined;
20795 } );
20796 return ( fxNow = jQuery.now() );
20797 }
20798
20799 // Generate parameters to create a standard animation
20800 function genFx( type, includeWidth ) {
20801 var which,
20802 i = 0,
20803 attrs = { height: type };
20804
20805 // If we include width, step value is 1 to do all cssExpand values,
20806 // otherwise step value is 2 to skip over Left and Right
20807 includeWidth = includeWidth ? 1 : 0;
20808 for ( ; i < 4; i += 2 - includeWidth ) {
20809 which = cssExpand[ i ];
20810 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
20811 }
20812
20813 if ( includeWidth ) {
20814 attrs.opacity = attrs.width = type;
20815 }
20816
20817 return attrs;
20818 }
20819
20820 function createTween( value, prop, animation ) {
20821 var tween,
20822 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
20823 index = 0,
20824 length = collection.length;
20825 for ( ; index < length; index++ ) {
20826 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
20827
20828 // We're done with this property
20829 return tween;
20830 }
20831 }
20832 }
20833
20834 function defaultPrefilter( elem, props, opts ) {
20835 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
20836 isBox = "width" in props || "height" in props,
20837 anim = this,
20838 orig = {},
20839 style = elem.style,
20840 hidden = elem.nodeType && isHiddenWithinTree( elem ),
20841 dataShow = dataPriv.get( elem, "fxshow" );
20842
20843 // Queue-skipping animations hijack the fx hooks
20844 if ( !opts.queue ) {
20845 hooks = jQuery._queueHooks( elem, "fx" );
20846 if ( hooks.unqueued == null ) {
20847 hooks.unqueued = 0;
20848 oldfire = hooks.empty.fire;
20849 hooks.empty.fire = function() {
20850 if ( !hooks.unqueued ) {
20851 oldfire();
20852 }
20853 };
20854 }
20855 hooks.unqueued++;
20856
20857 anim.always( function() {
20858
20859 // Ensure the complete handler is called before this completes
20860 anim.always( function() {
20861 hooks.unqueued--;
20862 if ( !jQuery.queue( elem, "fx" ).length ) {
20863 hooks.empty.fire();
20864 }
20865 } );
20866 } );
20867 }
20868
20869 // Detect show/hide animations
20870 for ( prop in props ) {
20871 value = props[ prop ];
20872 if ( rfxtypes.test( value ) ) {
20873 delete props[ prop ];
20874 toggle = toggle || value === "toggle";
20875 if ( value === ( hidden ? "hide" : "show" ) ) {
20876
20877 // Pretend to be hidden if this is a "show" and
20878 // there is still data from a stopped show/hide
20879 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
20880 hidden = true;
20881
20882 // Ignore all other no-op show/hide data
20883 } else {
20884 continue;
20885 }
20886 }
20887 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
20888 }
20889 }
20890
20891 // Bail out if this is a no-op like .hide().hide()
20892 propTween = !jQuery.isEmptyObject( props );
20893 if ( !propTween && jQuery.isEmptyObject( orig ) ) {
20894 return;
20895 }
20896
20897 // Restrict "overflow" and "display" styles during box animations
20898 if ( isBox && elem.nodeType === 1 ) {
20899
20900 // Support: IE <=9 - 11, Edge 12 - 13
20901 // Record all 3 overflow attributes because IE does not infer the shorthand
20902 // from identically-valued overflowX and overflowY
20903 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
20904
20905 // Identify a display type, preferring old show/hide data over the CSS cascade
20906 restoreDisplay = dataShow && dataShow.display;
20907 if ( restoreDisplay == null ) {
20908 restoreDisplay = dataPriv.get( elem, "display" );
20909 }
20910 display = jQuery.css( elem, "display" );
20911 if ( display === "none" ) {
20912 if ( restoreDisplay ) {
20913 display = restoreDisplay;
20914 } else {
20915
20916 // Get nonempty value(s) by temporarily forcing visibility
20917 showHide( [ elem ], true );
20918 restoreDisplay = elem.style.display || restoreDisplay;
20919 display = jQuery.css( elem, "display" );
20920 showHide( [ elem ] );
20921 }
20922 }
20923
20924 // Animate inline elements as inline-block
20925 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
20926 if ( jQuery.css( elem, "float" ) === "none" ) {
20927
20928 // Restore the original display value at the end of pure show/hide animations
20929 if ( !propTween ) {
20930 anim.done( function() {
20931 style.display = restoreDisplay;
20932 } );
20933 if ( restoreDisplay == null ) {
20934 display = style.display;
20935 restoreDisplay = display === "none" ? "" : display;
20936 }
20937 }
20938 style.display = "inline-block";
20939 }
20940 }
20941 }
20942
20943 if ( opts.overflow ) {
20944 style.overflow = "hidden";
20945 anim.always( function() {
20946 style.overflow = opts.overflow[ 0 ];
20947 style.overflowX = opts.overflow[ 1 ];
20948 style.overflowY = opts.overflow[ 2 ];
20949 } );
20950 }
20951
20952 // Implement show/hide animations
20953 propTween = false;
20954 for ( prop in orig ) {
20955
20956 // General show/hide setup for this element animation
20957 if ( !propTween ) {
20958 if ( dataShow ) {
20959 if ( "hidden" in dataShow ) {
20960 hidden = dataShow.hidden;
20961 }
20962 } else {
20963 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
20964 }
20965
20966 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
20967 if ( toggle ) {
20968 dataShow.hidden = !hidden;
20969 }
20970
20971 // Show elements before animating them
20972 if ( hidden ) {
20973 showHide( [ elem ], true );
20974 }
20975
20976 /* eslint-disable no-loop-func */
20977
20978 anim.done( function() {
20979
20980 /* eslint-enable no-loop-func */
20981
20982 // The final step of a "hide" animation is actually hiding the element
20983 if ( !hidden ) {
20984 showHide( [ elem ] );
20985 }
20986 dataPriv.remove( elem, "fxshow" );
20987 for ( prop in orig ) {
20988 jQuery.style( elem, prop, orig[ prop ] );
20989 }
20990 } );
20991 }
20992
20993 // Per-property setup
20994 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
20995 if ( !( prop in dataShow ) ) {
20996 dataShow[ prop ] = propTween.start;
20997 if ( hidden ) {
20998 propTween.end = propTween.start;
20999 propTween.start = 0;
21000 }
21001 }
21002 }
21003 }
21004
21005 function propFilter( props, specialEasing ) {
21006 var index, name, easing, value, hooks;
21007
21008 // camelCase, specialEasing and expand cssHook pass
21009 for ( index in props ) {
21010 name = jQuery.camelCase( index );
21011 easing = specialEasing[ name ];
21012 value = props[ index ];
21013 if ( Array.isArray( value ) ) {
21014 easing = value[ 1 ];
21015 value = props[ index ] = value[ 0 ];
21016 }
21017
21018 if ( index !== name ) {
21019 props[ name ] = value;
21020 delete props[ index ];
21021 }
21022
21023 hooks = jQuery.cssHooks[ name ];
21024 if ( hooks && "expand" in hooks ) {
21025 value = hooks.expand( value );
21026 delete props[ name ];
21027
21028 // Not quite $.extend, this won't overwrite existing keys.
21029 // Reusing 'index' because we have the correct "name"
21030 for ( index in value ) {
21031 if ( !( index in props ) ) {
21032 props[ index ] = value[ index ];
21033 specialEasing[ index ] = easing;
21034 }
21035 }
21036 } else {
21037 specialEasing[ name ] = easing;
21038 }
21039 }
21040 }
21041
21042 function Animation( elem, properties, options ) {
21043 var result,
21044 stopped,
21045 index = 0,
21046 length = Animation.prefilters.length,
21047 deferred = jQuery.Deferred().always( function() {
21048
21049 // Don't match elem in the :animated selector
21050 delete tick.elem;
21051 } ),
21052 tick = function() {
21053 if ( stopped ) {
21054 return false;
21055 }
21056 var currentTime = fxNow || createFxNow(),
21057 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
21058
21059 // Support: Android 2.3 only
21060 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
21061 temp = remaining / animation.duration || 0,
21062 percent = 1 - temp,
21063 index = 0,
21064 length = animation.tweens.length;
21065
21066 for ( ; index < length; index++ ) {
21067 animation.tweens[ index ].run( percent );
21068 }
21069
21070 deferred.notifyWith( elem, [ animation, percent, remaining ] );
21071
21072 // If there's more to do, yield
21073 if ( percent < 1 && length ) {
21074 return remaining;
21075 }
21076
21077 // If this was an empty animation, synthesize a final progress notification
21078 if ( !length ) {
21079 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21080 }
21081
21082 // Resolve the animation and report its conclusion
21083 deferred.resolveWith( elem, [ animation ] );
21084 return false;
21085 },
21086 animation = deferred.promise( {
21087 elem: elem,
21088 props: jQuery.extend( {}, properties ),
21089 opts: jQuery.extend( true, {
21090 specialEasing: {},
21091 easing: jQuery.easing._default
21092 }, options ),
21093 originalProperties: properties,
21094 originalOptions: options,
21095 startTime: fxNow || createFxNow(),
21096 duration: options.duration,
21097 tweens: [],
21098 createTween: function( prop, end ) {
21099 var tween = jQuery.Tween( elem, animation.opts, prop, end,
21100 animation.opts.specialEasing[ prop ] || animation.opts.easing );
21101 animation.tweens.push( tween );
21102 return tween;
21103 },
21104 stop: function( gotoEnd ) {
21105 var index = 0,
21106
21107 // If we are going to the end, we want to run all the tweens
21108 // otherwise we skip this part
21109 length = gotoEnd ? animation.tweens.length : 0;
21110 if ( stopped ) {
21111 return this;
21112 }
21113 stopped = true;
21114 for ( ; index < length; index++ ) {
21115 animation.tweens[ index ].run( 1 );
21116 }
21117
21118 // Resolve when we played the last frame; otherwise, reject
21119 if ( gotoEnd ) {
21120 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21121 deferred.resolveWith( elem, [ animation, gotoEnd ] );
21122 } else {
21123 deferred.rejectWith( elem, [ animation, gotoEnd ] );
21124 }
21125 return this;
21126 }
21127 } ),
21128 props = animation.props;
21129
21130 propFilter( props, animation.opts.specialEasing );
21131
21132 for ( ; index < length; index++ ) {
21133 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
21134 if ( result ) {
21135 if ( jQuery.isFunction( result.stop ) ) {
21136 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
21137 jQuery.proxy( result.stop, result );
21138 }
21139 return result;
21140 }
21141 }
21142
21143 jQuery.map( props, createTween, animation );
21144
21145 if ( jQuery.isFunction( animation.opts.start ) ) {
21146 animation.opts.start.call( elem, animation );
21147 }
21148
21149 // Attach callbacks from options
21150 animation
21151 .progress( animation.opts.progress )
21152 .done( animation.opts.done, animation.opts.complete )
21153 .fail( animation.opts.fail )
21154 .always( animation.opts.always );
21155
21156 jQuery.fx.timer(
21157 jQuery.extend( tick, {
21158 elem: elem,
21159 anim: animation,
21160 queue: animation.opts.queue
21161 } )
21162 );
21163
21164 return animation;
21165 }
21166
21167 jQuery.Animation = jQuery.extend( Animation, {
21168
21169 tweeners: {
21170 "*": [ function( prop, value ) {
21171 var tween = this.createTween( prop, value );
21172 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
21173 return tween;
21174 } ]
21175 },
21176
21177 tweener: function( props, callback ) {
21178 if ( jQuery.isFunction( props ) ) {
21179 callback = props;
21180 props = [ "*" ];
21181 } else {
21182 props = props.match( rnothtmlwhite );
21183 }
21184
21185 var prop,
21186 index = 0,
21187 length = props.length;
21188
21189 for ( ; index < length; index++ ) {
21190 prop = props[ index ];
21191 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
21192 Animation.tweeners[ prop ].unshift( callback );
21193 }
21194 },
21195
21196 prefilters: [ defaultPrefilter ],
21197
21198 prefilter: function( callback, prepend ) {
21199 if ( prepend ) {
21200 Animation.prefilters.unshift( callback );
21201 } else {
21202 Animation.prefilters.push( callback );
21203 }
21204 }
21205 } );
21206
21207 jQuery.speed = function( speed, easing, fn ) {
21208 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
21209 complete: fn || !fn && easing ||
21210 jQuery.isFunction( speed ) && speed,
21211 duration: speed,
21212 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
21213 };
21214
21215 // Go to the end state if fx are off
21216 if ( jQuery.fx.off ) {
21217 opt.duration = 0;
21218
21219 } else {
21220 if ( typeof opt.duration !== "number" ) {
21221 if ( opt.duration in jQuery.fx.speeds ) {
21222 opt.duration = jQuery.fx.speeds[ opt.duration ];
21223
21224 } else {
21225 opt.duration = jQuery.fx.speeds._default;
21226 }
21227 }
21228 }
21229
21230 // Normalize opt.queue - true/undefined/null -> "fx"
21231 if ( opt.queue == null || opt.queue === true ) {
21232 opt.queue = "fx";
21233 }
21234
21235 // Queueing
21236 opt.old = opt.complete;
21237
21238 opt.complete = function() {
21239 if ( jQuery.isFunction( opt.old ) ) {
21240 opt.old.call( this );
21241 }
21242
21243 if ( opt.queue ) {
21244 jQuery.dequeue( this, opt.queue );
21245 }
21246 };
21247
21248 return opt;
21249 };
21250
21251 jQuery.fn.extend( {
21252 fadeTo: function( speed, to, easing, callback ) {
21253
21254 // Show any hidden elements after setting opacity to 0
21255 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
21256
21257 // Animate to the value specified
21258 .end().animate( { opacity: to }, speed, easing, callback );
21259 },
21260 animate: function( prop, speed, easing, callback ) {
21261 var empty = jQuery.isEmptyObject( prop ),
21262 optall = jQuery.speed( speed, easing, callback ),
21263 doAnimation = function() {
21264
21265 // Operate on a copy of prop so per-property easing won't be lost
21266 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
21267
21268 // Empty animations, or finishing resolves immediately
21269 if ( empty || dataPriv.get( this, "finish" ) ) {
21270 anim.stop( true );
21271 }
21272 };
21273 doAnimation.finish = doAnimation;
21274
21275 return empty || optall.queue === false ?
21276 this.each( doAnimation ) :
21277 this.queue( optall.queue, doAnimation );
21278 },
21279 stop: function( type, clearQueue, gotoEnd ) {
21280 var stopQueue = function( hooks ) {
21281 var stop = hooks.stop;
21282 delete hooks.stop;
21283 stop( gotoEnd );
21284 };
21285
21286 if ( typeof type !== "string" ) {
21287 gotoEnd = clearQueue;
21288 clearQueue = type;
21289 type = undefined;
21290 }
21291 if ( clearQueue && type !== false ) {
21292 this.queue( type || "fx", [] );
21293 }
21294
21295 return this.each( function() {
21296 var dequeue = true,
21297 index = type != null && type + "queueHooks",
21298 timers = jQuery.timers,
21299 data = dataPriv.get( this );
21300
21301 if ( index ) {
21302 if ( data[ index ] && data[ index ].stop ) {
21303 stopQueue( data[ index ] );
21304 }
21305 } else {
21306 for ( index in data ) {
21307 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
21308 stopQueue( data[ index ] );
21309 }
21310 }
21311 }
21312
21313 for ( index = timers.length; index--; ) {
21314 if ( timers[ index ].elem === this &&
21315 ( type == null || timers[ index ].queue === type ) ) {
21316
21317 timers[ index ].anim.stop( gotoEnd );
21318 dequeue = false;
21319 timers.splice( index, 1 );
21320 }
21321 }
21322
21323 // Start the next in the queue if the last step wasn't forced.
21324 // Timers currently will call their complete callbacks, which
21325 // will dequeue but only if they were gotoEnd.
21326 if ( dequeue || !gotoEnd ) {
21327 jQuery.dequeue( this, type );
21328 }
21329 } );
21330 },
21331 finish: function( type ) {
21332 if ( type !== false ) {
21333 type = type || "fx";
21334 }
21335 return this.each( function() {
21336 var index,
21337 data = dataPriv.get( this ),
21338 queue = data[ type + "queue" ],
21339 hooks = data[ type + "queueHooks" ],
21340 timers = jQuery.timers,
21341 length = queue ? queue.length : 0;
21342
21343 // Enable finishing flag on private data
21344 data.finish = true;
21345
21346 // Empty the queue first
21347 jQuery.queue( this, type, [] );
21348
21349 if ( hooks && hooks.stop ) {
21350 hooks.stop.call( this, true );
21351 }
21352
21353 // Look for any active animations, and finish them
21354 for ( index = timers.length; index--; ) {
21355 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
21356 timers[ index ].anim.stop( true );
21357 timers.splice( index, 1 );
21358 }
21359 }
21360
21361 // Look for any animations in the old queue and finish them
21362 for ( index = 0; index < length; index++ ) {
21363 if ( queue[ index ] && queue[ index ].finish ) {
21364 queue[ index ].finish.call( this );
21365 }
21366 }
21367
21368 // Turn off finishing flag
21369 delete data.finish;
21370 } );
21371 }
21372 } );
21373
21374 jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
21375 var cssFn = jQuery.fn[ name ];
21376 jQuery.fn[ name ] = function( speed, easing, callback ) {
21377 return speed == null || typeof speed === "boolean" ?
21378 cssFn.apply( this, arguments ) :
21379 this.animate( genFx( name, true ), speed, easing, callback );
21380 };
21381 } );
21382
21383 // Generate shortcuts for custom animations
21384 jQuery.each( {
21385 slideDown: genFx( "show" ),
21386 slideUp: genFx( "hide" ),
21387 slideToggle: genFx( "toggle" ),
21388 fadeIn: { opacity: "show" },
21389 fadeOut: { opacity: "hide" },
21390 fadeToggle: { opacity: "toggle" }
21391 }, function( name, props ) {
21392 jQuery.fn[ name ] = function( speed, easing, callback ) {
21393 return this.animate( props, speed, easing, callback );
21394 };
21395 } );
21396
21397 jQuery.timers = [];
21398 jQuery.fx.tick = function() {
21399 var timer,
21400 i = 0,
21401 timers = jQuery.timers;
21402
21403 fxNow = jQuery.now();
21404
21405 for ( ; i < timers.length; i++ ) {
21406 timer = timers[ i ];
21407
21408 // Run the timer and safely remove it when done (allowing for external removal)
21409 if ( !timer() && timers[ i ] === timer ) {
21410 timers.splice( i--, 1 );
21411 }
21412 }
21413
21414 if ( !timers.length ) {
21415 jQuery.fx.stop();
21416 }
21417 fxNow = undefined;
21418 };
21419
21420 jQuery.fx.timer = function( timer ) {
21421 jQuery.timers.push( timer );
21422 jQuery.fx.start();
21423 };
21424
21425 jQuery.fx.interval = 13;
21426 jQuery.fx.start = function() {
21427 if ( inProgress ) {
21428 return;
21429 }
21430
21431 inProgress = true;
21432 schedule();
21433 };
21434
21435 jQuery.fx.stop = function() {
21436 inProgress = null;
21437 };
21438
21439 jQuery.fx.speeds = {
21440 slow: 600,
21441 fast: 200,
21442
21443 // Default speed
21444 _default: 400
21445 };
21446
21447
21448 // Based off of the plugin by Clint Helfers, with permission.
21449 // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
21450 jQuery.fn.delay = function( time, type ) {
21451 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
21452 type = type || "fx";
21453
21454 return this.queue( type, function( next, hooks ) {
21455 var timeout = window.setTimeout( next, time );
21456 hooks.stop = function() {
21457 window.clearTimeout( timeout );
21458 };
21459 } );
21460 };
21461
21462
21463 ( function() {
21464 var input = document.createElement( "input" ),
21465 select = document.createElement( "select" ),
21466 opt = select.appendChild( document.createElement( "option" ) );
21467
21468 input.type = "checkbox";
21469
21470 // Support: Android <=4.3 only
21471 // Default value for a checkbox should be "on"
21472 support.checkOn = input.value !== "";
21473
21474 // Support: IE <=11 only
21475 // Must access selectedIndex to make default options select
21476 support.optSelected = opt.selected;
21477
21478 // Support: IE <=11 only
21479 // An input loses its value after becoming a radio
21480 input = document.createElement( "input" );
21481 input.value = "t";
21482 input.type = "radio";
21483 support.radioValue = input.value === "t";
21484 } )();
21485
21486
21487 var boolHook,
21488 attrHandle = jQuery.expr.attrHandle;
21489
21490 jQuery.fn.extend( {
21491 attr: function( name, value ) {
21492 return access( this, jQuery.attr, name, value, arguments.length > 1 );
21493 },
21494
21495 removeAttr: function( name ) {
21496 return this.each( function() {
21497 jQuery.removeAttr( this, name );
21498 } );
21499 }
21500 } );
21501
21502 jQuery.extend( {
21503 attr: function( elem, name, value ) {
21504 var ret, hooks,
21505 nType = elem.nodeType;
21506
21507 // Don't get/set attributes on text, comment and attribute nodes
21508 if ( nType === 3 || nType === 8 || nType === 2 ) {
21509 return;
21510 }
21511
21512 // Fallback to prop when attributes are not supported
21513 if ( typeof elem.getAttribute === "undefined" ) {
21514 return jQuery.prop( elem, name, value );
21515 }
21516
21517 // Attribute hooks are determined by the lowercase version
21518 // Grab necessary hook if one is defined
21519 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21520 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
21521 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
21522 }
21523
21524 if ( value !== undefined ) {
21525 if ( value === null ) {
21526 jQuery.removeAttr( elem, name );
21527 return;
21528 }
21529
21530 if ( hooks && "set" in hooks &&
21531 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21532 return ret;
21533 }
21534
21535 elem.setAttribute( name, value + "" );
21536 return value;
21537 }
21538
21539 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21540 return ret;
21541 }
21542
21543 ret = jQuery.find.attr( elem, name );
21544
21545 // Non-existent attributes return null, we normalize to undefined
21546 return ret == null ? undefined : ret;
21547 },
21548
21549 attrHooks: {
21550 type: {
21551 set: function( elem, value ) {
21552 if ( !support.radioValue && value === "radio" &&
21553 nodeName( elem, "input" ) ) {
21554 var val = elem.value;
21555 elem.setAttribute( "type", value );
21556 if ( val ) {
21557 elem.value = val;
21558 }
21559 return value;
21560 }
21561 }
21562 }
21563 },
21564
21565 removeAttr: function( elem, value ) {
21566 var name,
21567 i = 0,
21568
21569 // Attribute names can contain non-HTML whitespace characters
21570 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
21571 attrNames = value && value.match( rnothtmlwhite );
21572
21573 if ( attrNames && elem.nodeType === 1 ) {
21574 while ( ( name = attrNames[ i++ ] ) ) {
21575 elem.removeAttribute( name );
21576 }
21577 }
21578 }
21579 } );
21580
21581 // Hooks for boolean attributes
21582 boolHook = {
21583 set: function( elem, value, name ) {
21584 if ( value === false ) {
21585
21586 // Remove boolean attributes when set to false
21587 jQuery.removeAttr( elem, name );
21588 } else {
21589 elem.setAttribute( name, name );
21590 }
21591 return name;
21592 }
21593 };
21594
21595 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
21596 var getter = attrHandle[ name ] || jQuery.find.attr;
21597
21598 attrHandle[ name ] = function( elem, name, isXML ) {
21599 var ret, handle,
21600 lowercaseName = name.toLowerCase();
21601
21602 if ( !isXML ) {
21603
21604 // Avoid an infinite loop by temporarily removing this function from the getter
21605 handle = attrHandle[ lowercaseName ];
21606 attrHandle[ lowercaseName ] = ret;
21607 ret = getter( elem, name, isXML ) != null ?
21608 lowercaseName :
21609 null;
21610 attrHandle[ lowercaseName ] = handle;
21611 }
21612 return ret;
21613 };
21614 } );
21615
21616
21617
21618
21619 var rfocusable = /^(?:input|select|textarea|button)$/i,
21620 rclickable = /^(?:a|area)$/i;
21621
21622 jQuery.fn.extend( {
21623 prop: function( name, value ) {
21624 return access( this, jQuery.prop, name, value, arguments.length > 1 );
21625 },
21626
21627 removeProp: function( name ) {
21628 return this.each( function() {
21629 delete this[ jQuery.propFix[ name ] || name ];
21630 } );
21631 }
21632 } );
21633
21634 jQuery.extend( {
21635 prop: function( elem, name, value ) {
21636 var ret, hooks,
21637 nType = elem.nodeType;
21638
21639 // Don't get/set properties on text, comment and attribute nodes
21640 if ( nType === 3 || nType === 8 || nType === 2 ) {
21641 return;
21642 }
21643
21644 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21645
21646 // Fix name and attach hooks
21647 name = jQuery.propFix[ name ] || name;
21648 hooks = jQuery.propHooks[ name ];
21649 }
21650
21651 if ( value !== undefined ) {
21652 if ( hooks && "set" in hooks &&
21653 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21654 return ret;
21655 }
21656
21657 return ( elem[ name ] = value );
21658 }
21659
21660 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21661 return ret;
21662 }
21663
21664 return elem[ name ];
21665 },
21666
21667 propHooks: {
21668 tabIndex: {
21669 get: function( elem ) {
21670
21671 // Support: IE <=9 - 11 only
21672 // elem.tabIndex doesn't always return the
21673 // correct value when it hasn't been explicitly set
21674 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
21675 // Use proper attribute retrieval(#12072)
21676 var tabindex = jQuery.find.attr( elem, "tabindex" );
21677
21678 if ( tabindex ) {
21679 return parseInt( tabindex, 10 );
21680 }
21681
21682 if (
21683 rfocusable.test( elem.nodeName ) ||
21684 rclickable.test( elem.nodeName ) &&
21685 elem.href
21686 ) {
21687 return 0;
21688 }
21689
21690 return -1;
21691 }
21692 }
21693 },
21694
21695 propFix: {
21696 "for": "htmlFor",
21697 "class": "className"
21698 }
21699 } );
21700
21701 // Support: IE <=11 only
21702 // Accessing the selectedIndex property
21703 // forces the browser to respect setting selected
21704 // on the option
21705 // The getter ensures a default option is selected
21706 // when in an optgroup
21707 // eslint rule "no-unused-expressions" is disabled for this code
21708 // since it considers such accessions noop
21709 if ( !support.optSelected ) {
21710 jQuery.propHooks.selected = {
21711 get: function( elem ) {
21712
21713 /* eslint no-unused-expressions: "off" */
21714
21715 var parent = elem.parentNode;
21716 if ( parent && parent.parentNode ) {
21717 parent.parentNode.selectedIndex;
21718 }
21719 return null;
21720 },
21721 set: function( elem ) {
21722
21723 /* eslint no-unused-expressions: "off" */
21724
21725 var parent = elem.parentNode;
21726 if ( parent ) {
21727 parent.selectedIndex;
21728
21729 if ( parent.parentNode ) {
21730 parent.parentNode.selectedIndex;
21731 }
21732 }
21733 }
21734 };
21735 }
21736
21737 jQuery.each( [
21738 "tabIndex",
21739 "readOnly",
21740 "maxLength",
21741 "cellSpacing",
21742 "cellPadding",
21743 "rowSpan",
21744 "colSpan",
21745 "useMap",
21746 "frameBorder",
21747 "contentEditable"
21748 ], function() {
21749 jQuery.propFix[ this.toLowerCase() ] = this;
21750 } );
21751
21752
21753
21754
21755 // Strip and collapse whitespace according to HTML spec
21756 // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
21757 function stripAndCollapse( value ) {
21758 var tokens = value.match( rnothtmlwhite ) || [];
21759 return tokens.join( " " );
21760 }
21761
21762
21763 function getClass( elem ) {
21764 return elem.getAttribute && elem.getAttribute( "class" ) || "";
21765 }
21766
21767 jQuery.fn.extend( {
21768 addClass: function( value ) {
21769 var classes, elem, cur, curValue, clazz, j, finalValue,
21770 i = 0;
21771
21772 if ( jQuery.isFunction( value ) ) {
21773 return this.each( function( j ) {
21774 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
21775 } );
21776 }
21777
21778 if ( typeof value === "string" && value ) {
21779 classes = value.match( rnothtmlwhite ) || [];
21780
21781 while ( ( elem = this[ i++ ] ) ) {
21782 curValue = getClass( elem );
21783 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21784
21785 if ( cur ) {
21786 j = 0;
21787 while ( ( clazz = classes[ j++ ] ) ) {
21788 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
21789 cur += clazz + " ";
21790 }
21791 }
21792
21793 // Only assign if different to avoid unneeded rendering.
21794 finalValue = stripAndCollapse( cur );
21795 if ( curValue !== finalValue ) {
21796 elem.setAttribute( "class", finalValue );
21797 }
21798 }
21799 }
21800 }
21801
21802 return this;
21803 },
21804
21805 removeClass: function( value ) {
21806 var classes, elem, cur, curValue, clazz, j, finalValue,
21807 i = 0;
21808
21809 if ( jQuery.isFunction( value ) ) {
21810 return this.each( function( j ) {
21811 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
21812 } );
21813 }
21814
21815 if ( !arguments.length ) {
21816 return this.attr( "class", "" );
21817 }
21818
21819 if ( typeof value === "string" && value ) {
21820 classes = value.match( rnothtmlwhite ) || [];
21821
21822 while ( ( elem = this[ i++ ] ) ) {
21823 curValue = getClass( elem );
21824
21825 // This expression is here for better compressibility (see addClass)
21826 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21827
21828 if ( cur ) {
21829 j = 0;
21830 while ( ( clazz = classes[ j++ ] ) ) {
21831
21832 // Remove *all* instances
21833 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
21834 cur = cur.replace( " " + clazz + " ", " " );
21835 }
21836 }
21837
21838 // Only assign if different to avoid unneeded rendering.
21839 finalValue = stripAndCollapse( cur );
21840 if ( curValue !== finalValue ) {
21841 elem.setAttribute( "class", finalValue );
21842 }
21843 }
21844 }
21845 }
21846
21847 return this;
21848 },
21849
21850 toggleClass: function( value, stateVal ) {
21851 var type = typeof value;
21852
21853 if ( typeof stateVal === "boolean" && type === "string" ) {
21854 return stateVal ? this.addClass( value ) : this.removeClass( value );
21855 }
21856
21857 if ( jQuery.isFunction( value ) ) {
21858 return this.each( function( i ) {
21859 jQuery( this ).toggleClass(
21860 value.call( this, i, getClass( this ), stateVal ),
21861 stateVal
21862 );
21863 } );
21864 }
21865
21866 return this.each( function() {
21867 var className, i, self, classNames;
21868
21869 if ( type === "string" ) {
21870
21871 // Toggle individual class names
21872 i = 0;
21873 self = jQuery( this );
21874 classNames = value.match( rnothtmlwhite ) || [];
21875
21876 while ( ( className = classNames[ i++ ] ) ) {
21877
21878 // Check each className given, space separated list
21879 if ( self.hasClass( className ) ) {
21880 self.removeClass( className );
21881 } else {
21882 self.addClass( className );
21883 }
21884 }
21885
21886 // Toggle whole class name
21887 } else if ( value === undefined || type === "boolean" ) {
21888 className = getClass( this );
21889 if ( className ) {
21890
21891 // Store className if set
21892 dataPriv.set( this, "__className__", className );
21893 }
21894
21895 // If the element has a class name or if we're passed `false`,
21896 // then remove the whole classname (if there was one, the above saved it).
21897 // Otherwise bring back whatever was previously saved (if anything),
21898 // falling back to the empty string if nothing was stored.
21899 if ( this.setAttribute ) {
21900 this.setAttribute( "class",
21901 className || value === false ?
21902 "" :
21903 dataPriv.get( this, "__className__" ) || ""
21904 );
21905 }
21906 }
21907 } );
21908 },
21909
21910 hasClass: function( selector ) {
21911 var className, elem,
21912 i = 0;
21913
21914 className = " " + selector + " ";
21915 while ( ( elem = this[ i++ ] ) ) {
21916 if ( elem.nodeType === 1 &&
21917 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
21918 return true;
21919 }
21920 }
21921
21922 return false;
21923 }
21924 } );
21925
21926
21927
21928
21929 var rreturn = /\r/g;
21930
21931 jQuery.fn.extend( {
21932 val: function( value ) {
21933 var hooks, ret, isFunction,
21934 elem = this[ 0 ];
21935
21936 if ( !arguments.length ) {
21937 if ( elem ) {
21938 hooks = jQuery.valHooks[ elem.type ] ||
21939 jQuery.valHooks[ elem.nodeName.toLowerCase() ];
21940
21941 if ( hooks &&
21942 "get" in hooks &&
21943 ( ret = hooks.get( elem, "value" ) ) !== undefined
21944 ) {
21945 return ret;
21946 }
21947
21948 ret = elem.value;
21949
21950 // Handle most common string cases
21951 if ( typeof ret === "string" ) {
21952 return ret.replace( rreturn, "" );
21953 }
21954
21955 // Handle cases where value is null/undef or number
21956 return ret == null ? "" : ret;
21957 }
21958
21959 return;
21960 }
21961
21962 isFunction = jQuery.isFunction( value );
21963
21964 return this.each( function( i ) {
21965 var val;
21966
21967 if ( this.nodeType !== 1 ) {
21968 return;
21969 }
21970
21971 if ( isFunction ) {
21972 val = value.call( this, i, jQuery( this ).val() );
21973 } else {
21974 val = value;
21975 }
21976
21977 // Treat null/undefined as ""; convert numbers to string
21978 if ( val == null ) {
21979 val = "";
21980
21981 } else if ( typeof val === "number" ) {
21982 val += "";
21983
21984 } else if ( Array.isArray( val ) ) {
21985 val = jQuery.map( val, function( value ) {
21986 return value == null ? "" : value + "";
21987 } );
21988 }
21989
21990 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
21991
21992 // If set returns undefined, fall back to normal setting
21993 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
21994 this.value = val;
21995 }
21996 } );
21997 }
21998 } );
21999
22000 jQuery.extend( {
22001 valHooks: {
22002 option: {
22003 get: function( elem ) {
22004
22005 var val = jQuery.find.attr( elem, "value" );
22006 return val != null ?
22007 val :
22008
22009 // Support: IE <=10 - 11 only
22010 // option.text throws exceptions (#14686, #14858)
22011 // Strip and collapse whitespace
22012 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
22013 stripAndCollapse( jQuery.text( elem ) );
22014 }
22015 },
22016 select: {
22017 get: function( elem ) {
22018 var value, option, i,
22019 options = elem.options,
22020 index = elem.selectedIndex,
22021 one = elem.type === "select-one",
22022 values = one ? null : [],
22023 max = one ? index + 1 : options.length;
22024
22025 if ( index < 0 ) {
22026 i = max;
22027
22028 } else {
22029 i = one ? index : 0;
22030 }
22031
22032 // Loop through all the selected options
22033 for ( ; i < max; i++ ) {
22034 option = options[ i ];
22035
22036 // Support: IE <=9 only
22037 // IE8-9 doesn't update selected after form reset (#2551)
22038 if ( ( option.selected || i === index ) &&
22039
22040 // Don't return options that are disabled or in a disabled optgroup
22041 !option.disabled &&
22042 ( !option.parentNode.disabled ||
22043 !nodeName( option.parentNode, "optgroup" ) ) ) {
22044
22045 // Get the specific value for the option
22046 value = jQuery( option ).val();
22047
22048 // We don't need an array for one selects
22049 if ( one ) {
22050 return value;
22051 }
22052
22053 // Multi-Selects return an array
22054 values.push( value );
22055 }
22056 }
22057
22058 return values;
22059 },
22060
22061 set: function( elem, value ) {
22062 var optionSet, option,
22063 options = elem.options,
22064 values = jQuery.makeArray( value ),
22065 i = options.length;
22066
22067 while ( i-- ) {
22068 option = options[ i ];
22069
22070 /* eslint-disable no-cond-assign */
22071
22072 if ( option.selected =
22073 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
22074 ) {
22075 optionSet = true;
22076 }
22077
22078 /* eslint-enable no-cond-assign */
22079 }
22080
22081 // Force browsers to behave consistently when non-matching value is set
22082 if ( !optionSet ) {
22083 elem.selectedIndex = -1;
22084 }
22085 return values;
22086 }
22087 }
22088 }
22089 } );
22090
22091 // Radios and checkboxes getter/setter
22092 jQuery.each( [ "radio", "checkbox" ], function() {
22093 jQuery.valHooks[ this ] = {
22094 set: function( elem, value ) {
22095 if ( Array.isArray( value ) ) {
22096 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
22097 }
22098 }
22099 };
22100 if ( !support.checkOn ) {
22101 jQuery.valHooks[ this ].get = function( elem ) {
22102 return elem.getAttribute( "value" ) === null ? "on" : elem.value;
22103 };
22104 }
22105 } );
22106
22107
22108
22109
22110 // Return jQuery for attributes-only inclusion
22111
22112
22113 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
22114
22115 jQuery.extend( jQuery.event, {
22116
22117 trigger: function( event, data, elem, onlyHandlers ) {
22118
22119 var i, cur, tmp, bubbleType, ontype, handle, special,
22120 eventPath = [ elem || document ],
22121 type = hasOwn.call( event, "type" ) ? event.type : event,
22122 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
22123
22124 cur = tmp = elem = elem || document;
22125
22126 // Don't do events on text and comment nodes
22127 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
22128 return;
22129 }
22130
22131 // focus/blur morphs to focusin/out; ensure we're not firing them right now
22132 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
22133 return;
22134 }
22135
22136 if ( type.indexOf( "." ) > -1 ) {
22137
22138 // Namespaced trigger; create a regexp to match event type in handle()
22139 namespaces = type.split( "." );
22140 type = namespaces.shift();
22141 namespaces.sort();
22142 }
22143 ontype = type.indexOf( ":" ) < 0 && "on" + type;
22144
22145 // Caller can pass in a jQuery.Event object, Object, or just an event type string
22146 event = event[ jQuery.expando ] ?
22147 event :
22148 new jQuery.Event( type, typeof event === "object" && event );
22149
22150 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
22151 event.isTrigger = onlyHandlers ? 2 : 3;
22152 event.namespace = namespaces.join( "." );
22153 event.rnamespace = event.namespace ?
22154 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
22155 null;
22156
22157 // Clean up the event in case it is being reused
22158 event.result = undefined;
22159 if ( !event.target ) {
22160 event.target = elem;
22161 }
22162
22163 // Clone any incoming data and prepend the event, creating the handler arg list
22164 data = data == null ?
22165 [ event ] :
22166 jQuery.makeArray( data, [ event ] );
22167
22168 // Allow special events to draw outside the lines
22169 special = jQuery.event.special[ type ] || {};
22170 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
22171 return;
22172 }
22173
22174 // Determine event propagation path in advance, per W3C events spec (#9951)
22175 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
22176 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
22177
22178 bubbleType = special.delegateType || type;
22179 if ( !rfocusMorph.test( bubbleType + type ) ) {
22180 cur = cur.parentNode;
22181 }
22182 for ( ; cur; cur = cur.parentNode ) {
22183 eventPath.push( cur );
22184 tmp = cur;
22185 }
22186
22187 // Only add window if we got to document (e.g., not plain obj or detached DOM)
22188 if ( tmp === ( elem.ownerDocument || document ) ) {
22189 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
22190 }
22191 }
22192
22193 // Fire handlers on the event path
22194 i = 0;
22195 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
22196
22197 event.type = i > 1 ?
22198 bubbleType :
22199 special.bindType || type;
22200
22201 // jQuery handler
22202 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
22203 dataPriv.get( cur, "handle" );
22204 if ( handle ) {
22205 handle.apply( cur, data );
22206 }
22207
22208 // Native handler
22209 handle = ontype && cur[ ontype ];
22210 if ( handle && handle.apply && acceptData( cur ) ) {
22211 event.result = handle.apply( cur, data );
22212 if ( event.result === false ) {
22213 event.preventDefault();
22214 }
22215 }
22216 }
22217 event.type = type;
22218
22219 // If nobody prevented the default action, do it now
22220 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
22221
22222 if ( ( !special._default ||
22223 special._default.apply( eventPath.pop(), data ) === false ) &&
22224 acceptData( elem ) ) {
22225
22226 // Call a native DOM method on the target with the same name as the event.
22227 // Don't do default actions on window, that's where global variables be (#6170)
22228 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
22229
22230 // Don't re-trigger an onFOO event when we call its FOO() method
22231 tmp = elem[ ontype ];
22232
22233 if ( tmp ) {
22234 elem[ ontype ] = null;
22235 }
22236
22237 // Prevent re-triggering of the same event, since we already bubbled it above
22238 jQuery.event.triggered = type;
22239 elem[ type ]();
22240 jQuery.event.triggered = undefined;
22241
22242 if ( tmp ) {
22243 elem[ ontype ] = tmp;
22244 }
22245 }
22246 }
22247 }
22248
22249 return event.result;
22250 },
22251
22252 // Piggyback on a donor event to simulate a different one
22253 // Used only for `focus(in | out)` events
22254 simulate: function( type, elem, event ) {
22255 var e = jQuery.extend(
22256 new jQuery.Event(),
22257 event,
22258 {
22259 type: type,
22260 isSimulated: true
22261 }
22262 );
22263
22264 jQuery.event.trigger( e, null, elem );
22265 }
22266
22267 } );
22268
22269 jQuery.fn.extend( {
22270
22271 trigger: function( type, data ) {
22272 return this.each( function() {
22273 jQuery.event.trigger( type, data, this );
22274 } );
22275 },
22276 triggerHandler: function( type, data ) {
22277 var elem = this[ 0 ];
22278 if ( elem ) {
22279 return jQuery.event.trigger( type, data, elem, true );
22280 }
22281 }
22282 } );
22283
22284
22285 jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
22286 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
22287 "change select submit keydown keypress keyup contextmenu" ).split( " " ),
22288 function( i, name ) {
22289
22290 // Handle event binding
22291 jQuery.fn[ name ] = function( data, fn ) {
22292 return arguments.length > 0 ?
22293 this.on( name, null, data, fn ) :
22294 this.trigger( name );
22295 };
22296 } );
22297
22298 jQuery.fn.extend( {
22299 hover: function( fnOver, fnOut ) {
22300 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
22301 }
22302 } );
22303
22304
22305
22306
22307 support.focusin = "onfocusin" in window;
22308
22309
22310 // Support: Firefox <=44
22311 // Firefox doesn't have focus(in | out) events
22312 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
22313 //
22314 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
22315 // focus(in | out) events fire after focus & blur events,
22316 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
22317 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
22318 if ( !support.focusin ) {
22319 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
22320
22321 // Attach a single capturing handler on the document while someone wants focusin/focusout
22322 var handler = function( event ) {
22323 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
22324 };
22325
22326 jQuery.event.special[ fix ] = {
22327 setup: function() {
22328 var doc = this.ownerDocument || this,
22329 attaches = dataPriv.access( doc, fix );
22330
22331 if ( !attaches ) {
22332 doc.addEventListener( orig, handler, true );
22333 }
22334 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
22335 },
22336 teardown: function() {
22337 var doc = this.ownerDocument || this,
22338 attaches = dataPriv.access( doc, fix ) - 1;
22339
22340 if ( !attaches ) {
22341 doc.removeEventListener( orig, handler, true );
22342 dataPriv.remove( doc, fix );
22343
22344 } else {
22345 dataPriv.access( doc, fix, attaches );
22346 }
22347 }
22348 };
22349 } );
22350 }
22351 var location = window.location;
22352
22353 var nonce = jQuery.now();
22354
22355 var rquery = ( /\?/ );
22356
22357
22358
22359 // Cross-browser xml parsing
22360 jQuery.parseXML = function( data ) {
22361 var xml;
22362 if ( !data || typeof data !== "string" ) {
22363 return null;
22364 }
22365
22366 // Support: IE 9 - 11 only
22367 // IE throws on parseFromString with invalid input.
22368 try {
22369 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
22370 } catch ( e ) {
22371 xml = undefined;
22372 }
22373
22374 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
22375 jQuery.error( "Invalid XML: " + data );
22376 }
22377 return xml;
22378 };
22379
22380
22381 var
22382 rbracket = /\[\]$/,
22383 rCRLF = /\r?\n/g,
22384 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
22385 rsubmittable = /^(?:input|select|textarea|keygen)/i;
22386
22387 function buildParams( prefix, obj, traditional, add ) {
22388 var name;
22389
22390 if ( Array.isArray( obj ) ) {
22391
22392 // Serialize array item.
22393 jQuery.each( obj, function( i, v ) {
22394 if ( traditional || rbracket.test( prefix ) ) {
22395
22396 // Treat each array item as a scalar.
22397 add( prefix, v );
22398
22399 } else {
22400
22401 // Item is non-scalar (array or object), encode its numeric index.
22402 buildParams(
22403 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
22404 v,
22405 traditional,
22406 add
22407 );
22408 }
22409 } );
22410
22411 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
22412
22413 // Serialize object item.
22414 for ( name in obj ) {
22415 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
22416 }
22417
22418 } else {
22419
22420 // Serialize scalar item.
22421 add( prefix, obj );
22422 }
22423 }
22424
22425 // Serialize an array of form elements or a set of
22426 // key/values into a query string
22427 jQuery.param = function( a, traditional ) {
22428 var prefix,
22429 s = [],
22430 add = function( key, valueOrFunction ) {
22431
22432 // If value is a function, invoke it and use its return value
22433 var value = jQuery.isFunction( valueOrFunction ) ?
22434 valueOrFunction() :
22435 valueOrFunction;
22436
22437 s[ s.length ] = encodeURIComponent( key ) + "=" +
22438 encodeURIComponent( value == null ? "" : value );
22439 };
22440
22441 // If an array was passed in, assume that it is an array of form elements.
22442 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
22443
22444 // Serialize the form elements
22445 jQuery.each( a, function() {
22446 add( this.name, this.value );
22447 } );
22448
22449 } else {
22450
22451 // If traditional, encode the "old" way (the way 1.3.2 or older
22452 // did it), otherwise encode params recursively.
22453 for ( prefix in a ) {
22454 buildParams( prefix, a[ prefix ], traditional, add );
22455 }
22456 }
22457
22458 // Return the resulting serialization
22459 return s.join( "&" );
22460 };
22461
22462 jQuery.fn.extend( {
22463 serialize: function() {
22464 return jQuery.param( this.serializeArray() );
22465 },
22466 serializeArray: function() {
22467 return this.map( function() {
22468
22469 // Can add propHook for "elements" to filter or add form elements
22470 var elements = jQuery.prop( this, "elements" );
22471 return elements ? jQuery.makeArray( elements ) : this;
22472 } )
22473 .filter( function() {
22474 var type = this.type;
22475
22476 // Use .is( ":disabled" ) so that fieldset[disabled] works
22477 return this.name && !jQuery( this ).is( ":disabled" ) &&
22478 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
22479 ( this.checked || !rcheckableType.test( type ) );
22480 } )
22481 .map( function( i, elem ) {
22482 var val = jQuery( this ).val();
22483
22484 if ( val == null ) {
22485 return null;
22486 }
22487
22488 if ( Array.isArray( val ) ) {
22489 return jQuery.map( val, function( val ) {
22490 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22491 } );
22492 }
22493
22494 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22495 } ).get();
22496 }
22497 } );
22498
22499
22500 var
22501 r20 = /%20/g,
22502 rhash = /#.*$/,
22503 rantiCache = /([?&])_=[^&]*/,
22504 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
22505
22506 // #7653, #8125, #8152: local protocol detection
22507 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
22508 rnoContent = /^(?:GET|HEAD)$/,
22509 rprotocol = /^\/\//,
22510
22511 /* Prefilters
22512 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
22513 * 2) These are called:
22514 * - BEFORE asking for a transport
22515 * - AFTER param serialization (s.data is a string if s.processData is true)
22516 * 3) key is the dataType
22517 * 4) the catchall symbol "*" can be used
22518 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
22519 */
22520 prefilters = {},
22521
22522 /* Transports bindings
22523 * 1) key is the dataType
22524 * 2) the catchall symbol "*" can be used
22525 * 3) selection will start with transport dataType and THEN go to "*" if needed
22526 */
22527 transports = {},
22528
22529 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
22530 allTypes = "*/".concat( "*" ),
22531
22532 // Anchor tag for parsing the document origin
22533 originAnchor = document.createElement( "a" );
22534 originAnchor.href = location.href;
22535
22536 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
22537 function addToPrefiltersOrTransports( structure ) {
22538
22539 // dataTypeExpression is optional and defaults to "*"
22540 return function( dataTypeExpression, func ) {
22541
22542 if ( typeof dataTypeExpression !== "string" ) {
22543 func = dataTypeExpression;
22544 dataTypeExpression = "*";
22545 }
22546
22547 var dataType,
22548 i = 0,
22549 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
22550
22551 if ( jQuery.isFunction( func ) ) {
22552
22553 // For each dataType in the dataTypeExpression
22554 while ( ( dataType = dataTypes[ i++ ] ) ) {
22555
22556 // Prepend if requested
22557 if ( dataType[ 0 ] === "+" ) {
22558 dataType = dataType.slice( 1 ) || "*";
22559 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
22560
22561 // Otherwise append
22562 } else {
22563 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
22564 }
22565 }
22566 }
22567 };
22568 }
22569
22570 // Base inspection function for prefilters and transports
22571 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
22572
22573 var inspected = {},
22574 seekingTransport = ( structure === transports );
22575
22576 function inspect( dataType ) {
22577 var selected;
22578 inspected[ dataType ] = true;
22579 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
22580 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
22581 if ( typeof dataTypeOrTransport === "string" &&
22582 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
22583
22584 options.dataTypes.unshift( dataTypeOrTransport );
22585 inspect( dataTypeOrTransport );
22586 return false;
22587 } else if ( seekingTransport ) {
22588 return !( selected = dataTypeOrTransport );
22589 }
22590 } );
22591 return selected;
22592 }
22593
22594 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
22595 }
22596
22597 // A special extend for ajax options
22598 // that takes "flat" options (not to be deep extended)
22599 // Fixes #9887
22600 function ajaxExtend( target, src ) {
22601 var key, deep,
22602 flatOptions = jQuery.ajaxSettings.flatOptions || {};
22603
22604 for ( key in src ) {
22605 if ( src[ key ] !== undefined ) {
22606 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
22607 }
22608 }
22609 if ( deep ) {
22610 jQuery.extend( true, target, deep );
22611 }
22612
22613 return target;
22614 }
22615
22616 /* Handles responses to an ajax request:
22617 * - finds the right dataType (mediates between content-type and expected dataType)
22618 * - returns the corresponding response
22619 */
22620 function ajaxHandleResponses( s, jqXHR, responses ) {
22621
22622 var ct, type, finalDataType, firstDataType,
22623 contents = s.contents,
22624 dataTypes = s.dataTypes;
22625
22626 // Remove auto dataType and get content-type in the process
22627 while ( dataTypes[ 0 ] === "*" ) {
22628 dataTypes.shift();
22629 if ( ct === undefined ) {
22630 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
22631 }
22632 }
22633
22634 // Check if we're dealing with a known content-type
22635 if ( ct ) {
22636 for ( type in contents ) {
22637 if ( contents[ type ] && contents[ type ].test( ct ) ) {
22638 dataTypes.unshift( type );
22639 break;
22640 }
22641 }
22642 }
22643
22644 // Check to see if we have a response for the expected dataType
22645 if ( dataTypes[ 0 ] in responses ) {
22646 finalDataType = dataTypes[ 0 ];
22647 } else {
22648
22649 // Try convertible dataTypes
22650 for ( type in responses ) {
22651 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
22652 finalDataType = type;
22653 break;
22654 }
22655 if ( !firstDataType ) {
22656 firstDataType = type;
22657 }
22658 }
22659
22660 // Or just use first one
22661 finalDataType = finalDataType || firstDataType;
22662 }
22663
22664 // If we found a dataType
22665 // We add the dataType to the list if needed
22666 // and return the corresponding response
22667 if ( finalDataType ) {
22668 if ( finalDataType !== dataTypes[ 0 ] ) {
22669 dataTypes.unshift( finalDataType );
22670 }
22671 return responses[ finalDataType ];
22672 }
22673 }
22674
22675 /* Chain conversions given the request and the original response
22676 * Also sets the responseXXX fields on the jqXHR instance
22677 */
22678 function ajaxConvert( s, response, jqXHR, isSuccess ) {
22679 var conv2, current, conv, tmp, prev,
22680 converters = {},
22681
22682 // Work with a copy of dataTypes in case we need to modify it for conversion
22683 dataTypes = s.dataTypes.slice();
22684
22685 // Create converters map with lowercased keys
22686 if ( dataTypes[ 1 ] ) {
22687 for ( conv in s.converters ) {
22688 converters[ conv.toLowerCase() ] = s.converters[ conv ];
22689 }
22690 }
22691
22692 current = dataTypes.shift();
22693
22694 // Convert to each sequential dataType
22695 while ( current ) {
22696
22697 if ( s.responseFields[ current ] ) {
22698 jqXHR[ s.responseFields[ current ] ] = response;
22699 }
22700
22701 // Apply the dataFilter if provided
22702 if ( !prev && isSuccess && s.dataFilter ) {
22703 response = s.dataFilter( response, s.dataType );
22704 }
22705
22706 prev = current;
22707 current = dataTypes.shift();
22708
22709 if ( current ) {
22710
22711 // There's only work to do if current dataType is non-auto
22712 if ( current === "*" ) {
22713
22714 current = prev;
22715
22716 // Convert response if prev dataType is non-auto and differs from current
22717 } else if ( prev !== "*" && prev !== current ) {
22718
22719 // Seek a direct converter
22720 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
22721
22722 // If none found, seek a pair
22723 if ( !conv ) {
22724 for ( conv2 in converters ) {
22725
22726 // If conv2 outputs current
22727 tmp = conv2.split( " " );
22728 if ( tmp[ 1 ] === current ) {
22729
22730 // If prev can be converted to accepted input
22731 conv = converters[ prev + " " + tmp[ 0 ] ] ||
22732 converters[ "* " + tmp[ 0 ] ];
22733 if ( conv ) {
22734
22735 // Condense equivalence converters
22736 if ( conv === true ) {
22737 conv = converters[ conv2 ];
22738
22739 // Otherwise, insert the intermediate dataType
22740 } else if ( converters[ conv2 ] !== true ) {
22741 current = tmp[ 0 ];
22742 dataTypes.unshift( tmp[ 1 ] );
22743 }
22744 break;
22745 }
22746 }
22747 }
22748 }
22749
22750 // Apply converter (if not an equivalence)
22751 if ( conv !== true ) {
22752
22753 // Unless errors are allowed to bubble, catch and return them
22754 if ( conv && s.throws ) {
22755 response = conv( response );
22756 } else {
22757 try {
22758 response = conv( response );
22759 } catch ( e ) {
22760 return {
22761 state: "parsererror",
22762 error: conv ? e : "No conversion from " + prev + " to " + current
22763 };
22764 }
22765 }
22766 }
22767 }
22768 }
22769 }
22770
22771 return { state: "success", data: response };
22772 }
22773
22774 jQuery.extend( {
22775
22776 // Counter for holding the number of active queries
22777 active: 0,
22778
22779 // Last-Modified header cache for next request
22780 lastModified: {},
22781 etag: {},
22782
22783 ajaxSettings: {
22784 url: location.href,
22785 type: "GET",
22786 isLocal: rlocalProtocol.test( location.protocol ),
22787 global: true,
22788 processData: true,
22789 async: true,
22790 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
22791
22792 /*
22793 timeout: 0,
22794 data: null,
22795 dataType: null,
22796 username: null,
22797 password: null,
22798 cache: null,
22799 throws: false,
22800 traditional: false,
22801 headers: {},
22802 */
22803
22804 accepts: {
22805 "*": allTypes,
22806 text: "text/plain",
22807 html: "text/html",
22808 xml: "application/xml, text/xml",
22809 json: "application/json, text/javascript"
22810 },
22811
22812 contents: {
22813 xml: /\bxml\b/,
22814 html: /\bhtml/,
22815 json: /\bjson\b/
22816 },
22817
22818 responseFields: {
22819 xml: "responseXML",
22820 text: "responseText",
22821 json: "responseJSON"
22822 },
22823
22824 // Data converters
22825 // Keys separate source (or catchall "*") and destination types with a single space
22826 converters: {
22827
22828 // Convert anything to text
22829 "* text": String,
22830
22831 // Text to html (true = no transformation)
22832 "text html": true,
22833
22834 // Evaluate text as a json expression
22835 "text json": JSON.parse,
22836
22837 // Parse text as xml
22838 "text xml": jQuery.parseXML
22839 },
22840
22841 // For options that shouldn't be deep extended:
22842 // you can add your own custom options here if
22843 // and when you create one that shouldn't be
22844 // deep extended (see ajaxExtend)
22845 flatOptions: {
22846 url: true,
22847 context: true
22848 }
22849 },
22850
22851 // Creates a full fledged settings object into target
22852 // with both ajaxSettings and settings fields.
22853 // If target is omitted, writes into ajaxSettings.
22854 ajaxSetup: function( target, settings ) {
22855 return settings ?
22856
22857 // Building a settings object
22858 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
22859
22860 // Extending ajaxSettings
22861 ajaxExtend( jQuery.ajaxSettings, target );
22862 },
22863
22864 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
22865 ajaxTransport: addToPrefiltersOrTransports( transports ),
22866
22867 // Main method
22868 ajax: function( url, options ) {
22869
22870 // If url is an object, simulate pre-1.5 signature
22871 if ( typeof url === "object" ) {
22872 options = url;
22873 url = undefined;
22874 }
22875
22876 // Force options to be an object
22877 options = options || {};
22878
22879 var transport,
22880
22881 // URL without anti-cache param
22882 cacheURL,
22883
22884 // Response headers
22885 responseHeadersString,
22886 responseHeaders,
22887
22888 // timeout handle
22889 timeoutTimer,
22890
22891 // Url cleanup var
22892 urlAnchor,
22893
22894 // Request state (becomes false upon send and true upon completion)
22895 completed,
22896
22897 // To know if global events are to be dispatched
22898 fireGlobals,
22899
22900 // Loop variable
22901 i,
22902
22903 // uncached part of the url
22904 uncached,
22905
22906 // Create the final options object
22907 s = jQuery.ajaxSetup( {}, options ),
22908
22909 // Callbacks context
22910 callbackContext = s.context || s,
22911
22912 // Context for global events is callbackContext if it is a DOM node or jQuery collection
22913 globalEventContext = s.context &&
22914 ( callbackContext.nodeType || callbackContext.jquery ) ?
22915 jQuery( callbackContext ) :
22916 jQuery.event,
22917
22918 // Deferreds
22919 deferred = jQuery.Deferred(),
22920 completeDeferred = jQuery.Callbacks( "once memory" ),
22921
22922 // Status-dependent callbacks
22923 statusCode = s.statusCode || {},
22924
22925 // Headers (they are sent all at once)
22926 requestHeaders = {},
22927 requestHeadersNames = {},
22928
22929 // Default abort message
22930 strAbort = "canceled",
22931
22932 // Fake xhr
22933 jqXHR = {
22934 readyState: 0,
22935
22936 // Builds headers hashtable if needed
22937 getResponseHeader: function( key ) {
22938 var match;
22939 if ( completed ) {
22940 if ( !responseHeaders ) {
22941 responseHeaders = {};
22942 while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
22943 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
22944 }
22945 }
22946 match = responseHeaders[ key.toLowerCase() ];
22947 }
22948 return match == null ? null : match;
22949 },
22950
22951 // Raw string
22952 getAllResponseHeaders: function() {
22953 return completed ? responseHeadersString : null;
22954 },
22955
22956 // Caches the header
22957 setRequestHeader: function( name, value ) {
22958 if ( completed == null ) {
22959 name = requestHeadersNames[ name.toLowerCase() ] =
22960 requestHeadersNames[ name.toLowerCase() ] || name;
22961 requestHeaders[ name ] = value;
22962 }
22963 return this;
22964 },
22965
22966 // Overrides response content-type header
22967 overrideMimeType: function( type ) {
22968 if ( completed == null ) {
22969 s.mimeType = type;
22970 }
22971 return this;
22972 },
22973
22974 // Status-dependent callbacks
22975 statusCode: function( map ) {
22976 var code;
22977 if ( map ) {
22978 if ( completed ) {
22979
22980 // Execute the appropriate callbacks
22981 jqXHR.always( map[ jqXHR.status ] );
22982 } else {
22983
22984 // Lazy-add the new callbacks in a way that preserves old ones
22985 for ( code in map ) {
22986 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
22987 }
22988 }
22989 }
22990 return this;
22991 },
22992
22993 // Cancel the request
22994 abort: function( statusText ) {
22995 var finalText = statusText || strAbort;
22996 if ( transport ) {
22997 transport.abort( finalText );
22998 }
22999 done( 0, finalText );
23000 return this;
23001 }
23002 };
23003
23004 // Attach deferreds
23005 deferred.promise( jqXHR );
23006
23007 // Add protocol if not provided (prefilters might expect it)
23008 // Handle falsy url in the settings object (#10093: consistency with old signature)
23009 // We also use the url parameter if available
23010 s.url = ( ( url || s.url || location.href ) + "" )
23011 .replace( rprotocol, location.protocol + "//" );
23012
23013 // Alias method option to type as per ticket #12004
23014 s.type = options.method || options.type || s.method || s.type;
23015
23016 // Extract dataTypes list
23017 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
23018
23019 // A cross-domain request is in order when the origin doesn't match the current origin.
23020 if ( s.crossDomain == null ) {
23021 urlAnchor = document.createElement( "a" );
23022
23023 // Support: IE <=8 - 11, Edge 12 - 13
23024 // IE throws exception on accessing the href property if url is malformed,
23025 // e.g. http://example.com:80x/
23026 try {
23027 urlAnchor.href = s.url;
23028
23029 // Support: IE <=8 - 11 only
23030 // Anchor's host property isn't correctly set when s.url is relative
23031 urlAnchor.href = urlAnchor.href;
23032 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
23033 urlAnchor.protocol + "//" + urlAnchor.host;
23034 } catch ( e ) {
23035
23036 // If there is an error parsing the URL, assume it is crossDomain,
23037 // it can be rejected by the transport if it is invalid
23038 s.crossDomain = true;
23039 }
23040 }
23041
23042 // Convert data if not already a string
23043 if ( s.data && s.processData && typeof s.data !== "string" ) {
23044 s.data = jQuery.param( s.data, s.traditional );
23045 }
23046
23047 // Apply prefilters
23048 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
23049
23050 // If request was aborted inside a prefilter, stop there
23051 if ( completed ) {
23052 return jqXHR;
23053 }
23054
23055 // We can fire global events as of now if asked to
23056 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
23057 fireGlobals = jQuery.event && s.global;
23058
23059 // Watch for a new set of requests
23060 if ( fireGlobals && jQuery.active++ === 0 ) {
23061 jQuery.event.trigger( "ajaxStart" );
23062 }
23063
23064 // Uppercase the type
23065 s.type = s.type.toUpperCase();
23066
23067 // Determine if request has content
23068 s.hasContent = !rnoContent.test( s.type );
23069
23070 // Save the URL in case we're toying with the If-Modified-Since
23071 // and/or If-None-Match header later on
23072 // Remove hash to simplify url manipulation
23073 cacheURL = s.url.replace( rhash, "" );
23074
23075 // More options handling for requests with no content
23076 if ( !s.hasContent ) {
23077
23078 // Remember the hash so we can put it back
23079 uncached = s.url.slice( cacheURL.length );
23080
23081 // If data is available, append data to url
23082 if ( s.data ) {
23083 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
23084
23085 // #9682: remove data so that it's not used in an eventual retry
23086 delete s.data;
23087 }
23088
23089 // Add or update anti-cache param if needed
23090 if ( s.cache === false ) {
23091 cacheURL = cacheURL.replace( rantiCache, "$1" );
23092 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
23093 }
23094
23095 // Put hash and anti-cache on the URL that will be requested (gh-1732)
23096 s.url = cacheURL + uncached;
23097
23098 // Change '%20' to '+' if this is encoded form body content (gh-2658)
23099 } else if ( s.data && s.processData &&
23100 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
23101 s.data = s.data.replace( r20, "+" );
23102 }
23103
23104 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23105 if ( s.ifModified ) {
23106 if ( jQuery.lastModified[ cacheURL ] ) {
23107 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
23108 }
23109 if ( jQuery.etag[ cacheURL ] ) {
23110 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
23111 }
23112 }
23113
23114 // Set the correct header, if data is being sent
23115 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
23116 jqXHR.setRequestHeader( "Content-Type", s.contentType );
23117 }
23118
23119 // Set the Accepts header for the server, depending on the dataType
23120 jqXHR.setRequestHeader(
23121 "Accept",
23122 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
23123 s.accepts[ s.dataTypes[ 0 ] ] +
23124 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
23125 s.accepts[ "*" ]
23126 );
23127
23128 // Check for headers option
23129 for ( i in s.headers ) {
23130 jqXHR.setRequestHeader( i, s.headers[ i ] );
23131 }
23132
23133 // Allow custom headers/mimetypes and early abort
23134 if ( s.beforeSend &&
23135 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
23136
23137 // Abort if not done already and return
23138 return jqXHR.abort();
23139 }
23140
23141 // Aborting is no longer a cancellation
23142 strAbort = "abort";
23143
23144 // Install callbacks on deferreds
23145 completeDeferred.add( s.complete );
23146 jqXHR.done( s.success );
23147 jqXHR.fail( s.error );
23148
23149 // Get transport
23150 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
23151
23152 // If no transport, we auto-abort
23153 if ( !transport ) {
23154 done( -1, "No Transport" );
23155 } else {
23156 jqXHR.readyState = 1;
23157
23158 // Send global event
23159 if ( fireGlobals ) {
23160 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
23161 }
23162
23163 // If request was aborted inside ajaxSend, stop there
23164 if ( completed ) {
23165 return jqXHR;
23166 }
23167
23168 // Timeout
23169 if ( s.async && s.timeout > 0 ) {
23170 timeoutTimer = window.setTimeout( function() {
23171 jqXHR.abort( "timeout" );
23172 }, s.timeout );
23173 }
23174
23175 try {
23176 completed = false;
23177 transport.send( requestHeaders, done );
23178 } catch ( e ) {
23179
23180 // Rethrow post-completion exceptions
23181 if ( completed ) {
23182 throw e;
23183 }
23184
23185 // Propagate others as results
23186 done( -1, e );
23187 }
23188 }
23189
23190 // Callback for when everything is done
23191 function done( status, nativeStatusText, responses, headers ) {
23192 var isSuccess, success, error, response, modified,
23193 statusText = nativeStatusText;
23194
23195 // Ignore repeat invocations
23196 if ( completed ) {
23197 return;
23198 }
23199
23200 completed = true;
23201
23202 // Clear timeout if it exists
23203 if ( timeoutTimer ) {
23204 window.clearTimeout( timeoutTimer );
23205 }
23206
23207 // Dereference transport for early garbage collection
23208 // (no matter how long the jqXHR object will be used)
23209 transport = undefined;
23210
23211 // Cache response headers
23212 responseHeadersString = headers || "";
23213
23214 // Set readyState
23215 jqXHR.readyState = status > 0 ? 4 : 0;
23216
23217 // Determine if successful
23218 isSuccess = status >= 200 && status < 300 || status === 304;
23219
23220 // Get response data
23221 if ( responses ) {
23222 response = ajaxHandleResponses( s, jqXHR, responses );
23223 }
23224
23225 // Convert no matter what (that way responseXXX fields are always set)
23226 response = ajaxConvert( s, response, jqXHR, isSuccess );
23227
23228 // If successful, handle type chaining
23229 if ( isSuccess ) {
23230
23231 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23232 if ( s.ifModified ) {
23233 modified = jqXHR.getResponseHeader( "Last-Modified" );
23234 if ( modified ) {
23235 jQuery.lastModified[ cacheURL ] = modified;
23236 }
23237 modified = jqXHR.getResponseHeader( "etag" );
23238 if ( modified ) {
23239 jQuery.etag[ cacheURL ] = modified;
23240 }
23241 }
23242
23243 // if no content
23244 if ( status === 204 || s.type === "HEAD" ) {
23245 statusText = "nocontent";
23246
23247 // if not modified
23248 } else if ( status === 304 ) {
23249 statusText = "notmodified";
23250
23251 // If we have data, let's convert it
23252 } else {
23253 statusText = response.state;
23254 success = response.data;
23255 error = response.error;
23256 isSuccess = !error;
23257 }
23258 } else {
23259
23260 // Extract error from statusText and normalize for non-aborts
23261 error = statusText;
23262 if ( status || !statusText ) {
23263 statusText = "error";
23264 if ( status < 0 ) {
23265 status = 0;
23266 }
23267 }
23268 }
23269
23270 // Set data for the fake xhr object
23271 jqXHR.status = status;
23272 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
23273
23274 // Success/Error
23275 if ( isSuccess ) {
23276 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
23277 } else {
23278 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
23279 }
23280
23281 // Status-dependent callbacks
23282 jqXHR.statusCode( statusCode );
23283 statusCode = undefined;
23284
23285 if ( fireGlobals ) {
23286 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
23287 [ jqXHR, s, isSuccess ? success : error ] );
23288 }
23289
23290 // Complete
23291 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
23292
23293 if ( fireGlobals ) {
23294 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
23295
23296 // Handle the global AJAX counter
23297 if ( !( --jQuery.active ) ) {
23298 jQuery.event.trigger( "ajaxStop" );
23299 }
23300 }
23301 }
23302
23303 return jqXHR;
23304 },
23305
23306 getJSON: function( url, data, callback ) {
23307 return jQuery.get( url, data, callback, "json" );
23308 },
23309
23310 getScript: function( url, callback ) {
23311 return jQuery.get( url, undefined, callback, "script" );
23312 }
23313 } );
23314
23315 jQuery.each( [ "get", "post" ], function( i, method ) {
23316 jQuery[ method ] = function( url, data, callback, type ) {
23317
23318 // Shift arguments if data argument was omitted
23319 if ( jQuery.isFunction( data ) ) {
23320 type = type || callback;
23321 callback = data;
23322 data = undefined;
23323 }
23324
23325 // The url can be an options object (which then must have .url)
23326 return jQuery.ajax( jQuery.extend( {
23327 url: url,
23328 type: method,
23329 dataType: type,
23330 data: data,
23331 success: callback
23332 }, jQuery.isPlainObject( url ) && url ) );
23333 };
23334 } );
23335
23336
23337 jQuery._evalUrl = function( url ) {
23338 return jQuery.ajax( {
23339 url: url,
23340
23341 // Make this explicit, since user can override this through ajaxSetup (#11264)
23342 type: "GET",
23343 dataType: "script",
23344 cache: true,
23345 async: false,
23346 global: false,
23347 "throws": true
23348 } );
23349 };
23350
23351
23352 jQuery.fn.extend( {
23353 wrapAll: function( html ) {
23354 var wrap;
23355
23356 if ( this[ 0 ] ) {
23357 if ( jQuery.isFunction( html ) ) {
23358 html = html.call( this[ 0 ] );
23359 }
23360
23361 // The elements to wrap the target around
23362 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
23363
23364 if ( this[ 0 ].parentNode ) {
23365 wrap.insertBefore( this[ 0 ] );
23366 }
23367
23368 wrap.map( function() {
23369 var elem = this;
23370
23371 while ( elem.firstElementChild ) {
23372 elem = elem.firstElementChild;
23373 }
23374
23375 return elem;
23376 } ).append( this );
23377 }
23378
23379 return this;
23380 },
23381
23382 wrapInner: function( html ) {
23383 if ( jQuery.isFunction( html ) ) {
23384 return this.each( function( i ) {
23385 jQuery( this ).wrapInner( html.call( this, i ) );
23386 } );
23387 }
23388
23389 return this.each( function() {
23390 var self = jQuery( this ),
23391 contents = self.contents();
23392
23393 if ( contents.length ) {
23394 contents.wrapAll( html );
23395
23396 } else {
23397 self.append( html );
23398 }
23399 } );
23400 },
23401
23402 wrap: function( html ) {
23403 var isFunction = jQuery.isFunction( html );
23404
23405 return this.each( function( i ) {
23406 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
23407 } );
23408 },
23409
23410 unwrap: function( selector ) {
23411 this.parent( selector ).not( "body" ).each( function() {
23412 jQuery( this ).replaceWith( this.childNodes );
23413 } );
23414 return this;
23415 }
23416 } );
23417
23418
23419 jQuery.expr.pseudos.hidden = function( elem ) {
23420 return !jQuery.expr.pseudos.visible( elem );
23421 };
23422 jQuery.expr.pseudos.visible = function( elem ) {
23423 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
23424 };
23425
23426
23427
23428
23429 jQuery.ajaxSettings.xhr = function() {
23430 try {
23431 return new window.XMLHttpRequest();
23432 } catch ( e ) {}
23433 };
23434
23435 var xhrSuccessStatus = {
23436
23437 // File protocol always yields status code 0, assume 200
23438 0: 200,
23439
23440 // Support: IE <=9 only
23441 // #1450: sometimes IE returns 1223 when it should be 204
23442 1223: 204
23443 },
23444 xhrSupported = jQuery.ajaxSettings.xhr();
23445
23446 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
23447 support.ajax = xhrSupported = !!xhrSupported;
23448
23449 jQuery.ajaxTransport( function( options ) {
23450 var callback, errorCallback;
23451
23452 // Cross domain only allowed if supported through XMLHttpRequest
23453 if ( support.cors || xhrSupported && !options.crossDomain ) {
23454 return {
23455 send: function( headers, complete ) {
23456 var i,
23457 xhr = options.xhr();
23458
23459 xhr.open(
23460 options.type,
23461 options.url,
23462 options.async,
23463 options.username,
23464 options.password
23465 );
23466
23467 // Apply custom fields if provided
23468 if ( options.xhrFields ) {
23469 for ( i in options.xhrFields ) {
23470 xhr[ i ] = options.xhrFields[ i ];
23471 }
23472 }
23473
23474 // Override mime type if needed
23475 if ( options.mimeType && xhr.overrideMimeType ) {
23476 xhr.overrideMimeType( options.mimeType );
23477 }
23478
23479 // X-Requested-With header
23480 // For cross-domain requests, seeing as conditions for a preflight are
23481 // akin to a jigsaw puzzle, we simply never set it to be sure.
23482 // (it can always be set on a per-request basis or even using ajaxSetup)
23483 // For same-domain requests, won't change header if already provided.
23484 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
23485 headers[ "X-Requested-With" ] = "XMLHttpRequest";
23486 }
23487
23488 // Set headers
23489 for ( i in headers ) {
23490 xhr.setRequestHeader( i, headers[ i ] );
23491 }
23492
23493 // Callback
23494 callback = function( type ) {
23495 return function() {
23496 if ( callback ) {
23497 callback = errorCallback = xhr.onload =
23498 xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
23499
23500 if ( type === "abort" ) {
23501 xhr.abort();
23502 } else if ( type === "error" ) {
23503
23504 // Support: IE <=9 only
23505 // On a manual native abort, IE9 throws
23506 // errors on any property access that is not readyState
23507 if ( typeof xhr.status !== "number" ) {
23508 complete( 0, "error" );
23509 } else {
23510 complete(
23511
23512 // File: protocol always yields status 0; see #8605, #14207
23513 xhr.status,
23514 xhr.statusText
23515 );
23516 }
23517 } else {
23518 complete(
23519 xhrSuccessStatus[ xhr.status ] || xhr.status,
23520 xhr.statusText,
23521
23522 // Support: IE <=9 only
23523 // IE9 has no XHR2 but throws on binary (trac-11426)
23524 // For XHR2 non-text, let the caller handle it (gh-2498)
23525 ( xhr.responseType || "text" ) !== "text" ||
23526 typeof xhr.responseText !== "string" ?
23527 { binary: xhr.response } :
23528 { text: xhr.responseText },
23529 xhr.getAllResponseHeaders()
23530 );
23531 }
23532 }
23533 };
23534 };
23535
23536 // Listen to events
23537 xhr.onload = callback();
23538 errorCallback = xhr.onerror = callback( "error" );
23539
23540 // Support: IE 9 only
23541 // Use onreadystatechange to replace onabort
23542 // to handle uncaught aborts
23543 if ( xhr.onabort !== undefined ) {
23544 xhr.onabort = errorCallback;
23545 } else {
23546 xhr.onreadystatechange = function() {
23547
23548 // Check readyState before timeout as it changes
23549 if ( xhr.readyState === 4 ) {
23550
23551 // Allow onerror to be called first,
23552 // but that will not handle a native abort
23553 // Also, save errorCallback to a variable
23554 // as xhr.onerror cannot be accessed
23555 window.setTimeout( function() {
23556 if ( callback ) {
23557 errorCallback();
23558 }
23559 } );
23560 }
23561 };
23562 }
23563
23564 // Create the abort callback
23565 callback = callback( "abort" );
23566
23567 try {
23568
23569 // Do send the request (this may raise an exception)
23570 xhr.send( options.hasContent && options.data || null );
23571 } catch ( e ) {
23572
23573 // #14683: Only rethrow if this hasn't been notified as an error yet
23574 if ( callback ) {
23575 throw e;
23576 }
23577 }
23578 },
23579
23580 abort: function() {
23581 if ( callback ) {
23582 callback();
23583 }
23584 }
23585 };
23586 }
23587 } );
23588
23589
23590
23591
23592 // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
23593 jQuery.ajaxPrefilter( function( s ) {
23594 if ( s.crossDomain ) {
23595 s.contents.script = false;
23596 }
23597 } );
23598
23599 // Install script dataType
23600 jQuery.ajaxSetup( {
23601 accepts: {
23602 script: "text/javascript, application/javascript, " +
23603 "application/ecmascript, application/x-ecmascript"
23604 },
23605 contents: {
23606 script: /\b(?:java|ecma)script\b/
23607 },
23608 converters: {
23609 "text script": function( text ) {
23610 jQuery.globalEval( text );
23611 return text;
23612 }
23613 }
23614 } );
23615
23616 // Handle cache's special case and crossDomain
23617 jQuery.ajaxPrefilter( "script", function( s ) {
23618 if ( s.cache === undefined ) {
23619 s.cache = false;
23620 }
23621 if ( s.crossDomain ) {
23622 s.type = "GET";
23623 }
23624 } );
23625
23626 // Bind script tag hack transport
23627 jQuery.ajaxTransport( "script", function( s ) {
23628
23629 // This transport only deals with cross domain requests
23630 if ( s.crossDomain ) {
23631 var script, callback;
23632 return {
23633 send: function( _, complete ) {
23634 script = jQuery( "<script>" ).prop( {
23635 charset: s.scriptCharset,
23636 src: s.url
23637 } ).on(
23638 "load error",
23639 callback = function( evt ) {
23640 script.remove();
23641 callback = null;
23642 if ( evt ) {
23643 complete( evt.type === "error" ? 404 : 200, evt.type );
23644 }
23645 }
23646 );
23647
23648 // Use native DOM manipulation to avoid our domManip AJAX trickery
23649 document.head.appendChild( script[ 0 ] );
23650 },
23651 abort: function() {
23652 if ( callback ) {
23653 callback();
23654 }
23655 }
23656 };
23657 }
23658 } );
23659
23660
23661
23662
23663 var oldCallbacks = [],
23664 rjsonp = /(=)\?(?=&|$)|\?\?/;
23665
23666 // Default jsonp settings
23667 jQuery.ajaxSetup( {
23668 jsonp: "callback",
23669 jsonpCallback: function() {
23670 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
23671 this[ callback ] = true;
23672 return callback;
23673 }
23674 } );
23675
23676 // Detect, normalize options and install callbacks for jsonp requests
23677 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23678
23679 var callbackName, overwritten, responseContainer,
23680 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
23681 "url" :
23682 typeof s.data === "string" &&
23683 ( s.contentType || "" )
23684 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
23685 rjsonp.test( s.data ) && "data"
23686 );
23687
23688 // Handle iff the expected data type is "jsonp" or we have a parameter to set
23689 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
23690
23691 // Get callback name, remembering preexisting value associated with it
23692 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
23693 s.jsonpCallback() :
23694 s.jsonpCallback;
23695
23696 // Insert callback into url or form data
23697 if ( jsonProp ) {
23698 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
23699 } else if ( s.jsonp !== false ) {
23700 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
23701 }
23702
23703 // Use data converter to retrieve json after script execution
23704 s.converters[ "script json" ] = function() {
23705 if ( !responseContainer ) {
23706 jQuery.error( callbackName + " was not called" );
23707 }
23708 return responseContainer[ 0 ];
23709 };
23710
23711 // Force json dataType
23712 s.dataTypes[ 0 ] = "json";
23713
23714 // Install callback
23715 overwritten = window[ callbackName ];
23716 window[ callbackName ] = function() {
23717 responseContainer = arguments;
23718 };
23719
23720 // Clean-up function (fires after converters)
23721 jqXHR.always( function() {
23722
23723 // If previous value didn't exist - remove it
23724 if ( overwritten === undefined ) {
23725 jQuery( window ).removeProp( callbackName );
23726
23727 // Otherwise restore preexisting value
23728 } else {
23729 window[ callbackName ] = overwritten;
23730 }
23731
23732 // Save back as free
23733 if ( s[ callbackName ] ) {
23734
23735 // Make sure that re-using the options doesn't screw things around
23736 s.jsonpCallback = originalSettings.jsonpCallback;
23737
23738 // Save the callback name for future use
23739 oldCallbacks.push( callbackName );
23740 }
23741
23742 // Call if it was a function and we have a response
23743 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
23744 overwritten( responseContainer[ 0 ] );
23745 }
23746
23747 responseContainer = overwritten = undefined;
23748 } );
23749
23750 // Delegate to script
23751 return "script";
23752 }
23753 } );
23754
23755
23756
23757
23758 // Support: Safari 8 only
23759 // In Safari 8 documents created via document.implementation.createHTMLDocument
23760 // collapse sibling forms: the second one becomes a child of the first one.
23761 // Because of that, this security measure has to be disabled in Safari 8.
23762 // https://bugs.webkit.org/show_bug.cgi?id=137337
23763 support.createHTMLDocument = ( function() {
23764 var body = document.implementation.createHTMLDocument( "" ).body;
23765 body.innerHTML = "<form></form><form></form>";
23766 return body.childNodes.length === 2;
23767 } )();
23768
23769
23770 // Argument "data" should be string of html
23771 // context (optional): If specified, the fragment will be created in this context,
23772 // defaults to document
23773 // keepScripts (optional): If true, will include scripts passed in the html string
23774 jQuery.parseHTML = function( data, context, keepScripts ) {
23775 if ( typeof data !== "string" ) {
23776 return [];
23777 }
23778 if ( typeof context === "boolean" ) {
23779 keepScripts = context;
23780 context = false;
23781 }
23782
23783 var base, parsed, scripts;
23784
23785 if ( !context ) {
23786
23787 // Stop scripts or inline event handlers from being executed immediately
23788 // by using document.implementation
23789 if ( support.createHTMLDocument ) {
23790 context = document.implementation.createHTMLDocument( "" );
23791
23792 // Set the base href for the created document
23793 // so any parsed elements with URLs
23794 // are based on the document's URL (gh-2965)
23795 base = context.createElement( "base" );
23796 base.href = document.location.href;
23797 context.head.appendChild( base );
23798 } else {
23799 context = document;
23800 }
23801 }
23802
23803 parsed = rsingleTag.exec( data );
23804 scripts = !keepScripts && [];
23805
23806 // Single tag
23807 if ( parsed ) {
23808 return [ context.createElement( parsed[ 1 ] ) ];
23809 }
23810
23811 parsed = buildFragment( [ data ], context, scripts );
23812
23813 if ( scripts && scripts.length ) {
23814 jQuery( scripts ).remove();
23815 }
23816
23817 return jQuery.merge( [], parsed.childNodes );
23818 };
23819
23820
23821 /**
23822 * Load a url into a page
23823 */
23824 jQuery.fn.load = function( url, params, callback ) {
23825 var selector, type, response,
23826 self = this,
23827 off = url.indexOf( " " );
23828
23829 if ( off > -1 ) {
23830 selector = stripAndCollapse( url.slice( off ) );
23831 url = url.slice( 0, off );
23832 }
23833
23834 // If it's a function
23835 if ( jQuery.isFunction( params ) ) {
23836
23837 // We assume that it's the callback
23838 callback = params;
23839 params = undefined;
23840
23841 // Otherwise, build a param string
23842 } else if ( params && typeof params === "object" ) {
23843 type = "POST";
23844 }
23845
23846 // If we have elements to modify, make the request
23847 if ( self.length > 0 ) {
23848 jQuery.ajax( {
23849 url: url,
23850
23851 // If "type" variable is undefined, then "GET" method will be used.
23852 // Make value of this field explicit since
23853 // user can override it through ajaxSetup method
23854 type: type || "GET",
23855 dataType: "html",
23856 data: params
23857 } ).done( function( responseText ) {
23858
23859 // Save response for use in complete callback
23860 response = arguments;
23861
23862 self.html( selector ?
23863
23864 // If a selector was specified, locate the right elements in a dummy div
23865 // Exclude scripts to avoid IE 'Permission Denied' errors
23866 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
23867
23868 // Otherwise use the full result
23869 responseText );
23870
23871 // If the request succeeds, this function gets "data", "status", "jqXHR"
23872 // but they are ignored because response was set above.
23873 // If it fails, this function gets "jqXHR", "status", "error"
23874 } ).always( callback && function( jqXHR, status ) {
23875 self.each( function() {
23876 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
23877 } );
23878 } );
23879 }
23880
23881 return this;
23882 };
23883
23884
23885
23886
23887 // Attach a bunch of functions for handling common AJAX events
23888 jQuery.each( [
23889 "ajaxStart",
23890 "ajaxStop",
23891 "ajaxComplete",
23892 "ajaxError",
23893 "ajaxSuccess",
23894 "ajaxSend"
23895 ], function( i, type ) {
23896 jQuery.fn[ type ] = function( fn ) {
23897 return this.on( type, fn );
23898 };
23899 } );
23900
23901
23902
23903
23904 jQuery.expr.pseudos.animated = function( elem ) {
23905 return jQuery.grep( jQuery.timers, function( fn ) {
23906 return elem === fn.elem;
23907 } ).length;
23908 };
23909
23910
23911
23912
23913 jQuery.offset = {
23914 setOffset: function( elem, options, i ) {
23915 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
23916 position = jQuery.css( elem, "position" ),
23917 curElem = jQuery( elem ),
23918 props = {};
23919
23920 // Set position first, in-case top/left are set even on static elem
23921 if ( position === "static" ) {
23922 elem.style.position = "relative";
23923 }
23924
23925 curOffset = curElem.offset();
23926 curCSSTop = jQuery.css( elem, "top" );
23927 curCSSLeft = jQuery.css( elem, "left" );
23928 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
23929 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
23930
23931 // Need to be able to calculate position if either
23932 // top or left is auto and position is either absolute or fixed
23933 if ( calculatePosition ) {
23934 curPosition = curElem.position();
23935 curTop = curPosition.top;
23936 curLeft = curPosition.left;
23937
23938 } else {
23939 curTop = parseFloat( curCSSTop ) || 0;
23940 curLeft = parseFloat( curCSSLeft ) || 0;
23941 }
23942
23943 if ( jQuery.isFunction( options ) ) {
23944
23945 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
23946 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
23947 }
23948
23949 if ( options.top != null ) {
23950 props.top = ( options.top - curOffset.top ) + curTop;
23951 }
23952 if ( options.left != null ) {
23953 props.left = ( options.left - curOffset.left ) + curLeft;
23954 }
23955
23956 if ( "using" in options ) {
23957 options.using.call( elem, props );
23958
23959 } else {
23960 curElem.css( props );
23961 }
23962 }
23963 };
23964
23965 jQuery.fn.extend( {
23966 offset: function( options ) {
23967
23968 // Preserve chaining for setter
23969 if ( arguments.length ) {
23970 return options === undefined ?
23971 this :
23972 this.each( function( i ) {
23973 jQuery.offset.setOffset( this, options, i );
23974 } );
23975 }
23976
23977 var doc, docElem, rect, win,
23978 elem = this[ 0 ];
23979
23980 if ( !elem ) {
23981 return;
23982 }
23983
23984 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
23985 // Support: IE <=11 only
23986 // Running getBoundingClientRect on a
23987 // disconnected node in IE throws an error
23988 if ( !elem.getClientRects().length ) {
23989 return { top: 0, left: 0 };
23990 }
23991
23992 rect = elem.getBoundingClientRect();
23993
23994 doc = elem.ownerDocument;
23995 docElem = doc.documentElement;
23996 win = doc.defaultView;
23997
23998 return {
23999 top: rect.top + win.pageYOffset - docElem.clientTop,
24000 left: rect.left + win.pageXOffset - docElem.clientLeft
24001 };
24002 },
24003
24004 position: function() {
24005 if ( !this[ 0 ] ) {
24006 return;
24007 }
24008
24009 var offsetParent, offset,
24010 elem = this[ 0 ],
24011 parentOffset = { top: 0, left: 0 };
24012
24013 // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
24014 // because it is its only offset parent
24015 if ( jQuery.css( elem, "position" ) === "fixed" ) {
24016
24017 // Assume getBoundingClientRect is there when computed position is fixed
24018 offset = elem.getBoundingClientRect();
24019
24020 } else {
24021
24022 // Get *real* offsetParent
24023 offsetParent = this.offsetParent();
24024
24025 // Get correct offsets
24026 offset = this.offset();
24027 if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
24028 parentOffset = offsetParent.offset();
24029 }
24030
24031 // Add offsetParent borders
24032 parentOffset = {
24033 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
24034 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
24035 };
24036 }
24037
24038 // Subtract parent offsets and element margins
24039 return {
24040 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
24041 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
24042 };
24043 },
24044
24045 // This method will return documentElement in the following cases:
24046 // 1) For the element inside the iframe without offsetParent, this method will return
24047 // documentElement of the parent window
24048 // 2) For the hidden or detached element
24049 // 3) For body or html element, i.e. in case of the html node - it will return itself
24050 //
24051 // but those exceptions were never presented as a real life use-cases
24052 // and might be considered as more preferable results.
24053 //
24054 // This logic, however, is not guaranteed and can change at any point in the future
24055 offsetParent: function() {
24056 return this.map( function() {
24057 var offsetParent = this.offsetParent;
24058
24059 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
24060 offsetParent = offsetParent.offsetParent;
24061 }
24062
24063 return offsetParent || documentElement;
24064 } );
24065 }
24066 } );
24067
24068 // Create scrollLeft and scrollTop methods
24069 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
24070 var top = "pageYOffset" === prop;
24071
24072 jQuery.fn[ method ] = function( val ) {
24073 return access( this, function( elem, method, val ) {
24074
24075 // Coalesce documents and windows
24076 var win;
24077 if ( jQuery.isWindow( elem ) ) {
24078 win = elem;
24079 } else if ( elem.nodeType === 9 ) {
24080 win = elem.defaultView;
24081 }
24082
24083 if ( val === undefined ) {
24084 return win ? win[ prop ] : elem[ method ];
24085 }
24086
24087 if ( win ) {
24088 win.scrollTo(
24089 !top ? val : win.pageXOffset,
24090 top ? val : win.pageYOffset
24091 );
24092
24093 } else {
24094 elem[ method ] = val;
24095 }
24096 }, method, val, arguments.length );
24097 };
24098 } );
24099
24100 // Support: Safari <=7 - 9.1, Chrome <=37 - 49
24101 // Add the top/left cssHooks using jQuery.fn.position
24102 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
24103 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
24104 // getComputedStyle returns percent when specified for top/left/bottom/right;
24105 // rather than make the css module depend on the offset module, just check for it here
24106 jQuery.each( [ "top", "left" ], function( i, prop ) {
24107 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
24108 function( elem, computed ) {
24109 if ( computed ) {
24110 computed = curCSS( elem, prop );
24111
24112 // If curCSS returns percentage, fallback to offset
24113 return rnumnonpx.test( computed ) ?
24114 jQuery( elem ).position()[ prop ] + "px" :
24115 computed;
24116 }
24117 }
24118 );
24119 } );
24120
24121
24122 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
24123 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
24124 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
24125 function( defaultExtra, funcName ) {
24126
24127 // Margin is only for outerHeight, outerWidth
24128 jQuery.fn[ funcName ] = function( margin, value ) {
24129 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
24130 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
24131
24132 return access( this, function( elem, type, value ) {
24133 var doc;
24134
24135 if ( jQuery.isWindow( elem ) ) {
24136
24137 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
24138 return funcName.indexOf( "outer" ) === 0 ?
24139 elem[ "inner" + name ] :
24140 elem.document.documentElement[ "client" + name ];
24141 }
24142
24143 // Get document width or height
24144 if ( elem.nodeType === 9 ) {
24145 doc = elem.documentElement;
24146
24147 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
24148 // whichever is greatest
24149 return Math.max(
24150 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
24151 elem.body[ "offset" + name ], doc[ "offset" + name ],
24152 doc[ "client" + name ]
24153 );
24154 }
24155
24156 return value === undefined ?
24157
24158 // Get width or height on the element, requesting but not forcing parseFloat
24159 jQuery.css( elem, type, extra ) :
24160
24161 // Set width or height on the element
24162 jQuery.style( elem, type, value, extra );
24163 }, type, chainable ? margin : undefined, chainable );
24164 };
24165 } );
24166 } );
24167
24168
24169 jQuery.fn.extend( {
24170
24171 bind: function( types, data, fn ) {
24172 return this.on( types, null, data, fn );
24173 },
24174 unbind: function( types, fn ) {
24175 return this.off( types, null, fn );
24176 },
24177
24178 delegate: function( selector, types, data, fn ) {
24179 return this.on( types, selector, data, fn );
24180 },
24181 undelegate: function( selector, types, fn ) {
24182
24183 // ( namespace ) or ( selector, types [, fn] )
24184 return arguments.length === 1 ?
24185 this.off( selector, "**" ) :
24186 this.off( types, selector || "**", fn );
24187 }
24188 } );
24189
24190 jQuery.holdReady = function( hold ) {
24191 if ( hold ) {
24192 jQuery.readyWait++;
24193 } else {
24194 jQuery.ready( true );
24195 }
24196 };
24197 jQuery.isArray = Array.isArray;
24198 jQuery.parseJSON = JSON.parse;
24199 jQuery.nodeName = nodeName;
24200
24201
24202
24203
24204 // Register as a named AMD module, since jQuery can be concatenated with other
24205 // files that may use define, but not via a proper concatenation script that
24206 // understands anonymous AMD modules. A named AMD is safest and most robust
24207 // way to register. Lowercase jquery is used because AMD module names are
24208 // derived from file names, and jQuery is normally delivered in a lowercase
24209 // file name. Do this after creating the global so that if an AMD module wants
24210 // to call noConflict to hide this version of jQuery, it will work.
24211
24212 // Note that for maximum portability, libraries that are not jQuery should
24213 // declare themselves as anonymous modules, and avoid setting a global if an
24214 // AMD loader is present. jQuery is a special case. For more information, see
24215 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
24216
24217 if ( typeof define === "function" && define.amd ) {
24218 define( "jquery", [], function() {
24219 return jQuery;
24220 } );
24221 }
24222
24223
24224
24225
24226 var
24227
24228 // Map over jQuery in case of overwrite
24229 _jQuery = window.jQuery,
24230
24231 // Map over the $ in case of overwrite
24232 _$ = window.$;
24233
24234 jQuery.noConflict = function( deep ) {
24235 if ( window.$ === jQuery ) {
24236 window.$ = _$;
24237 }
24238
24239 if ( deep && window.jQuery === jQuery ) {
24240 window.jQuery = _jQuery;
24241 }
24242
24243 return jQuery;
24244 };
24245
24246 // Expose jQuery and $ identifiers, even in AMD
24247 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
24248 // and CommonJS for browser emulators (#13566)
24249 if ( !noGlobal ) {
24250 window.jQuery = window.$ = jQuery;
24251 }
24252
24253
24254
24255
24256 return jQuery;
24257 } );
24258 </script>
24259 <script>/*!
24260 * Bootstrap v3.3.7 (http://getbootstrap.com)
24261 * Copyright 2011-2016 Twitter, Inc.
24262 * Licensed under the MIT license
24263 */
24264
24265 if (typeof jQuery === 'undefined') {
24266 throw new Error('Bootstrap\'s JavaScript requires jQuery')
24267 }
24268
24269 +function ($) {
24270 'use strict';
24271 var version = $.fn.jquery.split(' ')[0].split('.')
24272 if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
24273 throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
24274 }
24275 }(jQuery);
24276
24277 /* ========================================================================
24278 * Bootstrap: transition.js v3.3.7
24279 * http://getbootstrap.com/javascript/#transitions
24280 * ========================================================================
24281 * Copyright 2011-2016 Twitter, Inc.
24282 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24283 * ======================================================================== */
24284
24285
24286 +function ($) {
24287 'use strict';
24288
24289 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
24290 // ============================================================
24291
24292 function transitionEnd() {
24293 var el = document.createElement('bootstrap')
24294
24295 var transEndEventNames = {
24296 WebkitTransition : 'webkitTransitionEnd',
24297 MozTransition : 'transitionend',
24298 OTransition : 'oTransitionEnd otransitionend',
24299 transition : 'transitionend'
24300 }
24301
24302 for (var name in transEndEventNames) {
24303 if (el.style[name] !== undefined) {
24304 return { end: transEndEventNames[name] }
24305 }
24306 }
24307
24308 return false // explicit for ie8 ( ._.)
24309 }
24310
24311 // http://blog.alexmaccaw.com/css-transitions
24312 $.fn.emulateTransitionEnd = function (duration) {
24313 var called = false
24314 var $el = this
24315 $(this).one('bsTransitionEnd', function () { called = true })
24316 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
24317 setTimeout(callback, duration)
24318 return this
24319 }
24320
24321 $(function () {
24322 $.support.transition = transitionEnd()
24323
24324 if (!$.support.transition) return
24325
24326 $.event.special.bsTransitionEnd = {
24327 bindType: $.support.transition.end,
24328 delegateType: $.support.transition.end,
24329 handle: function (e) {
24330 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
24331 }
24332 }
24333 })
24334
24335 }(jQuery);
24336
24337 /* ========================================================================
24338 * Bootstrap: alert.js v3.3.7
24339 * http://getbootstrap.com/javascript/#alerts
24340 * ========================================================================
24341 * Copyright 2011-2016 Twitter, Inc.
24342 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24343 * ======================================================================== */
24344
24345
24346 +function ($) {
24347 'use strict';
24348
24349 // ALERT CLASS DEFINITION
24350 // ======================
24351
24352 var dismiss = '[data-dismiss="alert"]'
24353 var Alert = function (el) {
24354 $(el).on('click', dismiss, this.close)
24355 }
24356
24357 Alert.VERSION = '3.3.7'
24358
24359 Alert.TRANSITION_DURATION = 150
24360
24361 Alert.prototype.close = function (e) {
24362 var $this = $(this)
24363 var selector = $this.attr('data-target')
24364
24365 if (!selector) {
24366 selector = $this.attr('href')
24367 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24368 }
24369
24370 var $parent = $(selector === '#' ? [] : selector)
24371
24372 if (e) e.preventDefault()
24373
24374 if (!$parent.length) {
24375 $parent = $this.closest('.alert')
24376 }
24377
24378 $parent.trigger(e = $.Event('close.bs.alert'))
24379
24380 if (e.isDefaultPrevented()) return
24381
24382 $parent.removeClass('in')
24383
24384 function removeElement() {
24385 // detach from parent, fire event then clean up data
24386 $parent.detach().trigger('closed.bs.alert').remove()
24387 }
24388
24389 $.support.transition && $parent.hasClass('fade') ?
24390 $parent
24391 .one('bsTransitionEnd', removeElement)
24392 .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
24393 removeElement()
24394 }
24395
24396
24397 // ALERT PLUGIN DEFINITION
24398 // =======================
24399
24400 function Plugin(option) {
24401 return this.each(function () {
24402 var $this = $(this)
24403 var data = $this.data('bs.alert')
24404
24405 if (!data) $this.data('bs.alert', (data = new Alert(this)))
24406 if (typeof option == 'string') data[option].call($this)
24407 })
24408 }
24409
24410 var old = $.fn.alert
24411
24412 $.fn.alert = Plugin
24413 $.fn.alert.Constructor = Alert
24414
24415
24416 // ALERT NO CONFLICT
24417 // =================
24418
24419 $.fn.alert.noConflict = function () {
24420 $.fn.alert = old
24421 return this
24422 }
24423
24424
24425 // ALERT DATA-API
24426 // ==============
24427
24428 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
24429
24430 }(jQuery);
24431
24432 /* ========================================================================
24433 * Bootstrap: button.js v3.3.7
24434 * http://getbootstrap.com/javascript/#buttons
24435 * ========================================================================
24436 * Copyright 2011-2016 Twitter, Inc.
24437 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24438 * ======================================================================== */
24439
24440
24441 +function ($) {
24442 'use strict';
24443
24444 // BUTTON PUBLIC CLASS DEFINITION
24445 // ==============================
24446
24447 var Button = function (element, options) {
24448 this.$element = $(element)
24449 this.options = $.extend({}, Button.DEFAULTS, options)
24450 this.isLoading = false
24451 }
24452
24453 Button.VERSION = '3.3.7'
24454
24455 Button.DEFAULTS = {
24456 loadingText: 'loading...'
24457 }
24458
24459 Button.prototype.setState = function (state) {
24460 var d = 'disabled'
24461 var $el = this.$element
24462 var val = $el.is('input') ? 'val' : 'html'
24463 var data = $el.data()
24464
24465 state += 'Text'
24466
24467 if (data.resetText == null) $el.data('resetText', $el[val]())
24468
24469 // push to event loop to allow forms to submit
24470 setTimeout($.proxy(function () {
24471 $el[val](data[state] == null ? this.options[state] : data[state])
24472
24473 if (state == 'loadingText') {
24474 this.isLoading = true
24475 $el.addClass(d).attr(d, d).prop(d, true)
24476 } else if (this.isLoading) {
24477 this.isLoading = false
24478 $el.removeClass(d).removeAttr(d).prop(d, false)
24479 }
24480 }, this), 0)
24481 }
24482
24483 Button.prototype.toggle = function () {
24484 var changed = true
24485 var $parent = this.$element.closest('[data-toggle="buttons"]')
24486
24487 if ($parent.length) {
24488 var $input = this.$element.find('input')
24489 if ($input.prop('type') == 'radio') {
24490 if ($input.prop('checked')) changed = false
24491 $parent.find('.active').removeClass('active')
24492 this.$element.addClass('active')
24493 } else if ($input.prop('type') == 'checkbox') {
24494 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
24495 this.$element.toggleClass('active')
24496 }
24497 $input.prop('checked', this.$element.hasClass('active'))
24498 if (changed) $input.trigger('change')
24499 } else {
24500 this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
24501 this.$element.toggleClass('active')
24502 }
24503 }
24504
24505
24506 // BUTTON PLUGIN DEFINITION
24507 // ========================
24508
24509 function Plugin(option) {
24510 return this.each(function () {
24511 var $this = $(this)
24512 var data = $this.data('bs.button')
24513 var options = typeof option == 'object' && option
24514
24515 if (!data) $this.data('bs.button', (data = new Button(this, options)))
24516
24517 if (option == 'toggle') data.toggle()
24518 else if (option) data.setState(option)
24519 })
24520 }
24521
24522 var old = $.fn.button
24523
24524 $.fn.button = Plugin
24525 $.fn.button.Constructor = Button
24526
24527
24528 // BUTTON NO CONFLICT
24529 // ==================
24530
24531 $.fn.button.noConflict = function () {
24532 $.fn.button = old
24533 return this
24534 }
24535
24536
24537 // BUTTON DATA-API
24538 // ===============
24539
24540 $(document)
24541 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24542 var $btn = $(e.target).closest('.btn')
24543 Plugin.call($btn, 'toggle')
24544 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
24545 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
24546 e.preventDefault()
24547 // The target component still receive the focus
24548 if ($btn.is('input,button')) $btn.trigger('focus')
24549 else $btn.find('input:visible,button:visible').first().trigger('focus')
24550 }
24551 })
24552 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24553 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
24554 })
24555
24556 }(jQuery);
24557
24558 /* ========================================================================
24559 * Bootstrap: carousel.js v3.3.7
24560 * http://getbootstrap.com/javascript/#carousel
24561 * ========================================================================
24562 * Copyright 2011-2016 Twitter, Inc.
24563 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24564 * ======================================================================== */
24565
24566
24567 +function ($) {
24568 'use strict';
24569
24570 // CAROUSEL CLASS DEFINITION
24571 // =========================
24572
24573 var Carousel = function (element, options) {
24574 this.$element = $(element)
24575 this.$indicators = this.$element.find('.carousel-indicators')
24576 this.options = options
24577 this.paused = null
24578 this.sliding = null
24579 this.interval = null
24580 this.$active = null
24581 this.$items = null
24582
24583 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
24584
24585 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
24586 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
24587 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
24588 }
24589
24590 Carousel.VERSION = '3.3.7'
24591
24592 Carousel.TRANSITION_DURATION = 600
24593
24594 Carousel.DEFAULTS = {
24595 interval: 5000,
24596 pause: 'hover',
24597 wrap: true,
24598 keyboard: true
24599 }
24600
24601 Carousel.prototype.keydown = function (e) {
24602 if (/input|textarea/i.test(e.target.tagName)) return
24603 switch (e.which) {
24604 case 37: this.prev(); break
24605 case 39: this.next(); break
24606 default: return
24607 }
24608
24609 e.preventDefault()
24610 }
24611
24612 Carousel.prototype.cycle = function (e) {
24613 e || (this.paused = false)
24614
24615 this.interval && clearInterval(this.interval)
24616
24617 this.options.interval
24618 && !this.paused
24619 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
24620
24621 return this
24622 }
24623
24624 Carousel.prototype.getItemIndex = function (item) {
24625 this.$items = item.parent().children('.item')
24626 return this.$items.index(item || this.$active)
24627 }
24628
24629 Carousel.prototype.getItemForDirection = function (direction, active) {
24630 var activeIndex = this.getItemIndex(active)
24631 var willWrap = (direction == 'prev' && activeIndex === 0)
24632 || (direction == 'next' && activeIndex == (this.$items.length - 1))
24633 if (willWrap && !this.options.wrap) return active
24634 var delta = direction == 'prev' ? -1 : 1
24635 var itemIndex = (activeIndex + delta) % this.$items.length
24636 return this.$items.eq(itemIndex)
24637 }
24638
24639 Carousel.prototype.to = function (pos) {
24640 var that = this
24641 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
24642
24643 if (pos > (this.$items.length - 1) || pos < 0) return
24644
24645 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
24646 if (activeIndex == pos) return this.pause().cycle()
24647
24648 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
24649 }
24650
24651 Carousel.prototype.pause = function (e) {
24652 e || (this.paused = true)
24653
24654 if (this.$element.find('.next, .prev').length && $.support.transition) {
24655 this.$element.trigger($.support.transition.end)
24656 this.cycle(true)
24657 }
24658
24659 this.interval = clearInterval(this.interval)
24660
24661 return this
24662 }
24663
24664 Carousel.prototype.next = function () {
24665 if (this.sliding) return
24666 return this.slide('next')
24667 }
24668
24669 Carousel.prototype.prev = function () {
24670 if (this.sliding) return
24671 return this.slide('prev')
24672 }
24673
24674 Carousel.prototype.slide = function (type, next) {
24675 var $active = this.$element.find('.item.active')
24676 var $next = next || this.getItemForDirection(type, $active)
24677 var isCycling = this.interval
24678 var direction = type == 'next' ? 'left' : 'right'
24679 var that = this
24680
24681 if ($next.hasClass('active')) return (this.sliding = false)
24682
24683 var relatedTarget = $next[0]
24684 var slideEvent = $.Event('slide.bs.carousel', {
24685 relatedTarget: relatedTarget,
24686 direction: direction
24687 })
24688 this.$element.trigger(slideEvent)
24689 if (slideEvent.isDefaultPrevented()) return
24690
24691 this.sliding = true
24692
24693 isCycling && this.pause()
24694
24695 if (this.$indicators.length) {
24696 this.$indicators.find('.active').removeClass('active')
24697 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
24698 $nextIndicator && $nextIndicator.addClass('active')
24699 }
24700
24701 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
24702 if ($.support.transition && this.$element.hasClass('slide')) {
24703 $next.addClass(type)
24704 $next[0].offsetWidth // force reflow
24705 $active.addClass(direction)
24706 $next.addClass(direction)
24707 $active
24708 .one('bsTransitionEnd', function () {
24709 $next.removeClass([type, direction].join(' ')).addClass('active')
24710 $active.removeClass(['active', direction].join(' '))
24711 that.sliding = false
24712 setTimeout(function () {
24713 that.$element.trigger(slidEvent)
24714 }, 0)
24715 })
24716 .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
24717 } else {
24718 $active.removeClass('active')
24719 $next.addClass('active')
24720 this.sliding = false
24721 this.$element.trigger(slidEvent)
24722 }
24723
24724 isCycling && this.cycle()
24725
24726 return this
24727 }
24728
24729
24730 // CAROUSEL PLUGIN DEFINITION
24731 // ==========================
24732
24733 function Plugin(option) {
24734 return this.each(function () {
24735 var $this = $(this)
24736 var data = $this.data('bs.carousel')
24737 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
24738 var action = typeof option == 'string' ? option : options.slide
24739
24740 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
24741 if (typeof option == 'number') data.to(option)
24742 else if (action) data[action]()
24743 else if (options.interval) data.pause().cycle()
24744 })
24745 }
24746
24747 var old = $.fn.carousel
24748
24749 $.fn.carousel = Plugin
24750 $.fn.carousel.Constructor = Carousel
24751
24752
24753 // CAROUSEL NO CONFLICT
24754 // ====================
24755
24756 $.fn.carousel.noConflict = function () {
24757 $.fn.carousel = old
24758 return this
24759 }
24760
24761
24762 // CAROUSEL DATA-API
24763 // =================
24764
24765 var clickHandler = function (e) {
24766 var href
24767 var $this = $(this)
24768 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
24769 if (!$target.hasClass('carousel')) return
24770 var options = $.extend({}, $target.data(), $this.data())
24771 var slideIndex = $this.attr('data-slide-to')
24772 if (slideIndex) options.interval = false
24773
24774 Plugin.call($target, options)
24775
24776 if (slideIndex) {
24777 $target.data('bs.carousel').to(slideIndex)
24778 }
24779
24780 e.preventDefault()
24781 }
24782
24783 $(document)
24784 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
24785 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
24786
24787 $(window).on('load', function () {
24788 $('[data-ride="carousel"]').each(function () {
24789 var $carousel = $(this)
24790 Plugin.call($carousel, $carousel.data())
24791 })
24792 })
24793
24794 }(jQuery);
24795
24796 /* ========================================================================
24797 * Bootstrap: collapse.js v3.3.7
24798 * http://getbootstrap.com/javascript/#collapse
24799 * ========================================================================
24800 * Copyright 2011-2016 Twitter, Inc.
24801 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24802 * ======================================================================== */
24803
24804 /* jshint latedef: false */
24805
24806 +function ($) {
24807 'use strict';
24808
24809 // COLLAPSE PUBLIC CLASS DEFINITION
24810 // ================================
24811
24812 var Collapse = function (element, options) {
24813 this.$element = $(element)
24814 this.options = $.extend({}, Collapse.DEFAULTS, options)
24815 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
24816 '[data-toggle="collapse"][data-target="#' + element.id + '"]')
24817 this.transitioning = null
24818
24819 if (this.options.parent) {
24820 this.$parent = this.getParent()
24821 } else {
24822 this.addAriaAndCollapsedClass(this.$element, this.$trigger)
24823 }
24824
24825 if (this.options.toggle) this.toggle()
24826 }
24827
24828 Collapse.VERSION = '3.3.7'
24829
24830 Collapse.TRANSITION_DURATION = 350
24831
24832 Collapse.DEFAULTS = {
24833 toggle: true
24834 }
24835
24836 Collapse.prototype.dimension = function () {
24837 var hasWidth = this.$element.hasClass('width')
24838 return hasWidth ? 'width' : 'height'
24839 }
24840
24841 Collapse.prototype.show = function () {
24842 if (this.transitioning || this.$element.hasClass('in')) return
24843
24844 var activesData
24845 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
24846
24847 if (actives && actives.length) {
24848 activesData = actives.data('bs.collapse')
24849 if (activesData && activesData.transitioning) return
24850 }
24851
24852 var startEvent = $.Event('show.bs.collapse')
24853 this.$element.trigger(startEvent)
24854 if (startEvent.isDefaultPrevented()) return
24855
24856 if (actives && actives.length) {
24857 Plugin.call(actives, 'hide')
24858 activesData || actives.data('bs.collapse', null)
24859 }
24860
24861 var dimension = this.dimension()
24862
24863 this.$element
24864 .removeClass('collapse')
24865 .addClass('collapsing')[dimension](0)
24866 .attr('aria-expanded', true)
24867
24868 this.$trigger
24869 .removeClass('collapsed')
24870 .attr('aria-expanded', true)
24871
24872 this.transitioning = 1
24873
24874 var complete = function () {
24875 this.$element
24876 .removeClass('collapsing')
24877 .addClass('collapse in')[dimension]('')
24878 this.transitioning = 0
24879 this.$element
24880 .trigger('shown.bs.collapse')
24881 }
24882
24883 if (!$.support.transition) return complete.call(this)
24884
24885 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
24886
24887 this.$element
24888 .one('bsTransitionEnd', $.proxy(complete, this))
24889 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
24890 }
24891
24892 Collapse.prototype.hide = function () {
24893 if (this.transitioning || !this.$element.hasClass('in')) return
24894
24895 var startEvent = $.Event('hide.bs.collapse')
24896 this.$element.trigger(startEvent)
24897 if (startEvent.isDefaultPrevented()) return
24898
24899 var dimension = this.dimension()
24900
24901 this.$element[dimension](this.$element[dimension]())[0].offsetHeight
24902
24903 this.$element
24904 .addClass('collapsing')
24905 .removeClass('collapse in')
24906 .attr('aria-expanded', false)
24907
24908 this.$trigger
24909 .addClass('collapsed')
24910 .attr('aria-expanded', false)
24911
24912 this.transitioning = 1
24913
24914 var complete = function () {
24915 this.transitioning = 0
24916 this.$element
24917 .removeClass('collapsing')
24918 .addClass('collapse')
24919 .trigger('hidden.bs.collapse')
24920 }
24921
24922 if (!$.support.transition) return complete.call(this)
24923
24924 this.$element
24925 [dimension](0)
24926 .one('bsTransitionEnd', $.proxy(complete, this))
24927 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
24928 }
24929
24930 Collapse.prototype.toggle = function () {
24931 this[this.$element.hasClass('in') ? 'hide' : 'show']()
24932 }
24933
24934 Collapse.prototype.getParent = function () {
24935 return $(this.options.parent)
24936 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
24937 .each($.proxy(function (i, element) {
24938 var $element = $(element)
24939 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
24940 }, this))
24941 .end()
24942 }
24943
24944 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
24945 var isOpen = $element.hasClass('in')
24946
24947 $element.attr('aria-expanded', isOpen)
24948 $trigger
24949 .toggleClass('collapsed', !isOpen)
24950 .attr('aria-expanded', isOpen)
24951 }
24952
24953 function getTargetFromTrigger($trigger) {
24954 var href
24955 var target = $trigger.attr('data-target')
24956 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
24957
24958 return $(target)
24959 }
24960
24961
24962 // COLLAPSE PLUGIN DEFINITION
24963 // ==========================
24964
24965 function Plugin(option) {
24966 return this.each(function () {
24967 var $this = $(this)
24968 var data = $this.data('bs.collapse')
24969 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
24970
24971 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
24972 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
24973 if (typeof option == 'string') data[option]()
24974 })
24975 }
24976
24977 var old = $.fn.collapse
24978
24979 $.fn.collapse = Plugin
24980 $.fn.collapse.Constructor = Collapse
24981
24982
24983 // COLLAPSE NO CONFLICT
24984 // ====================
24985
24986 $.fn.collapse.noConflict = function () {
24987 $.fn.collapse = old
24988 return this
24989 }
24990
24991
24992 // COLLAPSE DATA-API
24993 // =================
24994
24995 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
24996 var $this = $(this)
24997
24998 if (!$this.attr('data-target')) e.preventDefault()
24999
25000 var $target = getTargetFromTrigger($this)
25001 var data = $target.data('bs.collapse')
25002 var option = data ? 'toggle' : $this.data()
25003
25004 Plugin.call($target, option)
25005 })
25006
25007 }(jQuery);
25008
25009 /* ========================================================================
25010 * Bootstrap: dropdown.js v3.3.7
25011 * http://getbootstrap.com/javascript/#dropdowns
25012 * ========================================================================
25013 * Copyright 2011-2016 Twitter, Inc.
25014 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25015 * ======================================================================== */
25016
25017
25018 +function ($) {
25019 'use strict';
25020
25021 // DROPDOWN CLASS DEFINITION
25022 // =========================
25023
25024 var backdrop = '.dropdown-backdrop'
25025 var toggle = '[data-toggle="dropdown"]'
25026 var Dropdown = function (element) {
25027 $(element).on('click.bs.dropdown', this.toggle)
25028 }
25029
25030 Dropdown.VERSION = '3.3.7'
25031
25032 function getParent($this) {
25033 var selector = $this.attr('data-target')
25034
25035 if (!selector) {
25036 selector = $this.attr('href')
25037 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
25038 }
25039
25040 var $parent = selector && $(selector)
25041
25042 return $parent && $parent.length ? $parent : $this.parent()
25043 }
25044
25045 function clearMenus(e) {
25046 if (e && e.which === 3) return
25047 $(backdrop).remove()
25048 $(toggle).each(function () {
25049 var $this = $(this)
25050 var $parent = getParent($this)
25051 var relatedTarget = { relatedTarget: this }
25052
25053 if (!$parent.hasClass('open')) return
25054
25055 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
25056
25057 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
25058
25059 if (e.isDefaultPrevented()) return
25060
25061 $this.attr('aria-expanded', 'false')
25062 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
25063 })
25064 }
25065
25066 Dropdown.prototype.toggle = function (e) {
25067 var $this = $(this)
25068
25069 if ($this.is('.disabled, :disabled')) return
25070
25071 var $parent = getParent($this)
25072 var isActive = $parent.hasClass('open')
25073
25074 clearMenus()
25075
25076 if (!isActive) {
25077 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
25078 // if mobile we use a backdrop because click events don't delegate
25079 $(document.createElement('div'))
25080 .addClass('dropdown-backdrop')
25081 .insertAfter($(this))
25082 .on('click', clearMenus)
25083 }
25084
25085 var relatedTarget = { relatedTarget: this }
25086 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
25087
25088 if (e.isDefaultPrevented()) return
25089
25090 $this
25091 .trigger('focus')
25092 .attr('aria-expanded', 'true')
25093
25094 $parent
25095 .toggleClass('open')
25096 .trigger($.Event('shown.bs.dropdown', relatedTarget))
25097 }
25098
25099 return false
25100 }
25101
25102 Dropdown.prototype.keydown = function (e) {
25103 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
25104
25105 var $this = $(this)
25106
25107 e.preventDefault()
25108 e.stopPropagation()
25109
25110 if ($this.is('.disabled, :disabled')) return
25111
25112 var $parent = getParent($this)
25113 var isActive = $parent.hasClass('open')
25114
25115 if (!isActive && e.which != 27 || isActive && e.which == 27) {
25116 if (e.which == 27) $parent.find(toggle).trigger('focus')
25117 return $this.trigger('click')
25118 }
25119
25120 var desc = ' li:not(.disabled):visible a'
25121 var $items = $parent.find('.dropdown-menu' + desc)
25122
25123 if (!$items.length) return
25124
25125 var index = $items.index(e.target)
25126
25127 if (e.which == 38 && index > 0) index-- // up
25128 if (e.which == 40 && index < $items.length - 1) index++ // down
25129 if (!~index) index = 0
25130
25131 $items.eq(index).trigger('focus')
25132 }
25133
25134
25135 // DROPDOWN PLUGIN DEFINITION
25136 // ==========================
25137
25138 function Plugin(option) {
25139 return this.each(function () {
25140 var $this = $(this)
25141 var data = $this.data('bs.dropdown')
25142
25143 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
25144 if (typeof option == 'string') data[option].call($this)
25145 })
25146 }
25147
25148 var old = $.fn.dropdown
25149
25150 $.fn.dropdown = Plugin
25151 $.fn.dropdown.Constructor = Dropdown
25152
25153
25154 // DROPDOWN NO CONFLICT
25155 // ====================
25156
25157 $.fn.dropdown.noConflict = function () {
25158 $.fn.dropdown = old
25159 return this
25160 }
25161
25162
25163 // APPLY TO STANDARD DROPDOWN ELEMENTS
25164 // ===================================
25165
25166 $(document)
25167 .on('click.bs.dropdown.data-api', clearMenus)
25168 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
25169 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
25170 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
25171 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
25172
25173 }(jQuery);
25174
25175 /* ========================================================================
25176 * Bootstrap: modal.js v3.3.7
25177 * http://getbootstrap.com/javascript/#modals
25178 * ========================================================================
25179 * Copyright 2011-2016 Twitter, Inc.
25180 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25181 * ======================================================================== */
25182
25183
25184 +function ($) {
25185 'use strict';
25186
25187 // MODAL CLASS DEFINITION
25188 // ======================
25189
25190 var Modal = function (element, options) {
25191 this.options = options
25192 this.$body = $(document.body)
25193 this.$element = $(element)
25194 this.$dialog = this.$element.find('.modal-dialog')
25195 this.$backdrop = null
25196 this.isShown = null
25197 this.originalBodyPad = null
25198 this.scrollbarWidth = 0
25199 this.ignoreBackdropClick = false
25200
25201 if (this.options.remote) {
25202 this.$element
25203 .find('.modal-content')
25204 .load(this.options.remote, $.proxy(function () {
25205 this.$element.trigger('loaded.bs.modal')
25206 }, this))
25207 }
25208 }
25209
25210 Modal.VERSION = '3.3.7'
25211
25212 Modal.TRANSITION_DURATION = 300
25213 Modal.BACKDROP_TRANSITION_DURATION = 150
25214
25215 Modal.DEFAULTS = {
25216 backdrop: true,
25217 keyboard: true,
25218 show: true
25219 }
25220
25221 Modal.prototype.toggle = function (_relatedTarget) {
25222 return this.isShown ? this.hide() : this.show(_relatedTarget)
25223 }
25224
25225 Modal.prototype.show = function (_relatedTarget) {
25226 var that = this
25227 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
25228
25229 this.$element.trigger(e)
25230
25231 if (this.isShown || e.isDefaultPrevented()) return
25232
25233 this.isShown = true
25234
25235 this.checkScrollbar()
25236 this.setScrollbar()
25237 this.$body.addClass('modal-open')
25238
25239 this.escape()
25240 this.resize()
25241
25242 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
25243
25244 this.$dialog.on('mousedown.dismiss.bs.modal', function () {
25245 that.$element.one('mouseup.dismiss.bs.modal', function (e) {
25246 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
25247 })
25248 })
25249
25250 this.backdrop(function () {
25251 var transition = $.support.transition && that.$element.hasClass('fade')
25252
25253 if (!that.$element.parent().length) {
25254 that.$element.appendTo(that.$body) // don't move modals dom position
25255 }
25256
25257 that.$element
25258 .show()
25259 .scrollTop(0)
25260
25261 that.adjustDialog()
25262
25263 if (transition) {
25264 that.$element[0].offsetWidth // force reflow
25265 }
25266
25267 that.$element.addClass('in')
25268
25269 that.enforceFocus()
25270
25271 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
25272
25273 transition ?
25274 that.$dialog // wait for modal to slide in
25275 .one('bsTransitionEnd', function () {
25276 that.$element.trigger('focus').trigger(e)
25277 })
25278 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25279 that.$element.trigger('focus').trigger(e)
25280 })
25281 }
25282
25283 Modal.prototype.hide = function (e) {
25284 if (e) e.preventDefault()
25285
25286 e = $.Event('hide.bs.modal')
25287
25288 this.$element.trigger(e)
25289
25290 if (!this.isShown || e.isDefaultPrevented()) return
25291
25292 this.isShown = false
25293
25294 this.escape()
25295 this.resize()
25296
25297 $(document).off('focusin.bs.modal')
25298
25299 this.$element
25300 .removeClass('in')
25301 .off('click.dismiss.bs.modal')
25302 .off('mouseup.dismiss.bs.modal')
25303
25304 this.$dialog.off('mousedown.dismiss.bs.modal')
25305
25306 $.support.transition && this.$element.hasClass('fade') ?
25307 this.$element
25308 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
25309 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25310 this.hideModal()
25311 }
25312
25313 Modal.prototype.enforceFocus = function () {
25314 $(document)
25315 .off('focusin.bs.modal') // guard against infinite focus loop
25316 .on('focusin.bs.modal', $.proxy(function (e) {
25317 if (document !== e.target &&
25318 this.$element[0] !== e.target &&
25319 !this.$element.has(e.target).length) {
25320 this.$element.trigger('focus')
25321 }
25322 }, this))
25323 }
25324
25325 Modal.prototype.escape = function () {
25326 if (this.isShown && this.options.keyboard) {
25327 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
25328 e.which == 27 && this.hide()
25329 }, this))
25330 } else if (!this.isShown) {
25331 this.$element.off('keydown.dismiss.bs.modal')
25332 }
25333 }
25334
25335 Modal.prototype.resize = function () {
25336 if (this.isShown) {
25337 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
25338 } else {
25339 $(window).off('resize.bs.modal')
25340 }
25341 }
25342
25343 Modal.prototype.hideModal = function () {
25344 var that = this
25345 this.$element.hide()
25346 this.backdrop(function () {
25347 that.$body.removeClass('modal-open')
25348 that.resetAdjustments()
25349 that.resetScrollbar()
25350 that.$element.trigger('hidden.bs.modal')
25351 })
25352 }
25353
25354 Modal.prototype.removeBackdrop = function () {
25355 this.$backdrop && this.$backdrop.remove()
25356 this.$backdrop = null
25357 }
25358
25359 Modal.prototype.backdrop = function (callback) {
25360 var that = this
25361 var animate = this.$element.hasClass('fade') ? 'fade' : ''
25362
25363 if (this.isShown && this.options.backdrop) {
25364 var doAnimate = $.support.transition && animate
25365
25366 this.$backdrop = $(document.createElement('div'))
25367 .addClass('modal-backdrop ' + animate)
25368 .appendTo(this.$body)
25369
25370 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
25371 if (this.ignoreBackdropClick) {
25372 this.ignoreBackdropClick = false
25373 return
25374 }
25375 if (e.target !== e.currentTarget) return
25376 this.options.backdrop == 'static'
25377 ? this.$element[0].focus()
25378 : this.hide()
25379 }, this))
25380
25381 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
25382
25383 this.$backdrop.addClass('in')
25384
25385 if (!callback) return
25386
25387 doAnimate ?
25388 this.$backdrop
25389 .one('bsTransitionEnd', callback)
25390 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25391 callback()
25392
25393 } else if (!this.isShown && this.$backdrop) {
25394 this.$backdrop.removeClass('in')
25395
25396 var callbackRemove = function () {
25397 that.removeBackdrop()
25398 callback && callback()
25399 }
25400 $.support.transition && this.$element.hasClass('fade') ?
25401 this.$backdrop
25402 .one('bsTransitionEnd', callbackRemove)
25403 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25404 callbackRemove()
25405
25406 } else if (callback) {
25407 callback()
25408 }
25409 }
25410
25411 // these following methods are used to handle overflowing modals
25412
25413 Modal.prototype.handleUpdate = function () {
25414 this.adjustDialog()
25415 }
25416
25417 Modal.prototype.adjustDialog = function () {
25418 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
25419
25420 this.$element.css({
25421 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
25422 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
25423 })
25424 }
25425
25426 Modal.prototype.resetAdjustments = function () {
25427 this.$element.css({
25428 paddingLeft: '',
25429 paddingRight: ''
25430 })
25431 }
25432
25433 Modal.prototype.checkScrollbar = function () {
25434 var fullWindowWidth = window.innerWidth
25435 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
25436 var documentElementRect = document.documentElement.getBoundingClientRect()
25437 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
25438 }
25439 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
25440 this.scrollbarWidth = this.measureScrollbar()
25441 }
25442
25443 Modal.prototype.setScrollbar = function () {
25444 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
25445 this.originalBodyPad = document.body.style.paddingRight || ''
25446 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
25447 }
25448
25449 Modal.prototype.resetScrollbar = function () {
25450 this.$body.css('padding-right', this.originalBodyPad)
25451 }
25452
25453 Modal.prototype.measureScrollbar = function () { // thx walsh
25454 var scrollDiv = document.createElement('div')
25455 scrollDiv.className = 'modal-scrollbar-measure'
25456 this.$body.append(scrollDiv)
25457 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
25458 this.$body[0].removeChild(scrollDiv)
25459 return scrollbarWidth
25460 }
25461
25462
25463 // MODAL PLUGIN DEFINITION
25464 // =======================
25465
25466 function Plugin(option, _relatedTarget) {
25467 return this.each(function () {
25468 var $this = $(this)
25469 var data = $this.data('bs.modal')
25470 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
25471
25472 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
25473 if (typeof option == 'string') data[option](_relatedTarget)
25474 else if (options.show) data.show(_relatedTarget)
25475 })
25476 }
25477
25478 var old = $.fn.modal
25479
25480 $.fn.modal = Plugin
25481 $.fn.modal.Constructor = Modal
25482
25483
25484 // MODAL NO CONFLICT
25485 // =================
25486
25487 $.fn.modal.noConflict = function () {
25488 $.fn.modal = old
25489 return this
25490 }
25491
25492
25493 // MODAL DATA-API
25494 // ==============
25495
25496 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
25497 var $this = $(this)
25498 var href = $this.attr('href')
25499 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
25500 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
25501
25502 if ($this.is('a')) e.preventDefault()
25503
25504 $target.one('show.bs.modal', function (showEvent) {
25505 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
25506 $target.one('hidden.bs.modal', function () {
25507 $this.is(':visible') && $this.trigger('focus')
25508 })
25509 })
25510 Plugin.call($target, option, this)
25511 })
25512
25513 }(jQuery);
25514
25515 /* ========================================================================
25516 * Bootstrap: tooltip.js v3.3.7
25517 * http://getbootstrap.com/javascript/#tooltip
25518 * Inspired by the original jQuery.tipsy by Jason Frame
25519 * ========================================================================
25520 * Copyright 2011-2016 Twitter, Inc.
25521 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25522 * ======================================================================== */
25523
25524
25525 +function ($) {
25526 'use strict';
25527
25528 // TOOLTIP PUBLIC CLASS DEFINITION
25529 // ===============================
25530
25531 var Tooltip = function (element, options) {
25532 this.type = null
25533 this.options = null
25534 this.enabled = null
25535 this.timeout = null
25536 this.hoverState = null
25537 this.$element = null
25538 this.inState = null
25539
25540 this.init('tooltip', element, options)
25541 }
25542
25543 Tooltip.VERSION = '3.3.7'
25544
25545 Tooltip.TRANSITION_DURATION = 150
25546
25547 Tooltip.DEFAULTS = {
25548 animation: true,
25549 placement: 'top',
25550 selector: false,
25551 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
25552 trigger: 'hover focus',
25553 title: '',
25554 delay: 0,
25555 html: false,
25556 container: false,
25557 viewport: {
25558 selector: 'body',
25559 padding: 0
25560 }
25561 }
25562
25563 Tooltip.prototype.init = function (type, element, options) {
25564 this.enabled = true
25565 this.type = type
25566 this.$element = $(element)
25567 this.options = this.getOptions(options)
25568 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
25569 this.inState = { click: false, hover: false, focus: false }
25570
25571 if (this.$element[0] instanceof document.constructor && !this.options.selector) {
25572 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
25573 }
25574
25575 var triggers = this.options.trigger.split(' ')
25576
25577 for (var i = triggers.length; i--;) {
25578 var trigger = triggers[i]
25579
25580 if (trigger == 'click') {
25581 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
25582 } else if (trigger != 'manual') {
25583 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
25584 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
25585
25586 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
25587 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
25588 }
25589 }
25590
25591 this.options.selector ?
25592 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
25593 this.fixTitle()
25594 }
25595
25596 Tooltip.prototype.getDefaults = function () {
25597 return Tooltip.DEFAULTS
25598 }
25599
25600 Tooltip.prototype.getOptions = function (options) {
25601 options = $.extend({}, this.getDefaults(), this.$element.data(), options)
25602
25603 if (options.delay && typeof options.delay == 'number') {
25604 options.delay = {
25605 show: options.delay,
25606 hide: options.delay
25607 }
25608 }
25609
25610 return options
25611 }
25612
25613 Tooltip.prototype.getDelegateOptions = function () {
25614 var options = {}
25615 var defaults = this.getDefaults()
25616
25617 this._options && $.each(this._options, function (key, value) {
25618 if (defaults[key] != value) options[key] = value
25619 })
25620
25621 return options
25622 }
25623
25624 Tooltip.prototype.enter = function (obj) {
25625 var self = obj instanceof this.constructor ?
25626 obj : $(obj.currentTarget).data('bs.' + this.type)
25627
25628 if (!self) {
25629 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25630 $(obj.currentTarget).data('bs.' + this.type, self)
25631 }
25632
25633 if (obj instanceof $.Event) {
25634 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
25635 }
25636
25637 if (self.tip().hasClass('in') || self.hoverState == 'in') {
25638 self.hoverState = 'in'
25639 return
25640 }
25641
25642 clearTimeout(self.timeout)
25643
25644 self.hoverState = 'in'
25645
25646 if (!self.options.delay || !self.options.delay.show) return self.show()
25647
25648 self.timeout = setTimeout(function () {
25649 if (self.hoverState == 'in') self.show()
25650 }, self.options.delay.show)
25651 }
25652
25653 Tooltip.prototype.isInStateTrue = function () {
25654 for (var key in this.inState) {
25655 if (this.inState[key]) return true
25656 }
25657
25658 return false
25659 }
25660
25661 Tooltip.prototype.leave = function (obj) {
25662 var self = obj instanceof this.constructor ?
25663 obj : $(obj.currentTarget).data('bs.' + this.type)
25664
25665 if (!self) {
25666 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25667 $(obj.currentTarget).data('bs.' + this.type, self)
25668 }
25669
25670 if (obj instanceof $.Event) {
25671 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
25672 }
25673
25674 if (self.isInStateTrue()) return
25675
25676 clearTimeout(self.timeout)
25677
25678 self.hoverState = 'out'
25679
25680 if (!self.options.delay || !self.options.delay.hide) return self.hide()
25681
25682 self.timeout = setTimeout(function () {
25683 if (self.hoverState == 'out') self.hide()
25684 }, self.options.delay.hide)
25685 }
25686
25687 Tooltip.prototype.show = function () {
25688 var e = $.Event('show.bs.' + this.type)
25689
25690 if (this.hasContent() && this.enabled) {
25691 this.$element.trigger(e)
25692
25693 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
25694 if (e.isDefaultPrevented() || !inDom) return
25695 var that = this
25696
25697 var $tip = this.tip()
25698
25699 var tipId = this.getUID(this.type)
25700
25701 this.setContent()
25702 $tip.attr('id', tipId)
25703 this.$element.attr('aria-describedby', tipId)
25704
25705 if (this.options.animation) $tip.addClass('fade')
25706
25707 var placement = typeof this.options.placement == 'function' ?
25708 this.options.placement.call(this, $tip[0], this.$element[0]) :
25709 this.options.placement
25710
25711 var autoToken = /\s?auto?\s?/i
25712 var autoPlace = autoToken.test(placement)
25713 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
25714
25715 $tip
25716 .detach()
25717 .css({ top: 0, left: 0, display: 'block' })
25718 .addClass(placement)
25719 .data('bs.' + this.type, this)
25720
25721 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
25722 this.$element.trigger('inserted.bs.' + this.type)
25723
25724 var pos = this.getPosition()
25725 var actualWidth = $tip[0].offsetWidth
25726 var actualHeight = $tip[0].offsetHeight
25727
25728 if (autoPlace) {
25729 var orgPlacement = placement
25730 var viewportDim = this.getPosition(this.$viewport)
25731
25732 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
25733 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
25734 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
25735 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
25736 placement
25737
25738 $tip
25739 .removeClass(orgPlacement)
25740 .addClass(placement)
25741 }
25742
25743 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
25744
25745 this.applyPlacement(calculatedOffset, placement)
25746
25747 var complete = function () {
25748 var prevHoverState = that.hoverState
25749 that.$element.trigger('shown.bs.' + that.type)
25750 that.hoverState = null
25751
25752 if (prevHoverState == 'out') that.leave(that)
25753 }
25754
25755 $.support.transition && this.$tip.hasClass('fade') ?
25756 $tip
25757 .one('bsTransitionEnd', complete)
25758 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25759 complete()
25760 }
25761 }
25762
25763 Tooltip.prototype.applyPlacement = function (offset, placement) {
25764 var $tip = this.tip()
25765 var width = $tip[0].offsetWidth
25766 var height = $tip[0].offsetHeight
25767
25768 // manually read margins because getBoundingClientRect includes difference
25769 var marginTop = parseInt($tip.css('margin-top'), 10)
25770 var marginLeft = parseInt($tip.css('margin-left'), 10)
25771
25772 // we must check for NaN for ie 8/9
25773 if (isNaN(marginTop)) marginTop = 0
25774 if (isNaN(marginLeft)) marginLeft = 0
25775
25776 offset.top += marginTop
25777 offset.left += marginLeft
25778
25779 // $.fn.offset doesn't round pixel values
25780 // so we use setOffset directly with our own function B-0
25781 $.offset.setOffset($tip[0], $.extend({
25782 using: function (props) {
25783 $tip.css({
25784 top: Math.round(props.top),
25785 left: Math.round(props.left)
25786 })
25787 }
25788 }, offset), 0)
25789
25790 $tip.addClass('in')
25791
25792 // check to see if placing tip in new offset caused the tip to resize itself
25793 var actualWidth = $tip[0].offsetWidth
25794 var actualHeight = $tip[0].offsetHeight
25795
25796 if (placement == 'top' && actualHeight != height) {
25797 offset.top = offset.top + height - actualHeight
25798 }
25799
25800 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
25801
25802 if (delta.left) offset.left += delta.left
25803 else offset.top += delta.top
25804
25805 var isVertical = /top|bottom/.test(placement)
25806 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
25807 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
25808
25809 $tip.offset(offset)
25810 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
25811 }
25812
25813 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
25814 this.arrow()
25815 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
25816 .css(isVertical ? 'top' : 'left', '')
25817 }
25818
25819 Tooltip.prototype.setContent = function () {
25820 var $tip = this.tip()
25821 var title = this.getTitle()
25822
25823 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
25824 $tip.removeClass('fade in top bottom left right')
25825 }
25826
25827 Tooltip.prototype.hide = function (callback) {
25828 var that = this
25829 var $tip = $(this.$tip)
25830 var e = $.Event('hide.bs.' + this.type)
25831
25832 function complete() {
25833 if (that.hoverState != 'in') $tip.detach()
25834 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
25835 that.$element
25836 .removeAttr('aria-describedby')
25837 .trigger('hidden.bs.' + that.type)
25838 }
25839 callback && callback()
25840 }
25841
25842 this.$element.trigger(e)
25843
25844 if (e.isDefaultPrevented()) return
25845
25846 $tip.removeClass('in')
25847
25848 $.support.transition && $tip.hasClass('fade') ?
25849 $tip
25850 .one('bsTransitionEnd', complete)
25851 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25852 complete()
25853
25854 this.hoverState = null
25855
25856 return this
25857 }
25858
25859 Tooltip.prototype.fixTitle = function () {
25860 var $e = this.$element
25861 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
25862 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
25863 }
25864 }
25865
25866 Tooltip.prototype.hasContent = function () {
25867 return this.getTitle()
25868 }
25869
25870 Tooltip.prototype.getPosition = function ($element) {
25871 $element = $element || this.$element
25872
25873 var el = $element[0]
25874 var isBody = el.tagName == 'BODY'
25875
25876 var elRect = el.getBoundingClientRect()
25877 if (elRect.width == null) {
25878 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
25879 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
25880 }
25881 var isSvg = window.SVGElement && el instanceof window.SVGElement
25882 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
25883 // See https://github.com/twbs/bootstrap/issues/20280
25884 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
25885 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
25886 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
25887
25888 return $.extend({}, elRect, scroll, outerDims, elOffset)
25889 }
25890
25891 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
25892 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25893 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25894 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
25895 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
25896
25897 }
25898
25899 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
25900 var delta = { top: 0, left: 0 }
25901 if (!this.$viewport) return delta
25902
25903 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
25904 var viewportDimensions = this.getPosition(this.$viewport)
25905
25906 if (/right|left/.test(placement)) {
25907 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
25908 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
25909 if (topEdgeOffset < viewportDimensions.top) { // top overflow
25910 delta.top = viewportDimensions.top - topEdgeOffset
25911 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
25912 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
25913 }
25914 } else {
25915 var leftEdgeOffset = pos.left - viewportPadding
25916 var rightEdgeOffset = pos.left + viewportPadding + actualWidth
25917 if (leftEdgeOffset < viewportDimensions.left) { // left overflow
25918 delta.left = viewportDimensions.left - leftEdgeOffset
25919 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
25920 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
25921 }
25922 }
25923
25924 return delta
25925 }
25926
25927 Tooltip.prototype.getTitle = function () {
25928 var title
25929 var $e = this.$element
25930 var o = this.options
25931
25932 title = $e.attr('data-original-title')
25933 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
25934
25935 return title
25936 }
25937
25938 Tooltip.prototype.getUID = function (prefix) {
25939 do prefix += ~~(Math.random() * 1000000)
25940 while (document.getElementById(prefix))
25941 return prefix
25942 }
25943
25944 Tooltip.prototype.tip = function () {
25945 if (!this.$tip) {
25946 this.$tip = $(this.options.template)
25947 if (this.$tip.length != 1) {
25948 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
25949 }
25950 }
25951 return this.$tip
25952 }
25953
25954 Tooltip.prototype.arrow = function () {
25955 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
25956 }
25957
25958 Tooltip.prototype.enable = function () {
25959 this.enabled = true
25960 }
25961
25962 Tooltip.prototype.disable = function () {
25963 this.enabled = false
25964 }
25965
25966 Tooltip.prototype.toggleEnabled = function () {
25967 this.enabled = !this.enabled
25968 }
25969
25970 Tooltip.prototype.toggle = function (e) {
25971 var self = this
25972 if (e) {
25973 self = $(e.currentTarget).data('bs.' + this.type)
25974 if (!self) {
25975 self = new this.constructor(e.currentTarget, this.getDelegateOptions())
25976 $(e.currentTarget).data('bs.' + this.type, self)
25977 }
25978 }
25979
25980 if (e) {
25981 self.inState.click = !self.inState.click
25982 if (self.isInStateTrue()) self.enter(self)
25983 else self.leave(self)
25984 } else {
25985 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
25986 }
25987 }
25988
25989 Tooltip.prototype.destroy = function () {
25990 var that = this
25991 clearTimeout(this.timeout)
25992 this.hide(function () {
25993 that.$element.off('.' + that.type).removeData('bs.' + that.type)
25994 if (that.$tip) {
25995 that.$tip.detach()
25996 }
25997 that.$tip = null
25998 that.$arrow = null
25999 that.$viewport = null
26000 that.$element = null
26001 })
26002 }
26003
26004
26005 // TOOLTIP PLUGIN DEFINITION
26006 // =========================
26007
26008 function Plugin(option) {
26009 return this.each(function () {
26010 var $this = $(this)
26011 var data = $this.data('bs.tooltip')
26012 var options = typeof option == 'object' && option
26013
26014 if (!data && /destroy|hide/.test(option)) return
26015 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
26016 if (typeof option == 'string') data[option]()
26017 })
26018 }
26019
26020 var old = $.fn.tooltip
26021
26022 $.fn.tooltip = Plugin
26023 $.fn.tooltip.Constructor = Tooltip
26024
26025
26026 // TOOLTIP NO CONFLICT
26027 // ===================
26028
26029 $.fn.tooltip.noConflict = function () {
26030 $.fn.tooltip = old
26031 return this
26032 }
26033
26034 }(jQuery);
26035
26036 /* ========================================================================
26037 * Bootstrap: popover.js v3.3.7
26038 * http://getbootstrap.com/javascript/#popovers
26039 * ========================================================================
26040 * Copyright 2011-2016 Twitter, Inc.
26041 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26042 * ======================================================================== */
26043
26044
26045 +function ($) {
26046 'use strict';
26047
26048 // POPOVER PUBLIC CLASS DEFINITION
26049 // ===============================
26050
26051 var Popover = function (element, options) {
26052 this.init('popover', element, options)
26053 }
26054
26055 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
26056
26057 Popover.VERSION = '3.3.7'
26058
26059 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
26060 placement: 'right',
26061 trigger: 'click',
26062 content: '',
26063 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
26064 })
26065
26066
26067 // NOTE: POPOVER EXTENDS tooltip.js
26068 // ================================
26069
26070 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
26071
26072 Popover.prototype.constructor = Popover
26073
26074 Popover.prototype.getDefaults = function () {
26075 return Popover.DEFAULTS
26076 }
26077
26078 Popover.prototype.setContent = function () {
26079 var $tip = this.tip()
26080 var title = this.getTitle()
26081 var content = this.getContent()
26082
26083 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
26084 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
26085 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
26086 ](content)
26087
26088 $tip.removeClass('fade top bottom left right in')
26089
26090 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
26091 // this manually by checking the contents.
26092 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
26093 }
26094
26095 Popover.prototype.hasContent = function () {
26096 return this.getTitle() || this.getContent()
26097 }
26098
26099 Popover.prototype.getContent = function () {
26100 var $e = this.$element
26101 var o = this.options
26102
26103 return $e.attr('data-content')
26104 || (typeof o.content == 'function' ?
26105 o.content.call($e[0]) :
26106 o.content)
26107 }
26108
26109 Popover.prototype.arrow = function () {
26110 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
26111 }
26112
26113
26114 // POPOVER PLUGIN DEFINITION
26115 // =========================
26116
26117 function Plugin(option) {
26118 return this.each(function () {
26119 var $this = $(this)
26120 var data = $this.data('bs.popover')
26121 var options = typeof option == 'object' && option
26122
26123 if (!data && /destroy|hide/.test(option)) return
26124 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
26125 if (typeof option == 'string') data[option]()
26126 })
26127 }
26128
26129 var old = $.fn.popover
26130
26131 $.fn.popover = Plugin
26132 $.fn.popover.Constructor = Popover
26133
26134
26135 // POPOVER NO CONFLICT
26136 // ===================
26137
26138 $.fn.popover.noConflict = function () {
26139 $.fn.popover = old
26140 return this
26141 }
26142
26143 }(jQuery);
26144
26145 /* ========================================================================
26146 * Bootstrap: scrollspy.js v3.3.7
26147 * http://getbootstrap.com/javascript/#scrollspy
26148 * ========================================================================
26149 * Copyright 2011-2016 Twitter, Inc.
26150 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26151 * ======================================================================== */
26152
26153
26154 +function ($) {
26155 'use strict';
26156
26157 // SCROLLSPY CLASS DEFINITION
26158 // ==========================
26159
26160 function ScrollSpy(element, options) {
26161 this.$body = $(document.body)
26162 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
26163 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
26164 this.selector = (this.options.target || '') + ' .nav li > a'
26165 this.offsets = []
26166 this.targets = []
26167 this.activeTarget = null
26168 this.scrollHeight = 0
26169
26170 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
26171 this.refresh()
26172 this.process()
26173 }
26174
26175 ScrollSpy.VERSION = '3.3.7'
26176
26177 ScrollSpy.DEFAULTS = {
26178 offset: 10
26179 }
26180
26181 ScrollSpy.prototype.getScrollHeight = function () {
26182 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
26183 }
26184
26185 ScrollSpy.prototype.refresh = function () {
26186 var that = this
26187 var offsetMethod = 'offset'
26188 var offsetBase = 0
26189
26190 this.offsets = []
26191 this.targets = []
26192 this.scrollHeight = this.getScrollHeight()
26193
26194 if (!$.isWindow(this.$scrollElement[0])) {
26195 offsetMethod = 'position'
26196 offsetBase = this.$scrollElement.scrollTop()
26197 }
26198
26199 this.$body
26200 .find(this.selector)
26201 .map(function () {
26202 var $el = $(this)
26203 var href = $el.data('target') || $el.attr('href')
26204 var $href = /^#./.test(href) && $(href)
26205
26206 return ($href
26207 && $href.length
26208 && $href.is(':visible')
26209 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
26210 })
26211 .sort(function (a, b) { return a[0] - b[0] })
26212 .each(function () {
26213 that.offsets.push(this[0])
26214 that.targets.push(this[1])
26215 })
26216 }
26217
26218 ScrollSpy.prototype.process = function () {
26219 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
26220 var scrollHeight = this.getScrollHeight()
26221 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
26222 var offsets = this.offsets
26223 var targets = this.targets
26224 var activeTarget = this.activeTarget
26225 var i
26226
26227 if (this.scrollHeight != scrollHeight) {
26228 this.refresh()
26229 }
26230
26231 if (scrollTop >= maxScroll) {
26232 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
26233 }
26234
26235 if (activeTarget && scrollTop < offsets[0]) {
26236 this.activeTarget = null
26237 return this.clear()
26238 }
26239
26240 for (i = offsets.length; i--;) {
26241 activeTarget != targets[i]
26242 && scrollTop >= offsets[i]
26243 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
26244 && this.activate(targets[i])
26245 }
26246 }
26247
26248 ScrollSpy.prototype.activate = function (target) {
26249 this.activeTarget = target
26250
26251 this.clear()
26252
26253 var selector = this.selector +
26254 '[data-target="' + target + '"],' +
26255 this.selector + '[href="' + target + '"]'
26256
26257 var active = $(selector)
26258 .parents('li')
26259 .addClass('active')
26260
26261 if (active.parent('.dropdown-menu').length) {
26262 active = active
26263 .closest('li.dropdown')
26264 .addClass('active')
26265 }
26266
26267 active.trigger('activate.bs.scrollspy')
26268 }
26269
26270 ScrollSpy.prototype.clear = function () {
26271 $(this.selector)
26272 .parentsUntil(this.options.target, '.active')
26273 .removeClass('active')
26274 }
26275
26276
26277 // SCROLLSPY PLUGIN DEFINITION
26278 // ===========================
26279
26280 function Plugin(option) {
26281 return this.each(function () {
26282 var $this = $(this)
26283 var data = $this.data('bs.scrollspy')
26284 var options = typeof option == 'object' && option
26285
26286 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
26287 if (typeof option == 'string') data[option]()
26288 })
26289 }
26290
26291 var old = $.fn.scrollspy
26292
26293 $.fn.scrollspy = Plugin
26294 $.fn.scrollspy.Constructor = ScrollSpy
26295
26296
26297 // SCROLLSPY NO CONFLICT
26298 // =====================
26299
26300 $.fn.scrollspy.noConflict = function () {
26301 $.fn.scrollspy = old
26302 return this
26303 }
26304
26305
26306 // SCROLLSPY DATA-API
26307 // ==================
26308
26309 $(window).on('load.bs.scrollspy.data-api', function () {
26310 $('[data-spy="scroll"]').each(function () {
26311 var $spy = $(this)
26312 Plugin.call($spy, $spy.data())
26313 })
26314 })
26315
26316 }(jQuery);
26317
26318 /* ========================================================================
26319 * Bootstrap: tab.js v3.3.7
26320 * http://getbootstrap.com/javascript/#tabs
26321 * ========================================================================
26322 * Copyright 2011-2016 Twitter, Inc.
26323 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26324 * ======================================================================== */
26325
26326
26327 +function ($) {
26328 'use strict';
26329
26330 // TAB CLASS DEFINITION
26331 // ====================
26332
26333 var Tab = function (element) {
26334 // jscs:disable requireDollarBeforejQueryAssignment
26335 this.element = $(element)
26336 // jscs:enable requireDollarBeforejQueryAssignment
26337 }
26338
26339 Tab.VERSION = '3.3.7'
26340
26341 Tab.TRANSITION_DURATION = 150
26342
26343 Tab.prototype.show = function () {
26344 var $this = this.element
26345 var $ul = $this.closest('ul:not(.dropdown-menu)')
26346 var selector = $this.data('target')
26347
26348 if (!selector) {
26349 selector = $this.attr('href')
26350 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
26351 }
26352
26353 if ($this.parent('li').hasClass('active')) return
26354
26355 var $previous = $ul.find('.active:last a')
26356 var hideEvent = $.Event('hide.bs.tab', {
26357 relatedTarget: $this[0]
26358 })
26359 var showEvent = $.Event('show.bs.tab', {
26360 relatedTarget: $previous[0]
26361 })
26362
26363 $previous.trigger(hideEvent)
26364 $this.trigger(showEvent)
26365
26366 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
26367
26368 var $target = $(selector)
26369
26370 this.activate($this.closest('li'), $ul)
26371 this.activate($target, $target.parent(), function () {
26372 $previous.trigger({
26373 type: 'hidden.bs.tab',
26374 relatedTarget: $this[0]
26375 })
26376 $this.trigger({
26377 type: 'shown.bs.tab',
26378 relatedTarget: $previous[0]
26379 })
26380 })
26381 }
26382
26383 Tab.prototype.activate = function (element, container, callback) {
26384 var $active = container.find('> .active')
26385 var transition = callback
26386 && $.support.transition
26387 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
26388
26389 function next() {
26390 $active
26391 .removeClass('active')
26392 .find('> .dropdown-menu > .active')
26393 .removeClass('active')
26394 .end()
26395 .find('[data-toggle="tab"]')
26396 .attr('aria-expanded', false)
26397
26398 element
26399 .addClass('active')
26400 .find('[data-toggle="tab"]')
26401 .attr('aria-expanded', true)
26402
26403 if (transition) {
26404 element[0].offsetWidth // reflow for transition
26405 element.addClass('in')
26406 } else {
26407 element.removeClass('fade')
26408 }
26409
26410 if (element.parent('.dropdown-menu').length) {
26411 element
26412 .closest('li.dropdown')
26413 .addClass('active')
26414 .end()
26415 .find('[data-toggle="tab"]')
26416 .attr('aria-expanded', true)
26417 }
26418
26419 callback && callback()
26420 }
26421
26422 $active.length && transition ?
26423 $active
26424 .one('bsTransitionEnd', next)
26425 .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
26426 next()
26427
26428 $active.removeClass('in')
26429 }
26430
26431
26432 // TAB PLUGIN DEFINITION
26433 // =====================
26434
26435 function Plugin(option) {
26436 return this.each(function () {
26437 var $this = $(this)
26438 var data = $this.data('bs.tab')
26439
26440 if (!data) $this.data('bs.tab', (data = new Tab(this)))
26441 if (typeof option == 'string') data[option]()
26442 })
26443 }
26444
26445 var old = $.fn.tab
26446
26447 $.fn.tab = Plugin
26448 $.fn.tab.Constructor = Tab
26449
26450
26451 // TAB NO CONFLICT
26452 // ===============
26453
26454 $.fn.tab.noConflict = function () {
26455 $.fn.tab = old
26456 return this
26457 }
26458
26459
26460 // TAB DATA-API
26461 // ============
26462
26463 var clickHandler = function (e) {
26464 e.preventDefault()
26465 Plugin.call($(this), 'show')
26466 }
26467
26468 $(document)
26469 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
26470 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
26471
26472 }(jQuery);
26473
26474 /* ========================================================================
26475 * Bootstrap: affix.js v3.3.7
26476 * http://getbootstrap.com/javascript/#affix
26477 * ========================================================================
26478 * Copyright 2011-2016 Twitter, Inc.
26479 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26480 * ======================================================================== */
26481
26482
26483 +function ($) {
26484 'use strict';
26485
26486 // AFFIX CLASS DEFINITION
26487 // ======================
26488
26489 var Affix = function (element, options) {
26490 this.options = $.extend({}, Affix.DEFAULTS, options)
26491
26492 this.$target = $(this.options.target)
26493 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
26494 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
26495
26496 this.$element = $(element)
26497 this.affixed = null
26498 this.unpin = null
26499 this.pinnedOffset = null
26500
26501 this.checkPosition()
26502 }
26503
26504 Affix.VERSION = '3.3.7'
26505
26506 Affix.RESET = 'affix affix-top affix-bottom'
26507
26508 Affix.DEFAULTS = {
26509 offset: 0,
26510 target: window
26511 }
26512
26513 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
26514 var scrollTop = this.$target.scrollTop()
26515 var position = this.$element.offset()
26516 var targetHeight = this.$target.height()
26517
26518 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
26519
26520 if (this.affixed == 'bottom') {
26521 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
26522 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
26523 }
26524
26525 var initializing = this.affixed == null
26526 var colliderTop = initializing ? scrollTop : position.top
26527 var colliderHeight = initializing ? targetHeight : height
26528
26529 if (offsetTop != null && scrollTop <= offsetTop) return 'top'
26530 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
26531
26532 return false
26533 }
26534
26535 Affix.prototype.getPinnedOffset = function () {
26536 if (this.pinnedOffset) return this.pinnedOffset
26537 this.$element.removeClass(Affix.RESET).addClass('affix')
26538 var scrollTop = this.$target.scrollTop()
26539 var position = this.$element.offset()
26540 return (this.pinnedOffset = position.top - scrollTop)
26541 }
26542
26543 Affix.prototype.checkPositionWithEventLoop = function () {
26544 setTimeout($.proxy(this.checkPosition, this), 1)
26545 }
26546
26547 Affix.prototype.checkPosition = function () {
26548 if (!this.$element.is(':visible')) return
26549
26550 var height = this.$element.height()
26551 var offset = this.options.offset
26552 var offsetTop = offset.top
26553 var offsetBottom = offset.bottom
26554 var scrollHeight = Math.max($(document).height(), $(document.body).height())
26555
26556 if (typeof offset != 'object') offsetBottom = offsetTop = offset
26557 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
26558 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
26559
26560 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
26561
26562 if (this.affixed != affix) {
26563 if (this.unpin != null) this.$element.css('top', '')
26564
26565 var affixType = 'affix' + (affix ? '-' + affix : '')
26566 var e = $.Event(affixType + '.bs.affix')
26567
26568 this.$element.trigger(e)
26569
26570 if (e.isDefaultPrevented()) return
26571
26572 this.affixed = affix
26573 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
26574
26575 this.$element
26576 .removeClass(Affix.RESET)
26577 .addClass(affixType)
26578 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
26579 }
26580
26581 if (affix == 'bottom') {
26582 this.$element.offset({
26583 top: scrollHeight - height - offsetBottom
26584 })
26585 }
26586 }
26587
26588
26589 // AFFIX PLUGIN DEFINITION
26590 // =======================
26591
26592 function Plugin(option) {
26593 return this.each(function () {
26594 var $this = $(this)
26595 var data = $this.data('bs.affix')
26596 var options = typeof option == 'object' && option
26597
26598 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
26599 if (typeof option == 'string') data[option]()
26600 })
26601 }
26602
26603 var old = $.fn.affix
26604
26605 $.fn.affix = Plugin
26606 $.fn.affix.Constructor = Affix
26607
26608
26609 // AFFIX NO CONFLICT
26610 // =================
26611
26612 $.fn.affix.noConflict = function () {
26613 $.fn.affix = old
26614 return this
26615 }
26616
26617
26618 // AFFIX DATA-API
26619 // ==============
26620
26621 $(window).on('load', function () {
26622 $('[data-spy="affix"]').each(function () {
26623 var $spy = $(this)
26624 var data = $spy.data()
26625
26626 data.offset = data.offset || {}
26627
26628 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
26629 if (data.offsetTop != null) data.offset.top = data.offsetTop
26630
26631 Plugin.call($spy, data)
26632 })
26633 })
26634
26635 }(jQuery);
26636 </script>
26637 <script>(function() {
26638 'use strict';
26639
26640 /**
26641 * Extend an Object with another Object's properties.
26642 *
26643 * The source objects are specified as additional arguments.
26644 *
26645 * @param dst Object the object to extend.
26646 *
26647 * @return Object the final object.
26648 */
26649 var _extend = function(dst) {
26650 var sources = Array.prototype.slice.call(arguments, 1);
26651 for (var i=0; i<sources.length; ++i) {
26652 var src = sources[i];
26653 for (var p in src) {
26654 if (src.hasOwnProperty(p)) dst[p] = src[p];
26655 }
26656 }
26657 return dst;
26658 };
26659
26660
26661 /**
26662 * Defer execution of given function.
26663 * @param {Function} func
26664 */
26665 var _defer = function(func) {
26666 if (typeof setImmediate === 'function') {
26667 return setImmediate(func);
26668 } else {
26669 return setTimeout(func, 0);
26670 }
26671 };
26672
26673 /**
26674 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
26675 */
26676 var Levenshtein = {
26677 /**
26678 * Calculate levenshtein distance of the two strings.
26679 *
26680 * @param str1 String the first string.
26681 * @param str2 String the second string.
26682 * @return Integer the levenshtein distance (0 and above).
26683 */
26684 get: function(str1, str2) {
26685 // base cases
26686 if (str1 === str2) return 0;
26687 if (str1.length === 0) return str2.length;
26688 if (str2.length === 0) return str1.length;
26689
26690 // two rows
26691 var prevRow = new Array(str2.length + 1),
26692 curCol, nextCol, i, j, tmp;
26693
26694 // initialise previous row
26695 for (i=0; i<prevRow.length; ++i) {
26696 prevRow[i] = i;
26697 }
26698
26699 // calculate current row distance from previous row
26700 for (i=0; i<str1.length; ++i) {
26701 nextCol = i + 1;
26702
26703 for (j=0; j<str2.length; ++j) {
26704 curCol = nextCol;
26705
26706 // substution
26707 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26708 // insertion
26709 tmp = curCol + 1;
26710 if (nextCol > tmp) {
26711 nextCol = tmp;
26712 }
26713 // deletion
26714 tmp = prevRow[j + 1] + 1;
26715 if (nextCol > tmp) {
26716 nextCol = tmp;
26717 }
26718
26719 // copy current col value into previous (in preparation for next iteration)
26720 prevRow[j] = curCol;
26721 }
26722
26723 // copy last col value into previous (in preparation for next iteration)
26724 prevRow[j] = nextCol;
26725 }
26726
26727 return nextCol;
26728 },
26729
26730 /**
26731 * Asynchronously calculate levenshtein distance of the two strings.
26732 *
26733 * @param str1 String the first string.
26734 * @param str2 String the second string.
26735 * @param cb Function callback function with signature: function(Error err, int distance)
26736 * @param [options] Object additional options.
26737 * @param [options.progress] Function progress callback with signature: function(percentComplete)
26738 */
26739 getAsync: function(str1, str2, cb, options) {
26740 options = _extend({}, {
26741 progress: null
26742 }, options);
26743
26744 // base cases
26745 if (str1 === str2) return cb(null, 0);
26746 if (str1.length === 0) return cb(null, str2.length);
26747 if (str2.length === 0) return cb(null, str1.length);
26748
26749 // two rows
26750 var prevRow = new Array(str2.length + 1),
26751 curCol, nextCol,
26752 i, j, tmp,
26753 startTime, currentTime;
26754
26755 // initialise previous row
26756 for (i=0; i<prevRow.length; ++i) {
26757 prevRow[i] = i;
26758 }
26759
26760 nextCol = 1;
26761 i = 0;
26762 j = -1;
26763
26764 var __calculate = function() {
26765 // reset timer
26766 startTime = new Date().valueOf();
26767 currentTime = startTime;
26768
26769 // keep going until one second has elapsed
26770 while (currentTime - startTime < 1000) {
26771 // reached end of current row?
26772 if (str2.length <= (++j)) {
26773 // copy current into previous (in preparation for next iteration)
26774 prevRow[j] = nextCol;
26775
26776 // if already done all chars
26777 if (str1.length <= (++i)) {
26778 return cb(null, nextCol);
26779 }
26780 // else if we have more left to do
26781 else {
26782 nextCol = i + 1;
26783 j = 0;
26784 }
26785 }
26786
26787 // calculation
26788 curCol = nextCol;
26789
26790 // substution
26791 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26792 // insertion
26793 tmp = curCol + 1;
26794 if (nextCol > tmp) {
26795 nextCol = tmp;
26796 }
26797 // deletion
26798 tmp = prevRow[j + 1] + 1;
26799 if (nextCol > tmp) {
26800 nextCol = tmp;
26801 }
26802
26803 // copy current into previous (in preparation for next iteration)
26804 prevRow[j] = curCol;
26805
26806 // get current time
26807 currentTime = new Date().valueOf();
26808 }
26809
26810 // send a progress update?
26811 if (null !== options.progress) {
26812 try {
26813 options.progress.call(null, (i * 100.0/ str1.length));
26814 } catch (err) {
26815 return cb('Progress callback: ' + err.toString());
26816 }
26817 }
26818
26819 // next iteration
26820 _defer(__calculate);
26821 };
26822
26823 __calculate();
26824 }
26825
26826 };
26827
26828 // amd
26829 if (typeof define !== "undefined" && define !== null && define.amd) {
26830 define(function() {
26831 return Levenshtein;
26832 });
26833 }
26834 // commonjs
26835 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
26836 module.exports = Levenshtein;
26837 }
26838 // web worker
26839 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
26840 self.Levenshtein = Levenshtein;
26841 }
26842 // browser main thread
26843 else if (typeof window !== "undefined" && window !== null) {
26844 window.Levenshtein = Levenshtein;
26845 }
26846 }());
26847
26848 </script>
26849 <script>/*! kjua v0.1.1 - https://larsjung.de/kjua/ */
26850 !function(r,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.kjua=t():r.kjua=t()}(this,function(){return function(r){function t(n){if(e[n])return e[n].exports;var o=e[n]={exports:{},id:n,loaded:!1};return r[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var e={};return t.m=r,t.c=e,t.p="",t(0)}([function(r,t,e){"use strict";var n=e(1),o=n.createCanvas,i=n.canvasToImg,a=n.dpr,u=e(2),f=e(3),c=e(4);r.exports=function(r){var t=Object.assign({},u,r),e=f(t.text,t.ecLevel,t.minVersion,t.quiet),n=t.ratio||a,l=o(t.size,n),s=l.getContext("2d");return s.scale(n,n),c(e,s,t),"image"===t.render?i(l):l}},function(r,t){"use strict";var e=window,n=e.document,o=e.devicePixelRatio||1,i=function(r){return n.createElement(r)},a=function(r,t){return r.getAttribute(t)},u=function(r,t,e){return r.setAttribute(t,e)},f=function(r,t){var e=i("canvas");return u(e,"width",r*t),u(e,"height",r*t),e.style.width=r+"px",e.style.height=r+"px",e},c=function(r){var t=i("img");return u(t,"crossorigin","anonymous"),u(t,"src",r.toDataURL("image/png")),u(t,"width",a(r,"width")),u(t,"height",a(r,"height")),t.style.width=r.style.width,t.style.height=r.style.height,t};r.exports={createCanvas:f,canvasToImg:c,dpr:o}},function(r,t){"use strict";r.exports={render:"image",crisp:!0,minVersion:1,ecLevel:"L",size:200,ratio:null,fill:"#333",back:"#fff",text:"no text",rounded:0,quiet:0,mode:"plain",mSize:30,mPosX:50,mPosY:50,label:"no label",fontname:"sans",fontcolor:"#333",image:null}},function(r,t){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol?"symbol":typeof r},n=/code length overflow/i,o=function(){var e=function(){function r(t,e){if("undefined"==typeof t.length)throw new Error(t.length+"/"+e);var n=function(){for(var r=0;r<t.length&&0==t[r];)r+=1;for(var n=new Array(t.length-r+e),o=0;o<t.length-r;o+=1)n[o]=t[o+r];return n}(),o={};return o.getAt=function(r){return n[r]},o.getLength=function(){return n.length},o.multiply=function(t){for(var e=new Array(o.getLength()+t.getLength()-1),n=0;n<o.getLength();n+=1)for(var i=0;i<t.getLength();i+=1)e[n+i]^=a.gexp(a.glog(o.getAt(n))+a.glog(t.getAt(i)));return r(e,0)},o.mod=function(t){if(o.getLength()-t.getLength()<0)return o;for(var e=a.glog(o.getAt(0))-a.glog(t.getAt(0)),n=new Array(o.getLength()),i=0;i<o.getLength();i+=1)n[i]=o.getAt(i);for(var i=0;i<t.getLength();i+=1)n[i]^=a.gexp(a.glog(t.getAt(i))+e);return r(n,0).mod(t)},o}var t=function(t,e){var o=236,a=17,l=t,s=n[e],g=null,h=0,d=null,w=new Array,y={},p=function(r,t){h=4*l+17,g=function(r){for(var t=new Array(r),e=0;r>e;e+=1){t[e]=new Array(r);for(var n=0;r>n;n+=1)t[e][n]=null}return t}(h),m(0,0),m(h-7,0),m(0,h-7),E(),B(),M(r,t),l>=7&&T(r),null==d&&(d=x(l,s,w)),k(d,t)},m=function(r,t){for(var e=-1;7>=e;e+=1)if(!(-1>=r+e||r+e>=h))for(var n=-1;7>=n;n+=1)-1>=t+n||t+n>=h||(e>=0&&6>=e&&(0==n||6==n)||n>=0&&6>=n&&(0==e||6==e)||e>=2&&4>=e&&n>=2&&4>=n?g[r+e][t+n]=!0:g[r+e][t+n]=!1)},A=function(){for(var r=0,t=0,e=0;8>e;e+=1){p(!0,e);var n=i.getLostPoint(y);(0==e||r>n)&&(r=n,t=e)}return t},B=function(){for(var r=8;h-8>r;r+=1)null==g[r][6]&&(g[r][6]=r%2==0);for(var t=8;h-8>t;t+=1)null==g[6][t]&&(g[6][t]=t%2==0)},E=function(){for(var r=i.getPatternPosition(l),t=0;t<r.length;t+=1)for(var e=0;e<r.length;e+=1){var n=r[t],o=r[e];if(null==g[n][o])for(var a=-2;2>=a;a+=1)for(var u=-2;2>=u;u+=1)-2==a||2==a||-2==u||2==u||0==a&&0==u?g[n+a][o+u]=!0:g[n+a][o+u]=!1}},T=function(r){for(var t=i.getBCHTypeNumber(l),e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);g[Math.floor(e/3)][e%3+h-8-3]=n}for(var e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);g[e%3+h-8-3][Math.floor(e/3)]=n}},M=function(r,t){for(var e=s<<3|t,n=i.getBCHTypeInfo(e),o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);6>o?g[o][8]=a:8>o?g[o+1][8]=a:g[h-15+o][8]=a}for(var o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);8>o?g[8][h-o-1]=a:9>o?g[8][15-o-1+1]=a:g[8][15-o-1]=a}g[h-8][8]=!r},k=function(r,t){for(var e=-1,n=h-1,o=7,a=0,u=i.getMaskFunction(t),f=h-1;f>0;f-=2)for(6==f&&(f-=1);;){for(var c=0;2>c;c+=1)if(null==g[n][f-c]){var l=!1;a<r.length&&(l=1==(r[a]>>>o&1));var s=u(n,f-c);s&&(l=!l),g[n][f-c]=l,o-=1,-1==o&&(a+=1,o=7)}if(n+=e,0>n||n>=h){n-=e,e=-e;break}}},b=function(t,e){for(var n=0,o=0,a=0,u=new Array(e.length),f=new Array(e.length),c=0;c<e.length;c+=1){var l=e[c].dataCount,s=e[c].totalCount-l;o=Math.max(o,l),a=Math.max(a,s),u[c]=new Array(l);for(var g=0;g<u[c].length;g+=1)u[c][g]=255&t.getBuffer()[g+n];n+=l;var h=i.getErrorCorrectPolynomial(s),v=r(u[c],h.getLength()-1),d=v.mod(h);f[c]=new Array(h.getLength()-1);for(var g=0;g<f[c].length;g+=1){var w=g+d.getLength()-f[c].length;f[c][g]=w>=0?d.getAt(w):0}}for(var y=0,g=0;g<e.length;g+=1)y+=e[g].totalCount;for(var p=new Array(y),m=0,g=0;o>g;g+=1)for(var c=0;c<e.length;c+=1)g<u[c].length&&(p[m]=u[c][g],m+=1);for(var g=0;a>g;g+=1)for(var c=0;c<e.length;c+=1)g<f[c].length&&(p[m]=f[c][g],m+=1);return p},x=function(r,t,e){for(var n=u.getRSBlocks(r,t),c=f(),l=0;l<e.length;l+=1){var s=e[l];c.put(s.getMode(),4),c.put(s.getLength(),i.getLengthInBits(s.getMode(),r)),s.write(c)}for(var g=0,l=0;l<n.length;l+=1)g+=n[l].dataCount;if(c.getLengthInBits()>8*g)throw new Error("code length overflow. ("+c.getLengthInBits()+">"+8*g+")");for(c.getLengthInBits()+4<=8*g&&c.put(0,4);c.getLengthInBits()%8!=0;)c.putBit(!1);for(;;){if(c.getLengthInBits()>=8*g)break;if(c.put(o,8),c.getLengthInBits()>=8*g)break;c.put(a,8)}return b(c,n)};return y.addData=function(r){var t=c(r);w.push(t),d=null},y.isDark=function(r,t){if(0>r||r>=h||0>t||t>=h)throw new Error(r+","+t);return g[r][t]},y.getModuleCount=function(){return h},y.make=function(){p(!1,A())},y.createTableTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e="";e+='<table style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: "+t+"px;",e+='">',e+="<tbody>";for(var n=0;n<y.getModuleCount();n+=1){e+="<tr>";for(var o=0;o<y.getModuleCount();o+=1)e+='<td style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: 0px;",e+=" width: "+r+"px;",e+=" height: "+r+"px;",e+=" background-color: ",e+=y.isDark(n,o)?"#000000":"#ffffff",e+=";",e+='"/>';e+="</tr>"}return e+="</tbody>",e+="</table>"},y.createImgTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e=y.getModuleCount()*r+2*t,n=t,o=e-t;return v(e,e,function(t,e){if(t>=n&&o>t&&e>=n&&o>e){var i=Math.floor((t-n)/r),a=Math.floor((e-n)/r);return y.isDark(a,i)?0:1}return 1})},y};t.stringToBytes=function(r){for(var t=new Array,e=0;e<r.length;e+=1){var n=r.charCodeAt(e);t.push(255&n)}return t},t.createStringToBytes=function(r,t){var e=function(){for(var e=g(r),n=function(){var r=e.read();if(-1==r)throw new Error;return r},o=0,i={};;){var a=e.read();if(-1==a)break;var u=n(),f=n(),c=n(),l=String.fromCharCode(a<<8|u),s=f<<8|c;i[l]=s,o+=1}if(o!=t)throw new Error(o+" != "+t);return i}(),n="?".charCodeAt(0);return function(r){for(var t=new Array,o=0;o<r.length;o+=1){var i=r.charCodeAt(o);if(128>i)t.push(i);else{var a=e[r.charAt(o)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(n)}}return t}};var e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},n={L:1,M:0,Q:3,H:2},o={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},i=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],n=1335,i=7973,u=21522,f={},c=function(r){for(var t=0;0!=r;)t+=1,r>>>=1;return t};return f.getBCHTypeInfo=function(r){for(var t=r<<10;c(t)-c(n)>=0;)t^=n<<c(t)-c(n);return(r<<10|t)^u},f.getBCHTypeNumber=function(r){for(var t=r<<12;c(t)-c(i)>=0;)t^=i<<c(t)-c(i);return r<<12|t},f.getPatternPosition=function(r){return t[r-1]},f.getMaskFunction=function(r){switch(r){case o.PATTERN000:return function(r,t){return(r+t)%2==0};case o.PATTERN001:return function(r,t){return r%2==0};case o.PATTERN010:return function(r,t){return t%3==0};case o.PATTERN011:return function(r,t){return(r+t)%3==0};case o.PATTERN100:return function(r,t){return(Math.floor(r/2)+Math.floor(t/3))%2==0};case o.PATTERN101:return function(r,t){return r*t%2+r*t%3==0};case o.PATTERN110:return function(r,t){return(r*t%2+r*t%3)%2==0};case o.PATTERN111:return function(r,t){return(r*t%3+(r+t)%2)%2==0};default:throw new Error("bad maskPattern:"+r)}},f.getErrorCorrectPolynomial=function(t){for(var e=r([1],0),n=0;t>n;n+=1)e=e.multiply(r([1,a.gexp(n)],0));return e},f.getLengthInBits=function(r,t){if(t>=1&&10>t)switch(r){case e.MODE_NUMBER:return 10;case e.MODE_ALPHA_NUM:return 9;case e.MODE_8BIT_BYTE:return 8;case e.MODE_KANJI:return 8;default:throw new Error("mode:"+r)}else if(27>t)switch(r){case e.MODE_NUMBER:return 12;case e.MODE_ALPHA_NUM:return 11;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 10;default:throw new Error("mode:"+r)}else{if(!(41>t))throw new Error("type:"+t);switch(r){case e.MODE_NUMBER:return 14;case e.MODE_ALPHA_NUM:return 13;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 12;default:throw new Error("mode:"+r)}}},f.getLostPoint=function(r){for(var t=r.getModuleCount(),e=0,n=0;t>n;n+=1)for(var o=0;t>o;o+=1){for(var i=0,a=r.isDark(n,o),u=-1;1>=u;u+=1)if(!(0>n+u||n+u>=t))for(var f=-1;1>=f;f+=1)0>o+f||o+f>=t||0==u&&0==f||a==r.isDark(n+u,o+f)&&(i+=1);i>5&&(e+=3+i-5)}for(var n=0;t-1>n;n+=1)for(var o=0;t-1>o;o+=1){var c=0;r.isDark(n,o)&&(c+=1),r.isDark(n+1,o)&&(c+=1),r.isDark(n,o+1)&&(c+=1),r.isDark(n+1,o+1)&&(c+=1),0!=c&&4!=c||(e+=3)}for(var n=0;t>n;n+=1)for(var o=0;t-6>o;o+=1)r.isDark(n,o)&&!r.isDark(n,o+1)&&r.isDark(n,o+2)&&r.isDark(n,o+3)&&r.isDark(n,o+4)&&!r.isDark(n,o+5)&&r.isDark(n,o+6)&&(e+=40);for(var o=0;t>o;o+=1)for(var n=0;t-6>n;n+=1)r.isDark(n,o)&&!r.isDark(n+1,o)&&r.isDark(n+2,o)&&r.isDark(n+3,o)&&r.isDark(n+4,o)&&!r.isDark(n+5,o)&&r.isDark(n+6,o)&&(e+=40);for(var l=0,o=0;t>o;o+=1)for(var n=0;t>n;n+=1)r.isDark(n,o)&&(l+=1);var s=Math.abs(100*l/t/t-50)/5;return e+=10*s},f}(),a=function(){for(var r=new Array(256),t=new Array(256),e=0;8>e;e+=1)r[e]=1<<e;for(var e=8;256>e;e+=1)r[e]=r[e-4]^r[e-5]^r[e-6]^r[e-8];for(var e=0;255>e;e+=1)t[r[e]]=e;var n={};return n.glog=function(r){if(1>r)throw new Error("glog("+r+")");return t[r]},n.gexp=function(t){for(;0>t;)t+=255;for(;t>=256;)t-=255;return r[t]},n}(),u=function(){var r=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(r,t){var e={};return e.totalCount=r,e.dataCount=t,e},e={},o=function(t,e){switch(e){case n.L:return r[4*(t-1)+0];case n.M:return r[4*(t-1)+1];case n.Q:return r[4*(t-1)+2];case n.H:return r[4*(t-1)+3];default:return}};return e.getRSBlocks=function(r,e){var n=o(r,e);if("undefined"==typeof n)throw new Error("bad rs block @ typeNumber:"+r+"/errorCorrectLevel:"+e);for(var i=n.length/3,a=new Array,u=0;i>u;u+=1)for(var f=n[3*u+0],c=n[3*u+1],l=n[3*u+2],s=0;f>s;s+=1)a.push(t(c,l));return a},e}(),f=function(){var r=new Array,t=0,e={};return e.getBuffer=function(){return r},e.getAt=function(t){var e=Math.floor(t/8);return 1==(r[e]>>>7-t%8&1)},e.put=function(r,t){for(var n=0;t>n;n+=1)e.putBit(1==(r>>>t-n-1&1))},e.getLengthInBits=function(){return t},e.putBit=function(e){var n=Math.floor(t/8);r.length<=n&&r.push(0),e&&(r[n]|=128>>>t%8),t+=1},e},c=function(r){var n=e.MODE_8BIT_BYTE,o=t.stringToBytes(r),i={};return i.getMode=function(){return n},i.getLength=function(r){return o.length},i.write=function(r){for(var t=0;t<o.length;t+=1)r.put(o[t],8)},i},l=function(){var r=new Array,t={};return t.writeByte=function(t){r.push(255&t)},t.writeShort=function(r){t.writeByte(r),t.writeByte(r>>>8)},t.writeBytes=function(r,e,n){e=e||0,n=n||r.length;for(var o=0;n>o;o+=1)t.writeByte(r[o+e])},t.writeString=function(r){for(var e=0;e<r.length;e+=1)t.writeByte(r.charCodeAt(e))},t.toByteArray=function(){return r},t.toString=function(){var t="";t+="[";for(var e=0;e<r.length;e+=1)e>0&&(t+=","),t+=r[e];return t+="]"},t},s=function(){var r=0,t=0,e=0,n="",o={},i=function(r){n+=String.fromCharCode(a(63&r))},a=function(r){if(0>r);else{if(26>r)return 65+r;if(52>r)return 97+(r-26);if(62>r)return 48+(r-52);if(62==r)return 43;if(63==r)return 47}throw new Error("n:"+r)};return o.writeByte=function(n){for(r=r<<8|255&n,t+=8,e+=1;t>=6;)i(r>>>t-6),t-=6},o.flush=function(){if(t>0&&(i(r<<6-t),r=0,t=0),e%3!=0)for(var o=3-e%3,a=0;o>a;a+=1)n+="="},o.toString=function(){return n},o},g=function(r){var t=r,e=0,n=0,o=0,i={};i.read=function(){for(;8>o;){if(e>=t.length){if(0==o)return-1;throw new Error("unexpected end of file./"+o)}var r=t.charAt(e);if(e+=1,"="==r)return o=0,-1;r.match(/^\s$/)||(n=n<<6|a(r.charCodeAt(0)),o+=6)}var i=n>>>o-8&255;return o-=8,i};var a=function(r){if(r>=65&&90>=r)return r-65;if(r>=97&&122>=r)return r-97+26;if(r>=48&&57>=r)return r-48+52;if(43==r)return 62;if(47==r)return 63;throw new Error("c:"+r)};return i},h=function(r,t){var e=r,n=t,o=new Array(r*t),i={};i.setPixel=function(r,t,n){o[t*e+r]=n},i.write=function(r){r.writeString("GIF87a"),r.writeShort(e),r.writeShort(n),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(e),r.writeShort(n),r.writeByte(0);var t=2,o=u(t);r.writeByte(t);for(var i=0;o.length-i>255;)r.writeByte(255),r.writeBytes(o,i,255),i+=255;r.writeByte(o.length-i),r.writeBytes(o,i,o.length-i),r.writeByte(0),r.writeString(";")};var a=function(r){var t=r,e=0,n=0,o={};return o.write=function(r,o){if(r>>>o!=0)throw new Error("length over");for(;e+o>=8;)t.writeByte(255&(r<<e|n)),o-=8-e,r>>>=8-e,n=0,e=0;n=r<<e|n,e+=o},o.flush=function(){e>0&&t.writeByte(n)},o},u=function(r){for(var t=1<<r,e=(1<<r)+1,n=r+1,i=f(),u=0;t>u;u+=1)i.add(String.fromCharCode(u));i.add(String.fromCharCode(t)),i.add(String.fromCharCode(e));var c=l(),s=a(c);s.write(t,n);var g=0,h=String.fromCharCode(o[g]);for(g+=1;g<o.length;){var v=String.fromCharCode(o[g]);g+=1,i.contains(h+v)?h+=v:(s.write(i.indexOf(h),n),i.size()<4095&&(i.size()==1<<n&&(n+=1),i.add(h+v)),h=v)}return s.write(i.indexOf(h),n),s.write(e,n),s.flush(),c.toByteArray()},f=function(){var r={},t=0,e={};return e.add=function(n){if(e.contains(n))throw new Error("dup key:"+n);r[n]=t,t+=1},e.size=function(){return t},e.indexOf=function(t){return r[t]},e.contains=function(t){return"undefined"!=typeof r[t]},e};return i},v=function(r,t,e,n){for(var o=h(r,t),i=0;t>i;i+=1)for(var a=0;r>a;a+=1)o.setPixel(a,i,e(a,i));var u=l();o.write(u);for(var f=s(),c=u.toByteArray(),g=0;g<c.length;g+=1)f.writeByte(c[g]);f.flush();var v="";return v+="<img",v+=' src="',v+="data:image/gif;base64,",v+=f,v+='"',v+=' width="',v+=r,v+='"',v+=' height="',v+=t,v+='"',n&&(v+=' alt="',v+=n,v+='"'),v+="/>"};return t}();return function(e){"function"==typeof define&&define.amd?define([],e):"object"==typeof t&&(r.exports=e())}(function(){return e}),!function(r){r.stringToBytes=function(r){function t(r){for(var t=[],e=0;e<r.length;e++){var n=r.charCodeAt(e);128>n?t.push(n):2048>n?t.push(192|n>>6,128|63&n):55296>n||n>=57344?t.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&r.charCodeAt(e)),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return t}return t(r)}}(e),e}(),i=function(r,t){var i=arguments.length<=2||void 0===arguments[2]?1:arguments[2];i=Math.max(1,i);for(var a=i;40>=a;a+=1)try{var u=function(){var e=o(a,t);e.addData(r),e.make();var n=e.getModuleCount(),i=function(r,t){return r>=0&&n>r&&t>=0&&n>t&&e.isDark(r,t)};return{v:{text:r,level:t,version:a,moduleCount:n,isDark:i}}}();if("object"===("undefined"==typeof u?"undefined":e(u)))return u.v}catch(f){if(!n.test(f.message))throw f}return null},a=function(){var r=arguments.length<=0||void 0===arguments[0]?"":arguments[0],t=arguments.length<=1||void 0===arguments[1]?"L":arguments[1],e=arguments.length<=2||void 0===arguments[2]?1:arguments[2],n=arguments.length<=3||void 0===arguments[3]?0:arguments[3],o=i(r,t,e);return o&&!function(){var r=o.isDark;o.moduleCount+=2*n,o.isDark=function(t,e){return r(t-n,e-n)}}(),o};r.exports=a},function(r,t,e){"use strict";var n=e(5),o=e(6),i=function(r,t){r.fillStyle=t.back,r.fillRect(0,0,t.size,t.size)},a=function(r,t,e,n,o,i){r.isDark(o,i)&&t.rect(i*n,o*n,n,n)},u=function(r,t,e){if(r){var o=e.rounded>0&&e.rounded<=100?n:a,i=r.moduleCount,u=e.size/i,f=0;e.crisp&&(u=Math.floor(u),f=Math.floor((e.size-u*i)/2)),t.translate(f,f),t.beginPath();for(var c=0;i>c;c+=1)for(var l=0;i>l;l+=1)o(r,t,e,u,c,l);t.fillStyle=e.fill,t.fill(),t.translate(-f,-f)}},f=function(r,t,e){i(t,e),u(r,t,e),o(t,e)};r.exports=f},function(r,t){"use strict";var e=function(r){return{c:r,m:function(){var r;return(r=this.c).moveTo.apply(r,arguments),this},l:function(){var r;return(r=this.c).lineTo.apply(r,arguments),this},a:function(){var r;return(r=this.c).arcTo.apply(r,arguments),this}}},n=function(r,t,e,n,o,i,a,u,f,c){a?r.m(t+i,e):r.m(t,e),u?r.l(n-i,e).a(n,e,n,o,i):r.l(n,e),f?r.l(n,o-i).a(n,o,t,o,i):r.l(n,o),c?r.l(t+i,o).a(t,o,t,e,i):r.l(t,o),a?r.l(t,e+i).a(t,e,n,e,i):r.l(t,e)},o=function(r,t,e,n,o,i,a,u,f,c){a&&r.m(t+i,e).l(t,e).l(t,e+i).a(t,e,t+i,e,i),u&&r.m(n-i,e).l(n,e).l(n,e+i).a(n,e,n-i,e,i),f&&r.m(n-i,o).l(n,o).l(n,o-i).a(n,o,n-i,o,i),c&&r.m(t+i,o).l(t,o).l(t,o-i).a(t,o,t+i,o,i)},i=function(r,t,i,a,u,f){var c=f*a,l=u*a,s=c+a,g=l+a,h=.005*i.rounded*a,v=r.isDark,d=u-1,w=u+1,y=f-1,p=f+1,m=v(u,f),A=v(d,y),B=v(d,f),E=v(d,p),T=v(u,p),M=v(w,p),k=v(w,f),b=v(w,y),x=v(u,y),D=e(t);m?n(D,c,l,s,g,h,!B&&!x,!B&&!T,!k&&!T,!k&&!x):o(D,c,l,s,g,h,B&&x&&A,B&&T&&E,k&&T&&M,k&&x&&b)};r.exports=i},function(r,t){"use strict";var e=function(r,t){var e=t.size,n="bold "+.01*t.mSize*e+"px "+t.fontname;r.strokeStyle=t.back,r.lineWidth=.01*t.mSize*e*.1,r.fillStyle=t.fontcolor,r.font=n;var o=r.measureText(t.label).width,i=.01*t.mSize,a=o/e,u=(1-a)*t.mPosX*.01,f=(1-i)*t.mPosY*.01,c=u*e,l=f*e+.75*t.mSize*.01*e;r.strokeText(t.label,c,l),r.fillText(t.label,c,l)},n=function(r,t){var e=t.size,n=t.image.naturalWidth||1,o=t.image.naturalHeight||1,i=.01*t.mSize,a=i*n/o,u=(1-a)*t.mPosX*.01,f=(1-i)*t.mPosY*.01,c=u*e,l=f*e,s=a*e,g=i*e;r.drawImage(t.image,c,l,s,g)},o=function(r,t){var o=t.mode;"label"===o?e(r,t):"image"===o&&n(r,t)};r.exports=o}])});</script>
26851 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoinjs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
26852 (function (global){
26853 'use strict';
26854
26855 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
26856 // original notice:
26857
26858 /*!
26859 * The buffer module from node.js, for the browser.
26860 *
26861 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
26862 * @license MIT
26863 */
26864 function compare(a, b) {
26865 if (a === b) {
26866 return 0;
26867 }
26868
26869 var x = a.length;
26870 var y = b.length;
26871
26872 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
26873 if (a[i] !== b[i]) {
26874 x = a[i];
26875 y = b[i];
26876 break;
26877 }
26878 }
26879
26880 if (x < y) {
26881 return -1;
26882 }
26883 if (y < x) {
26884 return 1;
26885 }
26886 return 0;
26887 }
26888 function isBuffer(b) {
26889 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
26890 return global.Buffer.isBuffer(b);
26891 }
26892 return !!(b != null && b._isBuffer);
26893 }
26894
26895 // based on node assert, original notice:
26896
26897 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
26898 //
26899 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
26900 //
26901 // Originally from narwhal.js (http://narwhaljs.org)
26902 // Copyright (c) 2009 Thomas Robinson <280north.com>
26903 //
26904 // Permission is hereby granted, free of charge, to any person obtaining a copy
26905 // of this software and associated documentation files (the 'Software'), to
26906 // deal in the Software without restriction, including without limitation the
26907 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
26908 // sell copies of the Software, and to permit persons to whom the Software is
26909 // furnished to do so, subject to the following conditions:
26910 //
26911 // The above copyright notice and this permission notice shall be included in
26912 // all copies or substantial portions of the Software.
26913 //
26914 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26915 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26916 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26917 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26918 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26919 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26920
26921 var util = require('util/');
26922 var hasOwn = Object.prototype.hasOwnProperty;
26923 var pSlice = Array.prototype.slice;
26924 var functionsHaveNames = (function () {
26925 return function foo() {}.name === 'foo';
26926 }());
26927 function pToString (obj) {
26928 return Object.prototype.toString.call(obj);
26929 }
26930 function isView(arrbuf) {
26931 if (isBuffer(arrbuf)) {
26932 return false;
26933 }
26934 if (typeof global.ArrayBuffer !== 'function') {
26935 return false;
26936 }
26937 if (typeof ArrayBuffer.isView === 'function') {
26938 return ArrayBuffer.isView(arrbuf);
26939 }
26940 if (!arrbuf) {
26941 return false;
26942 }
26943 if (arrbuf instanceof DataView) {
26944 return true;
26945 }
26946 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
26947 return true;
26948 }
26949 return false;
26950 }
26951 // 1. The assert module provides functions that throw
26952 // AssertionError's when particular conditions are not met. The
26953 // assert module must conform to the following interface.
26954
26955 var assert = module.exports = ok;
26956
26957 // 2. The AssertionError is defined in assert.
26958 // new assert.AssertionError({ message: message,
26959 // actual: actual,
26960 // expected: expected })
26961
26962 var regex = /\s*function\s+([^\(\s]*)\s*/;
26963 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
26964 function getName(func) {
26965 if (!util.isFunction(func)) {
26966 return;
26967 }
26968 if (functionsHaveNames) {
26969 return func.name;
26970 }
26971 var str = func.toString();
26972 var match = str.match(regex);
26973 return match && match[1];
26974 }
26975 assert.AssertionError = function AssertionError(options) {
26976 this.name = 'AssertionError';
26977 this.actual = options.actual;
26978 this.expected = options.expected;
26979 this.operator = options.operator;
26980 if (options.message) {
26981 this.message = options.message;
26982 this.generatedMessage = false;
26983 } else {
26984 this.message = getMessage(this);
26985 this.generatedMessage = true;
26986 }
26987 var stackStartFunction = options.stackStartFunction || fail;
26988 if (Error.captureStackTrace) {
26989 Error.captureStackTrace(this, stackStartFunction);
26990 } else {
26991 // non v8 browsers so we can have a stacktrace
26992 var err = new Error();
26993 if (err.stack) {
26994 var out = err.stack;
26995
26996 // try to strip useless frames
26997 var fn_name = getName(stackStartFunction);
26998 var idx = out.indexOf('\n' + fn_name);
26999 if (idx >= 0) {
27000 // once we have located the function frame
27001 // we need to strip out everything before it (and its line)
27002 var next_line = out.indexOf('\n', idx + 1);
27003 out = out.substring(next_line + 1);
27004 }
27005
27006 this.stack = out;
27007 }
27008 }
27009 };
27010
27011 // assert.AssertionError instanceof Error
27012 util.inherits(assert.AssertionError, Error);
27013
27014 function truncate(s, n) {
27015 if (typeof s === 'string') {
27016 return s.length < n ? s : s.slice(0, n);
27017 } else {
27018 return s;
27019 }
27020 }
27021 function inspect(something) {
27022 if (functionsHaveNames || !util.isFunction(something)) {
27023 return util.inspect(something);
27024 }
27025 var rawname = getName(something);
27026 var name = rawname ? ': ' + rawname : '';
27027 return '[Function' + name + ']';
27028 }
27029 function getMessage(self) {
27030 return truncate(inspect(self.actual), 128) + ' ' +
27031 self.operator + ' ' +
27032 truncate(inspect(self.expected), 128);
27033 }
27034
27035 // At present only the three keys mentioned above are used and
27036 // understood by the spec. Implementations or sub modules can pass
27037 // other keys to the AssertionError's constructor - they will be
27038 // ignored.
27039
27040 // 3. All of the following functions must throw an AssertionError
27041 // when a corresponding condition is not met, with a message that
27042 // may be undefined if not provided. All assertion methods provide
27043 // both the actual and expected values to the assertion error for
27044 // display purposes.
27045
27046 function fail(actual, expected, message, operator, stackStartFunction) {
27047 throw new assert.AssertionError({
27048 message: message,
27049 actual: actual,
27050 expected: expected,
27051 operator: operator,
27052 stackStartFunction: stackStartFunction
27053 });
27054 }
27055
27056 // EXTENSION! allows for well behaved errors defined elsewhere.
27057 assert.fail = fail;
27058
27059 // 4. Pure assertion tests whether a value is truthy, as determined
27060 // by !!guard.
27061 // assert.ok(guard, message_opt);
27062 // This statement is equivalent to assert.equal(true, !!guard,
27063 // message_opt);. To test strictly for the value true, use
27064 // assert.strictEqual(true, guard, message_opt);.
27065
27066 function ok(value, message) {
27067 if (!value) fail(value, true, message, '==', assert.ok);
27068 }
27069 assert.ok = ok;
27070
27071 // 5. The equality assertion tests shallow, coercive equality with
27072 // ==.
27073 // assert.equal(actual, expected, message_opt);
27074
27075 assert.equal = function equal(actual, expected, message) {
27076 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
27077 };
27078
27079 // 6. The non-equality assertion tests for whether two objects are not equal
27080 // with != assert.notEqual(actual, expected, message_opt);
27081
27082 assert.notEqual = function notEqual(actual, expected, message) {
27083 if (actual == expected) {
27084 fail(actual, expected, message, '!=', assert.notEqual);
27085 }
27086 };
27087
27088 // 7. The equivalence assertion tests a deep equality relation.
27089 // assert.deepEqual(actual, expected, message_opt);
27090
27091 assert.deepEqual = function deepEqual(actual, expected, message) {
27092 if (!_deepEqual(actual, expected, false)) {
27093 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
27094 }
27095 };
27096
27097 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
27098 if (!_deepEqual(actual, expected, true)) {
27099 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
27100 }
27101 };
27102
27103 function _deepEqual(actual, expected, strict, memos) {
27104 // 7.1. All identical values are equivalent, as determined by ===.
27105 if (actual === expected) {
27106 return true;
27107 } else if (isBuffer(actual) && isBuffer(expected)) {
27108 return compare(actual, expected) === 0;
27109
27110 // 7.2. If the expected value is a Date object, the actual value is
27111 // equivalent if it is also a Date object that refers to the same time.
27112 } else if (util.isDate(actual) && util.isDate(expected)) {
27113 return actual.getTime() === expected.getTime();
27114
27115 // 7.3 If the expected value is a RegExp object, the actual value is
27116 // equivalent if it is also a RegExp object with the same source and
27117 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
27118 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
27119 return actual.source === expected.source &&
27120 actual.global === expected.global &&
27121 actual.multiline === expected.multiline &&
27122 actual.lastIndex === expected.lastIndex &&
27123 actual.ignoreCase === expected.ignoreCase;
27124
27125 // 7.4. Other pairs that do not both pass typeof value == 'object',
27126 // equivalence is determined by ==.
27127 } else if ((actual === null || typeof actual !== 'object') &&
27128 (expected === null || typeof expected !== 'object')) {
27129 return strict ? actual === expected : actual == expected;
27130
27131 // If both values are instances of typed arrays, wrap their underlying
27132 // ArrayBuffers in a Buffer each to increase performance
27133 // This optimization requires the arrays to have the same type as checked by
27134 // Object.prototype.toString (aka pToString). Never perform binary
27135 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
27136 // bit patterns are not identical.
27137 } else if (isView(actual) && isView(expected) &&
27138 pToString(actual) === pToString(expected) &&
27139 !(actual instanceof Float32Array ||
27140 actual instanceof Float64Array)) {
27141 return compare(new Uint8Array(actual.buffer),
27142 new Uint8Array(expected.buffer)) === 0;
27143
27144 // 7.5 For all other Object pairs, including Array objects, equivalence is
27145 // determined by having the same number of owned properties (as verified
27146 // with Object.prototype.hasOwnProperty.call), the same set of keys
27147 // (although not necessarily the same order), equivalent values for every
27148 // corresponding key, and an identical 'prototype' property. Note: this
27149 // accounts for both named and indexed properties on Arrays.
27150 } else if (isBuffer(actual) !== isBuffer(expected)) {
27151 return false;
27152 } else {
27153 memos = memos || {actual: [], expected: []};
27154
27155 var actualIndex = memos.actual.indexOf(actual);
27156 if (actualIndex !== -1) {
27157 if (actualIndex === memos.expected.indexOf(expected)) {
27158 return true;
27159 }
27160 }
27161
27162 memos.actual.push(actual);
27163 memos.expected.push(expected);
27164
27165 return objEquiv(actual, expected, strict, memos);
27166 }
27167 }
27168
27169 function isArguments(object) {
27170 return Object.prototype.toString.call(object) == '[object Arguments]';
27171 }
27172
27173 function objEquiv(a, b, strict, actualVisitedObjects) {
27174 if (a === null || a === undefined || b === null || b === undefined)
27175 return false;
27176 // if one is a primitive, the other must be same
27177 if (util.isPrimitive(a) || util.isPrimitive(b))
27178 return a === b;
27179 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
27180 return false;
27181 var aIsArgs = isArguments(a);
27182 var bIsArgs = isArguments(b);
27183 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
27184 return false;
27185 if (aIsArgs) {
27186 a = pSlice.call(a);
27187 b = pSlice.call(b);
27188 return _deepEqual(a, b, strict);
27189 }
27190 var ka = objectKeys(a);
27191 var kb = objectKeys(b);
27192 var key, i;
27193 // having the same number of owned properties (keys incorporates
27194 // hasOwnProperty)
27195 if (ka.length !== kb.length)
27196 return false;
27197 //the same set of keys (although not necessarily the same order),
27198 ka.sort();
27199 kb.sort();
27200 //~~~cheap key test
27201 for (i = ka.length - 1; i >= 0; i--) {
27202 if (ka[i] !== kb[i])
27203 return false;
27204 }
27205 //equivalent values for every corresponding key, and
27206 //~~~possibly expensive deep test
27207 for (i = ka.length - 1; i >= 0; i--) {
27208 key = ka[i];
27209 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
27210 return false;
27211 }
27212 return true;
27213 }
27214
27215 // 8. The non-equivalence assertion tests for any deep inequality.
27216 // assert.notDeepEqual(actual, expected, message_opt);
27217
27218 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
27219 if (_deepEqual(actual, expected, false)) {
27220 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
27221 }
27222 };
27223
27224 assert.notDeepStrictEqual = notDeepStrictEqual;
27225 function notDeepStrictEqual(actual, expected, message) {
27226 if (_deepEqual(actual, expected, true)) {
27227 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
27228 }
27229 }
27230
27231
27232 // 9. The strict equality assertion tests strict equality, as determined by ===.
27233 // assert.strictEqual(actual, expected, message_opt);
27234
27235 assert.strictEqual = function strictEqual(actual, expected, message) {
27236 if (actual !== expected) {
27237 fail(actual, expected, message, '===', assert.strictEqual);
27238 }
27239 };
27240
27241 // 10. The strict non-equality assertion tests for strict inequality, as
27242 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
27243
27244 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
27245 if (actual === expected) {
27246 fail(actual, expected, message, '!==', assert.notStrictEqual);
27247 }
27248 };
27249
27250 function expectedException(actual, expected) {
27251 if (!actual || !expected) {
27252 return false;
27253 }
27254
27255 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
27256 return expected.test(actual);
27257 }
27258
27259 try {
27260 if (actual instanceof expected) {
27261 return true;
27262 }
27263 } catch (e) {
27264 // Ignore. The instanceof check doesn't work for arrow functions.
27265 }
27266
27267 if (Error.isPrototypeOf(expected)) {
27268 return false;
27269 }
27270
27271 return expected.call({}, actual) === true;
27272 }
27273
27274 function _tryBlock(block) {
27275 var error;
27276 try {
27277 block();
27278 } catch (e) {
27279 error = e;
27280 }
27281 return error;
27282 }
27283
27284 function _throws(shouldThrow, block, expected, message) {
27285 var actual;
27286
27287 if (typeof block !== 'function') {
27288 throw new TypeError('"block" argument must be a function');
27289 }
27290
27291 if (typeof expected === 'string') {
27292 message = expected;
27293 expected = null;
27294 }
27295
27296 actual = _tryBlock(block);
27297
27298 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
27299 (message ? ' ' + message : '.');
27300
27301 if (shouldThrow && !actual) {
27302 fail(actual, expected, 'Missing expected exception' + message);
27303 }
27304
27305 var userProvidedMessage = typeof message === 'string';
27306 var isUnwantedException = !shouldThrow && util.isError(actual);
27307 var isUnexpectedException = !shouldThrow && actual && !expected;
27308
27309 if ((isUnwantedException &&
27310 userProvidedMessage &&
27311 expectedException(actual, expected)) ||
27312 isUnexpectedException) {
27313 fail(actual, expected, 'Got unwanted exception' + message);
27314 }
27315
27316 if ((shouldThrow && actual && expected &&
27317 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
27318 throw actual;
27319 }
27320 }
27321
27322 // 11. Expected to throw an error:
27323 // assert.throws(block, Error_opt, message_opt);
27324
27325 assert.throws = function(block, /*optional*/error, /*optional*/message) {
27326 _throws(true, block, error, message);
27327 };
27328
27329 // EXTENSION! This is annoying to write outside this module.
27330 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
27331 _throws(false, block, error, message);
27332 };
27333
27334 assert.ifError = function(err) { if (err) throw err; };
27335
27336 var objectKeys = Object.keys || function (obj) {
27337 var keys = [];
27338 for (var key in obj) {
27339 if (hasOwn.call(obj, key)) keys.push(key);
27340 }
27341 return keys;
27342 };
27343
27344 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27345 },{"util/":33}],2:[function(require,module,exports){
27346 'use strict'
27347
27348 exports.byteLength = byteLength
27349 exports.toByteArray = toByteArray
27350 exports.fromByteArray = fromByteArray
27351
27352 var lookup = []
27353 var revLookup = []
27354 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
27355
27356 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
27357 for (var i = 0, len = code.length; i < len; ++i) {
27358 lookup[i] = code[i]
27359 revLookup[code.charCodeAt(i)] = i
27360 }
27361
27362 revLookup['-'.charCodeAt(0)] = 62
27363 revLookup['_'.charCodeAt(0)] = 63
27364
27365 function placeHoldersCount (b64) {
27366 var len = b64.length
27367 if (len % 4 > 0) {
27368 throw new Error('Invalid string. Length must be a multiple of 4')
27369 }
27370
27371 // the number of equal signs (place holders)
27372 // if there are two placeholders, than the two characters before it
27373 // represent one byte
27374 // if there is only one, then the three characters before it represent 2 bytes
27375 // this is just a cheap hack to not do indexOf twice
27376 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
27377 }
27378
27379 function byteLength (b64) {
27380 // base64 is 4/3 + up to two characters of the original data
27381 return b64.length * 3 / 4 - placeHoldersCount(b64)
27382 }
27383
27384 function toByteArray (b64) {
27385 var i, j, l, tmp, placeHolders, arr
27386 var len = b64.length
27387 placeHolders = placeHoldersCount(b64)
27388
27389 arr = new Arr(len * 3 / 4 - placeHolders)
27390
27391 // if there are placeholders, only get up to the last complete 4 chars
27392 l = placeHolders > 0 ? len - 4 : len
27393
27394 var L = 0
27395
27396 for (i = 0, j = 0; i < l; i += 4, j += 3) {
27397 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
27398 arr[L++] = (tmp >> 16) & 0xFF
27399 arr[L++] = (tmp >> 8) & 0xFF
27400 arr[L++] = tmp & 0xFF
27401 }
27402
27403 if (placeHolders === 2) {
27404 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
27405 arr[L++] = tmp & 0xFF
27406 } else if (placeHolders === 1) {
27407 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
27408 arr[L++] = (tmp >> 8) & 0xFF
27409 arr[L++] = tmp & 0xFF
27410 }
27411
27412 return arr
27413 }
27414
27415 function tripletToBase64 (num) {
27416 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
27417 }
27418
27419 function encodeChunk (uint8, start, end) {
27420 var tmp
27421 var output = []
27422 for (var i = start; i < end; i += 3) {
27423 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
27424 output.push(tripletToBase64(tmp))
27425 }
27426 return output.join('')
27427 }
27428
27429 function fromByteArray (uint8) {
27430 var tmp
27431 var len = uint8.length
27432 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
27433 var output = ''
27434 var parts = []
27435 var maxChunkLength = 16383 // must be multiple of 3
27436
27437 // go through the array every three bytes, we'll deal with trailing stuff later
27438 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
27439 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
27440 }
27441
27442 // pad the end with zeros, but make sure to not forget the extra bytes
27443 if (extraBytes === 1) {
27444 tmp = uint8[len - 1]
27445 output += lookup[tmp >> 2]
27446 output += lookup[(tmp << 4) & 0x3F]
27447 output += '=='
27448 } else if (extraBytes === 2) {
27449 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
27450 output += lookup[tmp >> 10]
27451 output += lookup[(tmp >> 4) & 0x3F]
27452 output += lookup[(tmp << 2) & 0x3F]
27453 output += '='
27454 }
27455
27456 parts.push(output)
27457
27458 return parts.join('')
27459 }
27460
27461 },{}],3:[function(require,module,exports){
27462
27463 },{}],4:[function(require,module,exports){
27464 (function (global){
27465 'use strict';
27466
27467 var buffer = require('buffer');
27468 var Buffer = buffer.Buffer;
27469 var SlowBuffer = buffer.SlowBuffer;
27470 var MAX_LEN = buffer.kMaxLength || 2147483647;
27471 exports.alloc = function alloc(size, fill, encoding) {
27472 if (typeof Buffer.alloc === 'function') {
27473 return Buffer.alloc(size, fill, encoding);
27474 }
27475 if (typeof encoding === 'number') {
27476 throw new TypeError('encoding must not be number');
27477 }
27478 if (typeof size !== 'number') {
27479 throw new TypeError('size must be a number');
27480 }
27481 if (size > MAX_LEN) {
27482 throw new RangeError('size is too large');
27483 }
27484 var enc = encoding;
27485 var _fill = fill;
27486 if (_fill === undefined) {
27487 enc = undefined;
27488 _fill = 0;
27489 }
27490 var buf = new Buffer(size);
27491 if (typeof _fill === 'string') {
27492 var fillBuf = new Buffer(_fill, enc);
27493 var flen = fillBuf.length;
27494 var i = -1;
27495 while (++i < size) {
27496 buf[i] = fillBuf[i % flen];
27497 }
27498 } else {
27499 buf.fill(_fill);
27500 }
27501 return buf;
27502 }
27503 exports.allocUnsafe = function allocUnsafe(size) {
27504 if (typeof Buffer.allocUnsafe === 'function') {
27505 return Buffer.allocUnsafe(size);
27506 }
27507 if (typeof size !== 'number') {
27508 throw new TypeError('size must be a number');
27509 }
27510 if (size > MAX_LEN) {
27511 throw new RangeError('size is too large');
27512 }
27513 return new Buffer(size);
27514 }
27515 exports.from = function from(value, encodingOrOffset, length) {
27516 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
27517 return Buffer.from(value, encodingOrOffset, length);
27518 }
27519 if (typeof value === 'number') {
27520 throw new TypeError('"value" argument must not be a number');
27521 }
27522 if (typeof value === 'string') {
27523 return new Buffer(value, encodingOrOffset);
27524 }
27525 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
27526 var offset = encodingOrOffset;
27527 if (arguments.length === 1) {
27528 return new Buffer(value);
27529 }
27530 if (typeof offset === 'undefined') {
27531 offset = 0;
27532 }
27533 var len = length;
27534 if (typeof len === 'undefined') {
27535 len = value.byteLength - offset;
27536 }
27537 if (offset >= value.byteLength) {
27538 throw new RangeError('\'offset\' is out of bounds');
27539 }
27540 if (len > value.byteLength - offset) {
27541 throw new RangeError('\'length\' is out of bounds');
27542 }
27543 return new Buffer(value.slice(offset, offset + len));
27544 }
27545 if (Buffer.isBuffer(value)) {
27546 var out = new Buffer(value.length);
27547 value.copy(out, 0, 0, value.length);
27548 return out;
27549 }
27550 if (value) {
27551 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
27552 return new Buffer(value);
27553 }
27554 if (value.type === 'Buffer' && Array.isArray(value.data)) {
27555 return new Buffer(value.data);
27556 }
27557 }
27558
27559 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
27560 }
27561 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
27562 if (typeof Buffer.allocUnsafeSlow === 'function') {
27563 return Buffer.allocUnsafeSlow(size);
27564 }
27565 if (typeof size !== 'number') {
27566 throw new TypeError('size must be a number');
27567 }
27568 if (size >= MAX_LEN) {
27569 throw new RangeError('size is too large');
27570 }
27571 return new SlowBuffer(size);
27572 }
27573
27574 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27575 },{"buffer":5}],5:[function(require,module,exports){
27576 /*!
27577 * The buffer module from node.js, for the browser.
27578 *
27579 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
27580 * @license MIT
27581 */
27582 /* eslint-disable no-proto */
27583
27584 'use strict'
27585
27586 var base64 = require('base64-js')
27587 var ieee754 = require('ieee754')
27588
27589 exports.Buffer = Buffer
27590 exports.SlowBuffer = SlowBuffer
27591 exports.INSPECT_MAX_BYTES = 50
27592
27593 var K_MAX_LENGTH = 0x7fffffff
27594 exports.kMaxLength = K_MAX_LENGTH
27595
27596 /**
27597 * If `Buffer.TYPED_ARRAY_SUPPORT`:
27598 * === true Use Uint8Array implementation (fastest)
27599 * === false Print warning and recommend using `buffer` v4.x which has an Object
27600 * implementation (most compatible, even IE6)
27601 *
27602 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
27603 * Opera 11.6+, iOS 4.2+.
27604 *
27605 * We report that the browser does not support typed arrays if the are not subclassable
27606 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
27607 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
27608 * for __proto__ and has a buggy typed array implementation.
27609 */
27610 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
27611
27612 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
27613 typeof console.error === 'function') {
27614 console.error(
27615 'This browser lacks typed array (Uint8Array) support which is required by ' +
27616 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
27617 )
27618 }
27619
27620 function typedArraySupport () {
27621 // Can typed array instances can be augmented?
27622 try {
27623 var arr = new Uint8Array(1)
27624 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
27625 return arr.foo() === 42
27626 } catch (e) {
27627 return false
27628 }
27629 }
27630
27631 function createBuffer (length) {
27632 if (length > K_MAX_LENGTH) {
27633 throw new RangeError('Invalid typed array length')
27634 }
27635 // Return an augmented `Uint8Array` instance
27636 var buf = new Uint8Array(length)
27637 buf.__proto__ = Buffer.prototype
27638 return buf
27639 }
27640
27641 /**
27642 * The Buffer constructor returns instances of `Uint8Array` that have their
27643 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
27644 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
27645 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
27646 * returns a single octet.
27647 *
27648 * The `Uint8Array` prototype remains unmodified.
27649 */
27650
27651 function Buffer (arg, encodingOrOffset, length) {
27652 // Common case.
27653 if (typeof arg === 'number') {
27654 if (typeof encodingOrOffset === 'string') {
27655 throw new Error(
27656 'If encoding is specified then the first argument must be a string'
27657 )
27658 }
27659 return allocUnsafe(arg)
27660 }
27661 return from(arg, encodingOrOffset, length)
27662 }
27663
27664 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
27665 if (typeof Symbol !== 'undefined' && Symbol.species &&
27666 Buffer[Symbol.species] === Buffer) {
27667 Object.defineProperty(Buffer, Symbol.species, {
27668 value: null,
27669 configurable: true,
27670 enumerable: false,
27671 writable: false
27672 })
27673 }
27674
27675 Buffer.poolSize = 8192 // not used by this implementation
27676
27677 function from (value, encodingOrOffset, length) {
27678 if (typeof value === 'number') {
27679 throw new TypeError('"value" argument must not be a number')
27680 }
27681
27682 if (value instanceof ArrayBuffer) {
27683 return fromArrayBuffer(value, encodingOrOffset, length)
27684 }
27685
27686 if (typeof value === 'string') {
27687 return fromString(value, encodingOrOffset)
27688 }
27689
27690 return fromObject(value)
27691 }
27692
27693 /**
27694 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
27695 * if value is a number.
27696 * Buffer.from(str[, encoding])
27697 * Buffer.from(array)
27698 * Buffer.from(buffer)
27699 * Buffer.from(arrayBuffer[, byteOffset[, length]])
27700 **/
27701 Buffer.from = function (value, encodingOrOffset, length) {
27702 return from(value, encodingOrOffset, length)
27703 }
27704
27705 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
27706 // https://github.com/feross/buffer/pull/148
27707 Buffer.prototype.__proto__ = Uint8Array.prototype
27708 Buffer.__proto__ = Uint8Array
27709
27710 function assertSize (size) {
27711 if (typeof size !== 'number') {
27712 throw new TypeError('"size" argument must be a number')
27713 } else if (size < 0) {
27714 throw new RangeError('"size" argument must not be negative')
27715 }
27716 }
27717
27718 function alloc (size, fill, encoding) {
27719 assertSize(size)
27720 if (size <= 0) {
27721 return createBuffer(size)
27722 }
27723 if (fill !== undefined) {
27724 // Only pay attention to encoding if it's a string. This
27725 // prevents accidentally sending in a number that would
27726 // be interpretted as a start offset.
27727 return typeof encoding === 'string'
27728 ? createBuffer(size).fill(fill, encoding)
27729 : createBuffer(size).fill(fill)
27730 }
27731 return createBuffer(size)
27732 }
27733
27734 /**
27735 * Creates a new filled Buffer instance.
27736 * alloc(size[, fill[, encoding]])
27737 **/
27738 Buffer.alloc = function (size, fill, encoding) {
27739 return alloc(size, fill, encoding)
27740 }
27741
27742 function allocUnsafe (size) {
27743 assertSize(size)
27744 return createBuffer(size < 0 ? 0 : checked(size) | 0)
27745 }
27746
27747 /**
27748 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
27749 * */
27750 Buffer.allocUnsafe = function (size) {
27751 return allocUnsafe(size)
27752 }
27753 /**
27754 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
27755 */
27756 Buffer.allocUnsafeSlow = function (size) {
27757 return allocUnsafe(size)
27758 }
27759
27760 function fromString (string, encoding) {
27761 if (typeof encoding !== 'string' || encoding === '') {
27762 encoding = 'utf8'
27763 }
27764
27765 if (!Buffer.isEncoding(encoding)) {
27766 throw new TypeError('"encoding" must be a valid string encoding')
27767 }
27768
27769 var length = byteLength(string, encoding) | 0
27770 var buf = createBuffer(length)
27771
27772 var actual = buf.write(string, encoding)
27773
27774 if (actual !== length) {
27775 // Writing a hex string, for example, that contains invalid characters will
27776 // cause everything after the first invalid character to be ignored. (e.g.
27777 // 'abxxcd' will be treated as 'ab')
27778 buf = buf.slice(0, actual)
27779 }
27780
27781 return buf
27782 }
27783
27784 function fromArrayLike (array) {
27785 var length = array.length < 0 ? 0 : checked(array.length) | 0
27786 var buf = createBuffer(length)
27787 for (var i = 0; i < length; i += 1) {
27788 buf[i] = array[i] & 255
27789 }
27790 return buf
27791 }
27792
27793 function fromArrayBuffer (array, byteOffset, length) {
27794 if (byteOffset < 0 || array.byteLength < byteOffset) {
27795 throw new RangeError('\'offset\' is out of bounds')
27796 }
27797
27798 if (array.byteLength < byteOffset + (length || 0)) {
27799 throw new RangeError('\'length\' is out of bounds')
27800 }
27801
27802 var buf
27803 if (byteOffset === undefined && length === undefined) {
27804 buf = new Uint8Array(array)
27805 } else if (length === undefined) {
27806 buf = new Uint8Array(array, byteOffset)
27807 } else {
27808 buf = new Uint8Array(array, byteOffset, length)
27809 }
27810
27811 // Return an augmented `Uint8Array` instance
27812 buf.__proto__ = Buffer.prototype
27813 return buf
27814 }
27815
27816 function fromObject (obj) {
27817 if (Buffer.isBuffer(obj)) {
27818 var len = checked(obj.length) | 0
27819 var buf = createBuffer(len)
27820
27821 if (buf.length === 0) {
27822 return buf
27823 }
27824
27825 obj.copy(buf, 0, 0, len)
27826 return buf
27827 }
27828
27829 if (obj) {
27830 if (isArrayBufferView(obj) || 'length' in obj) {
27831 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
27832 return createBuffer(0)
27833 }
27834 return fromArrayLike(obj)
27835 }
27836
27837 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
27838 return fromArrayLike(obj.data)
27839 }
27840 }
27841
27842 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
27843 }
27844
27845 function checked (length) {
27846 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
27847 // length is NaN (which is otherwise coerced to zero.)
27848 if (length >= K_MAX_LENGTH) {
27849 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
27850 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
27851 }
27852 return length | 0
27853 }
27854
27855 function SlowBuffer (length) {
27856 if (+length != length) { // eslint-disable-line eqeqeq
27857 length = 0
27858 }
27859 return Buffer.alloc(+length)
27860 }
27861
27862 Buffer.isBuffer = function isBuffer (b) {
27863 return b != null && b._isBuffer === true
27864 }
27865
27866 Buffer.compare = function compare (a, b) {
27867 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
27868 throw new TypeError('Arguments must be Buffers')
27869 }
27870
27871 if (a === b) return 0
27872
27873 var x = a.length
27874 var y = b.length
27875
27876 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
27877 if (a[i] !== b[i]) {
27878 x = a[i]
27879 y = b[i]
27880 break
27881 }
27882 }
27883
27884 if (x < y) return -1
27885 if (y < x) return 1
27886 return 0
27887 }
27888
27889 Buffer.isEncoding = function isEncoding (encoding) {
27890 switch (String(encoding).toLowerCase()) {
27891 case 'hex':
27892 case 'utf8':
27893 case 'utf-8':
27894 case 'ascii':
27895 case 'latin1':
27896 case 'binary':
27897 case 'base64':
27898 case 'ucs2':
27899 case 'ucs-2':
27900 case 'utf16le':
27901 case 'utf-16le':
27902 return true
27903 default:
27904 return false
27905 }
27906 }
27907
27908 Buffer.concat = function concat (list, length) {
27909 if (!Array.isArray(list)) {
27910 throw new TypeError('"list" argument must be an Array of Buffers')
27911 }
27912
27913 if (list.length === 0) {
27914 return Buffer.alloc(0)
27915 }
27916
27917 var i
27918 if (length === undefined) {
27919 length = 0
27920 for (i = 0; i < list.length; ++i) {
27921 length += list[i].length
27922 }
27923 }
27924
27925 var buffer = Buffer.allocUnsafe(length)
27926 var pos = 0
27927 for (i = 0; i < list.length; ++i) {
27928 var buf = list[i]
27929 if (!Buffer.isBuffer(buf)) {
27930 throw new TypeError('"list" argument must be an Array of Buffers')
27931 }
27932 buf.copy(buffer, pos)
27933 pos += buf.length
27934 }
27935 return buffer
27936 }
27937
27938 function byteLength (string, encoding) {
27939 if (Buffer.isBuffer(string)) {
27940 return string.length
27941 }
27942 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
27943 return string.byteLength
27944 }
27945 if (typeof string !== 'string') {
27946 string = '' + string
27947 }
27948
27949 var len = string.length
27950 if (len === 0) return 0
27951
27952 // Use a for loop to avoid recursion
27953 var loweredCase = false
27954 for (;;) {
27955 switch (encoding) {
27956 case 'ascii':
27957 case 'latin1':
27958 case 'binary':
27959 return len
27960 case 'utf8':
27961 case 'utf-8':
27962 case undefined:
27963 return utf8ToBytes(string).length
27964 case 'ucs2':
27965 case 'ucs-2':
27966 case 'utf16le':
27967 case 'utf-16le':
27968 return len * 2
27969 case 'hex':
27970 return len >>> 1
27971 case 'base64':
27972 return base64ToBytes(string).length
27973 default:
27974 if (loweredCase) return utf8ToBytes(string).length // assume utf8
27975 encoding = ('' + encoding).toLowerCase()
27976 loweredCase = true
27977 }
27978 }
27979 }
27980 Buffer.byteLength = byteLength
27981
27982 function slowToString (encoding, start, end) {
27983 var loweredCase = false
27984
27985 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
27986 // property of a typed array.
27987
27988 // This behaves neither like String nor Uint8Array in that we set start/end
27989 // to their upper/lower bounds if the value passed is out of range.
27990 // undefined is handled specially as per ECMA-262 6th Edition,
27991 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
27992 if (start === undefined || start < 0) {
27993 start = 0
27994 }
27995 // Return early if start > this.length. Done here to prevent potential uint32
27996 // coercion fail below.
27997 if (start > this.length) {
27998 return ''
27999 }
28000
28001 if (end === undefined || end > this.length) {
28002 end = this.length
28003 }
28004
28005 if (end <= 0) {
28006 return ''
28007 }
28008
28009 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
28010 end >>>= 0
28011 start >>>= 0
28012
28013 if (end <= start) {
28014 return ''
28015 }
28016
28017 if (!encoding) encoding = 'utf8'
28018
28019 while (true) {
28020 switch (encoding) {
28021 case 'hex':
28022 return hexSlice(this, start, end)
28023
28024 case 'utf8':
28025 case 'utf-8':
28026 return utf8Slice(this, start, end)
28027
28028 case 'ascii':
28029 return asciiSlice(this, start, end)
28030
28031 case 'latin1':
28032 case 'binary':
28033 return latin1Slice(this, start, end)
28034
28035 case 'base64':
28036 return base64Slice(this, start, end)
28037
28038 case 'ucs2':
28039 case 'ucs-2':
28040 case 'utf16le':
28041 case 'utf-16le':
28042 return utf16leSlice(this, start, end)
28043
28044 default:
28045 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28046 encoding = (encoding + '').toLowerCase()
28047 loweredCase = true
28048 }
28049 }
28050 }
28051
28052 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
28053 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
28054 // reliably in a browserify context because there could be multiple different
28055 // copies of the 'buffer' package in use. This method works even for Buffer
28056 // instances that were created from another copy of the `buffer` package.
28057 // See: https://github.com/feross/buffer/issues/154
28058 Buffer.prototype._isBuffer = true
28059
28060 function swap (b, n, m) {
28061 var i = b[n]
28062 b[n] = b[m]
28063 b[m] = i
28064 }
28065
28066 Buffer.prototype.swap16 = function swap16 () {
28067 var len = this.length
28068 if (len % 2 !== 0) {
28069 throw new RangeError('Buffer size must be a multiple of 16-bits')
28070 }
28071 for (var i = 0; i < len; i += 2) {
28072 swap(this, i, i + 1)
28073 }
28074 return this
28075 }
28076
28077 Buffer.prototype.swap32 = function swap32 () {
28078 var len = this.length
28079 if (len % 4 !== 0) {
28080 throw new RangeError('Buffer size must be a multiple of 32-bits')
28081 }
28082 for (var i = 0; i < len; i += 4) {
28083 swap(this, i, i + 3)
28084 swap(this, i + 1, i + 2)
28085 }
28086 return this
28087 }
28088
28089 Buffer.prototype.swap64 = function swap64 () {
28090 var len = this.length
28091 if (len % 8 !== 0) {
28092 throw new RangeError('Buffer size must be a multiple of 64-bits')
28093 }
28094 for (var i = 0; i < len; i += 8) {
28095 swap(this, i, i + 7)
28096 swap(this, i + 1, i + 6)
28097 swap(this, i + 2, i + 5)
28098 swap(this, i + 3, i + 4)
28099 }
28100 return this
28101 }
28102
28103 Buffer.prototype.toString = function toString () {
28104 var length = this.length
28105 if (length === 0) return ''
28106 if (arguments.length === 0) return utf8Slice(this, 0, length)
28107 return slowToString.apply(this, arguments)
28108 }
28109
28110 Buffer.prototype.equals = function equals (b) {
28111 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
28112 if (this === b) return true
28113 return Buffer.compare(this, b) === 0
28114 }
28115
28116 Buffer.prototype.inspect = function inspect () {
28117 var str = ''
28118 var max = exports.INSPECT_MAX_BYTES
28119 if (this.length > 0) {
28120 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
28121 if (this.length > max) str += ' ... '
28122 }
28123 return '<Buffer ' + str + '>'
28124 }
28125
28126 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
28127 if (!Buffer.isBuffer(target)) {
28128 throw new TypeError('Argument must be a Buffer')
28129 }
28130
28131 if (start === undefined) {
28132 start = 0
28133 }
28134 if (end === undefined) {
28135 end = target ? target.length : 0
28136 }
28137 if (thisStart === undefined) {
28138 thisStart = 0
28139 }
28140 if (thisEnd === undefined) {
28141 thisEnd = this.length
28142 }
28143
28144 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
28145 throw new RangeError('out of range index')
28146 }
28147
28148 if (thisStart >= thisEnd && start >= end) {
28149 return 0
28150 }
28151 if (thisStart >= thisEnd) {
28152 return -1
28153 }
28154 if (start >= end) {
28155 return 1
28156 }
28157
28158 start >>>= 0
28159 end >>>= 0
28160 thisStart >>>= 0
28161 thisEnd >>>= 0
28162
28163 if (this === target) return 0
28164
28165 var x = thisEnd - thisStart
28166 var y = end - start
28167 var len = Math.min(x, y)
28168
28169 var thisCopy = this.slice(thisStart, thisEnd)
28170 var targetCopy = target.slice(start, end)
28171
28172 for (var i = 0; i < len; ++i) {
28173 if (thisCopy[i] !== targetCopy[i]) {
28174 x = thisCopy[i]
28175 y = targetCopy[i]
28176 break
28177 }
28178 }
28179
28180 if (x < y) return -1
28181 if (y < x) return 1
28182 return 0
28183 }
28184
28185 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
28186 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
28187 //
28188 // Arguments:
28189 // - buffer - a Buffer to search
28190 // - val - a string, Buffer, or number
28191 // - byteOffset - an index into `buffer`; will be clamped to an int32
28192 // - encoding - an optional encoding, relevant is val is a string
28193 // - dir - true for indexOf, false for lastIndexOf
28194 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
28195 // Empty buffer means no match
28196 if (buffer.length === 0) return -1
28197
28198 // Normalize byteOffset
28199 if (typeof byteOffset === 'string') {
28200 encoding = byteOffset
28201 byteOffset = 0
28202 } else if (byteOffset > 0x7fffffff) {
28203 byteOffset = 0x7fffffff
28204 } else if (byteOffset < -0x80000000) {
28205 byteOffset = -0x80000000
28206 }
28207 byteOffset = +byteOffset // Coerce to Number.
28208 if (numberIsNaN(byteOffset)) {
28209 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
28210 byteOffset = dir ? 0 : (buffer.length - 1)
28211 }
28212
28213 // Normalize byteOffset: negative offsets start from the end of the buffer
28214 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
28215 if (byteOffset >= buffer.length) {
28216 if (dir) return -1
28217 else byteOffset = buffer.length - 1
28218 } else if (byteOffset < 0) {
28219 if (dir) byteOffset = 0
28220 else return -1
28221 }
28222
28223 // Normalize val
28224 if (typeof val === 'string') {
28225 val = Buffer.from(val, encoding)
28226 }
28227
28228 // Finally, search either indexOf (if dir is true) or lastIndexOf
28229 if (Buffer.isBuffer(val)) {
28230 // Special case: looking for empty string/buffer always fails
28231 if (val.length === 0) {
28232 return -1
28233 }
28234 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
28235 } else if (typeof val === 'number') {
28236 val = val & 0xFF // Search for a byte value [0-255]
28237 if (typeof Uint8Array.prototype.indexOf === 'function') {
28238 if (dir) {
28239 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
28240 } else {
28241 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
28242 }
28243 }
28244 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
28245 }
28246
28247 throw new TypeError('val must be string, number or Buffer')
28248 }
28249
28250 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
28251 var indexSize = 1
28252 var arrLength = arr.length
28253 var valLength = val.length
28254
28255 if (encoding !== undefined) {
28256 encoding = String(encoding).toLowerCase()
28257 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
28258 encoding === 'utf16le' || encoding === 'utf-16le') {
28259 if (arr.length < 2 || val.length < 2) {
28260 return -1
28261 }
28262 indexSize = 2
28263 arrLength /= 2
28264 valLength /= 2
28265 byteOffset /= 2
28266 }
28267 }
28268
28269 function read (buf, i) {
28270 if (indexSize === 1) {
28271 return buf[i]
28272 } else {
28273 return buf.readUInt16BE(i * indexSize)
28274 }
28275 }
28276
28277 var i
28278 if (dir) {
28279 var foundIndex = -1
28280 for (i = byteOffset; i < arrLength; i++) {
28281 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
28282 if (foundIndex === -1) foundIndex = i
28283 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
28284 } else {
28285 if (foundIndex !== -1) i -= i - foundIndex
28286 foundIndex = -1
28287 }
28288 }
28289 } else {
28290 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
28291 for (i = byteOffset; i >= 0; i--) {
28292 var found = true
28293 for (var j = 0; j < valLength; j++) {
28294 if (read(arr, i + j) !== read(val, j)) {
28295 found = false
28296 break
28297 }
28298 }
28299 if (found) return i
28300 }
28301 }
28302
28303 return -1
28304 }
28305
28306 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
28307 return this.indexOf(val, byteOffset, encoding) !== -1
28308 }
28309
28310 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
28311 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
28312 }
28313
28314 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
28315 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
28316 }
28317
28318 function hexWrite (buf, string, offset, length) {
28319 offset = Number(offset) || 0
28320 var remaining = buf.length - offset
28321 if (!length) {
28322 length = remaining
28323 } else {
28324 length = Number(length)
28325 if (length > remaining) {
28326 length = remaining
28327 }
28328 }
28329
28330 // must be an even number of digits
28331 var strLen = string.length
28332 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
28333
28334 if (length > strLen / 2) {
28335 length = strLen / 2
28336 }
28337 for (var i = 0; i < length; ++i) {
28338 var parsed = parseInt(string.substr(i * 2, 2), 16)
28339 if (numberIsNaN(parsed)) return i
28340 buf[offset + i] = parsed
28341 }
28342 return i
28343 }
28344
28345 function utf8Write (buf, string, offset, length) {
28346 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
28347 }
28348
28349 function asciiWrite (buf, string, offset, length) {
28350 return blitBuffer(asciiToBytes(string), buf, offset, length)
28351 }
28352
28353 function latin1Write (buf, string, offset, length) {
28354 return asciiWrite(buf, string, offset, length)
28355 }
28356
28357 function base64Write (buf, string, offset, length) {
28358 return blitBuffer(base64ToBytes(string), buf, offset, length)
28359 }
28360
28361 function ucs2Write (buf, string, offset, length) {
28362 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
28363 }
28364
28365 Buffer.prototype.write = function write (string, offset, length, encoding) {
28366 // Buffer#write(string)
28367 if (offset === undefined) {
28368 encoding = 'utf8'
28369 length = this.length
28370 offset = 0
28371 // Buffer#write(string, encoding)
28372 } else if (length === undefined && typeof offset === 'string') {
28373 encoding = offset
28374 length = this.length
28375 offset = 0
28376 // Buffer#write(string, offset[, length][, encoding])
28377 } else if (isFinite(offset)) {
28378 offset = offset >>> 0
28379 if (isFinite(length)) {
28380 length = length >>> 0
28381 if (encoding === undefined) encoding = 'utf8'
28382 } else {
28383 encoding = length
28384 length = undefined
28385 }
28386 } else {
28387 throw new Error(
28388 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
28389 )
28390 }
28391
28392 var remaining = this.length - offset
28393 if (length === undefined || length > remaining) length = remaining
28394
28395 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
28396 throw new RangeError('Attempt to write outside buffer bounds')
28397 }
28398
28399 if (!encoding) encoding = 'utf8'
28400
28401 var loweredCase = false
28402 for (;;) {
28403 switch (encoding) {
28404 case 'hex':
28405 return hexWrite(this, string, offset, length)
28406
28407 case 'utf8':
28408 case 'utf-8':
28409 return utf8Write(this, string, offset, length)
28410
28411 case 'ascii':
28412 return asciiWrite(this, string, offset, length)
28413
28414 case 'latin1':
28415 case 'binary':
28416 return latin1Write(this, string, offset, length)
28417
28418 case 'base64':
28419 // Warning: maxLength not taken into account in base64Write
28420 return base64Write(this, string, offset, length)
28421
28422 case 'ucs2':
28423 case 'ucs-2':
28424 case 'utf16le':
28425 case 'utf-16le':
28426 return ucs2Write(this, string, offset, length)
28427
28428 default:
28429 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28430 encoding = ('' + encoding).toLowerCase()
28431 loweredCase = true
28432 }
28433 }
28434 }
28435
28436 Buffer.prototype.toJSON = function toJSON () {
28437 return {
28438 type: 'Buffer',
28439 data: Array.prototype.slice.call(this._arr || this, 0)
28440 }
28441 }
28442
28443 function base64Slice (buf, start, end) {
28444 if (start === 0 && end === buf.length) {
28445 return base64.fromByteArray(buf)
28446 } else {
28447 return base64.fromByteArray(buf.slice(start, end))
28448 }
28449 }
28450
28451 function utf8Slice (buf, start, end) {
28452 end = Math.min(buf.length, end)
28453 var res = []
28454
28455 var i = start
28456 while (i < end) {
28457 var firstByte = buf[i]
28458 var codePoint = null
28459 var bytesPerSequence = (firstByte > 0xEF) ? 4
28460 : (firstByte > 0xDF) ? 3
28461 : (firstByte > 0xBF) ? 2
28462 : 1
28463
28464 if (i + bytesPerSequence <= end) {
28465 var secondByte, thirdByte, fourthByte, tempCodePoint
28466
28467 switch (bytesPerSequence) {
28468 case 1:
28469 if (firstByte < 0x80) {
28470 codePoint = firstByte
28471 }
28472 break
28473 case 2:
28474 secondByte = buf[i + 1]
28475 if ((secondByte & 0xC0) === 0x80) {
28476 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
28477 if (tempCodePoint > 0x7F) {
28478 codePoint = tempCodePoint
28479 }
28480 }
28481 break
28482 case 3:
28483 secondByte = buf[i + 1]
28484 thirdByte = buf[i + 2]
28485 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
28486 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
28487 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
28488 codePoint = tempCodePoint
28489 }
28490 }
28491 break
28492 case 4:
28493 secondByte = buf[i + 1]
28494 thirdByte = buf[i + 2]
28495 fourthByte = buf[i + 3]
28496 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
28497 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
28498 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
28499 codePoint = tempCodePoint
28500 }
28501 }
28502 }
28503 }
28504
28505 if (codePoint === null) {
28506 // we did not generate a valid codePoint so insert a
28507 // replacement char (U+FFFD) and advance only 1 byte
28508 codePoint = 0xFFFD
28509 bytesPerSequence = 1
28510 } else if (codePoint > 0xFFFF) {
28511 // encode to utf16 (surrogate pair dance)
28512 codePoint -= 0x10000
28513 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
28514 codePoint = 0xDC00 | codePoint & 0x3FF
28515 }
28516
28517 res.push(codePoint)
28518 i += bytesPerSequence
28519 }
28520
28521 return decodeCodePointsArray(res)
28522 }
28523
28524 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
28525 // the lowest limit is Chrome, with 0x10000 args.
28526 // We go 1 magnitude less, for safety
28527 var MAX_ARGUMENTS_LENGTH = 0x1000
28528
28529 function decodeCodePointsArray (codePoints) {
28530 var len = codePoints.length
28531 if (len <= MAX_ARGUMENTS_LENGTH) {
28532 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
28533 }
28534
28535 // Decode in chunks to avoid "call stack size exceeded".
28536 var res = ''
28537 var i = 0
28538 while (i < len) {
28539 res += String.fromCharCode.apply(
28540 String,
28541 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
28542 )
28543 }
28544 return res
28545 }
28546
28547 function asciiSlice (buf, start, end) {
28548 var ret = ''
28549 end = Math.min(buf.length, end)
28550
28551 for (var i = start; i < end; ++i) {
28552 ret += String.fromCharCode(buf[i] & 0x7F)
28553 }
28554 return ret
28555 }
28556
28557 function latin1Slice (buf, start, end) {
28558 var ret = ''
28559 end = Math.min(buf.length, end)
28560
28561 for (var i = start; i < end; ++i) {
28562 ret += String.fromCharCode(buf[i])
28563 }
28564 return ret
28565 }
28566
28567 function hexSlice (buf, start, end) {
28568 var len = buf.length
28569
28570 if (!start || start < 0) start = 0
28571 if (!end || end < 0 || end > len) end = len
28572
28573 var out = ''
28574 for (var i = start; i < end; ++i) {
28575 out += toHex(buf[i])
28576 }
28577 return out
28578 }
28579
28580 function utf16leSlice (buf, start, end) {
28581 var bytes = buf.slice(start, end)
28582 var res = ''
28583 for (var i = 0; i < bytes.length; i += 2) {
28584 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
28585 }
28586 return res
28587 }
28588
28589 Buffer.prototype.slice = function slice (start, end) {
28590 var len = this.length
28591 start = ~~start
28592 end = end === undefined ? len : ~~end
28593
28594 if (start < 0) {
28595 start += len
28596 if (start < 0) start = 0
28597 } else if (start > len) {
28598 start = len
28599 }
28600
28601 if (end < 0) {
28602 end += len
28603 if (end < 0) end = 0
28604 } else if (end > len) {
28605 end = len
28606 }
28607
28608 if (end < start) end = start
28609
28610 var newBuf = this.subarray(start, end)
28611 // Return an augmented `Uint8Array` instance
28612 newBuf.__proto__ = Buffer.prototype
28613 return newBuf
28614 }
28615
28616 /*
28617 * Need to make sure that buffer isn't trying to write out of bounds.
28618 */
28619 function checkOffset (offset, ext, length) {
28620 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
28621 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
28622 }
28623
28624 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
28625 offset = offset >>> 0
28626 byteLength = byteLength >>> 0
28627 if (!noAssert) checkOffset(offset, byteLength, this.length)
28628
28629 var val = this[offset]
28630 var mul = 1
28631 var i = 0
28632 while (++i < byteLength && (mul *= 0x100)) {
28633 val += this[offset + i] * mul
28634 }
28635
28636 return val
28637 }
28638
28639 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
28640 offset = offset >>> 0
28641 byteLength = byteLength >>> 0
28642 if (!noAssert) {
28643 checkOffset(offset, byteLength, this.length)
28644 }
28645
28646 var val = this[offset + --byteLength]
28647 var mul = 1
28648 while (byteLength > 0 && (mul *= 0x100)) {
28649 val += this[offset + --byteLength] * mul
28650 }
28651
28652 return val
28653 }
28654
28655 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
28656 offset = offset >>> 0
28657 if (!noAssert) checkOffset(offset, 1, this.length)
28658 return this[offset]
28659 }
28660
28661 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
28662 offset = offset >>> 0
28663 if (!noAssert) checkOffset(offset, 2, this.length)
28664 return this[offset] | (this[offset + 1] << 8)
28665 }
28666
28667 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
28668 offset = offset >>> 0
28669 if (!noAssert) checkOffset(offset, 2, this.length)
28670 return (this[offset] << 8) | this[offset + 1]
28671 }
28672
28673 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
28674 offset = offset >>> 0
28675 if (!noAssert) checkOffset(offset, 4, this.length)
28676
28677 return ((this[offset]) |
28678 (this[offset + 1] << 8) |
28679 (this[offset + 2] << 16)) +
28680 (this[offset + 3] * 0x1000000)
28681 }
28682
28683 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
28684 offset = offset >>> 0
28685 if (!noAssert) checkOffset(offset, 4, this.length)
28686
28687 return (this[offset] * 0x1000000) +
28688 ((this[offset + 1] << 16) |
28689 (this[offset + 2] << 8) |
28690 this[offset + 3])
28691 }
28692
28693 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
28694 offset = offset >>> 0
28695 byteLength = byteLength >>> 0
28696 if (!noAssert) checkOffset(offset, byteLength, this.length)
28697
28698 var val = this[offset]
28699 var mul = 1
28700 var i = 0
28701 while (++i < byteLength && (mul *= 0x100)) {
28702 val += this[offset + i] * mul
28703 }
28704 mul *= 0x80
28705
28706 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28707
28708 return val
28709 }
28710
28711 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
28712 offset = offset >>> 0
28713 byteLength = byteLength >>> 0
28714 if (!noAssert) checkOffset(offset, byteLength, this.length)
28715
28716 var i = byteLength
28717 var mul = 1
28718 var val = this[offset + --i]
28719 while (i > 0 && (mul *= 0x100)) {
28720 val += this[offset + --i] * mul
28721 }
28722 mul *= 0x80
28723
28724 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28725
28726 return val
28727 }
28728
28729 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
28730 offset = offset >>> 0
28731 if (!noAssert) checkOffset(offset, 1, this.length)
28732 if (!(this[offset] & 0x80)) return (this[offset])
28733 return ((0xff - this[offset] + 1) * -1)
28734 }
28735
28736 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
28737 offset = offset >>> 0
28738 if (!noAssert) checkOffset(offset, 2, this.length)
28739 var val = this[offset] | (this[offset + 1] << 8)
28740 return (val & 0x8000) ? val | 0xFFFF0000 : val
28741 }
28742
28743 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
28744 offset = offset >>> 0
28745 if (!noAssert) checkOffset(offset, 2, this.length)
28746 var val = this[offset + 1] | (this[offset] << 8)
28747 return (val & 0x8000) ? val | 0xFFFF0000 : val
28748 }
28749
28750 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
28751 offset = offset >>> 0
28752 if (!noAssert) checkOffset(offset, 4, this.length)
28753
28754 return (this[offset]) |
28755 (this[offset + 1] << 8) |
28756 (this[offset + 2] << 16) |
28757 (this[offset + 3] << 24)
28758 }
28759
28760 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
28761 offset = offset >>> 0
28762 if (!noAssert) checkOffset(offset, 4, this.length)
28763
28764 return (this[offset] << 24) |
28765 (this[offset + 1] << 16) |
28766 (this[offset + 2] << 8) |
28767 (this[offset + 3])
28768 }
28769
28770 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
28771 offset = offset >>> 0
28772 if (!noAssert) checkOffset(offset, 4, this.length)
28773 return ieee754.read(this, offset, true, 23, 4)
28774 }
28775
28776 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
28777 offset = offset >>> 0
28778 if (!noAssert) checkOffset(offset, 4, this.length)
28779 return ieee754.read(this, offset, false, 23, 4)
28780 }
28781
28782 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
28783 offset = offset >>> 0
28784 if (!noAssert) checkOffset(offset, 8, this.length)
28785 return ieee754.read(this, offset, true, 52, 8)
28786 }
28787
28788 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
28789 offset = offset >>> 0
28790 if (!noAssert) checkOffset(offset, 8, this.length)
28791 return ieee754.read(this, offset, false, 52, 8)
28792 }
28793
28794 function checkInt (buf, value, offset, ext, max, min) {
28795 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
28796 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
28797 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28798 }
28799
28800 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
28801 value = +value
28802 offset = offset >>> 0
28803 byteLength = byteLength >>> 0
28804 if (!noAssert) {
28805 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28806 checkInt(this, value, offset, byteLength, maxBytes, 0)
28807 }
28808
28809 var mul = 1
28810 var i = 0
28811 this[offset] = value & 0xFF
28812 while (++i < byteLength && (mul *= 0x100)) {
28813 this[offset + i] = (value / mul) & 0xFF
28814 }
28815
28816 return offset + byteLength
28817 }
28818
28819 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
28820 value = +value
28821 offset = offset >>> 0
28822 byteLength = byteLength >>> 0
28823 if (!noAssert) {
28824 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28825 checkInt(this, value, offset, byteLength, maxBytes, 0)
28826 }
28827
28828 var i = byteLength - 1
28829 var mul = 1
28830 this[offset + i] = value & 0xFF
28831 while (--i >= 0 && (mul *= 0x100)) {
28832 this[offset + i] = (value / mul) & 0xFF
28833 }
28834
28835 return offset + byteLength
28836 }
28837
28838 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
28839 value = +value
28840 offset = offset >>> 0
28841 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
28842 this[offset] = (value & 0xff)
28843 return offset + 1
28844 }
28845
28846 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
28847 value = +value
28848 offset = offset >>> 0
28849 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28850 this[offset] = (value & 0xff)
28851 this[offset + 1] = (value >>> 8)
28852 return offset + 2
28853 }
28854
28855 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
28856 value = +value
28857 offset = offset >>> 0
28858 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28859 this[offset] = (value >>> 8)
28860 this[offset + 1] = (value & 0xff)
28861 return offset + 2
28862 }
28863
28864 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
28865 value = +value
28866 offset = offset >>> 0
28867 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28868 this[offset + 3] = (value >>> 24)
28869 this[offset + 2] = (value >>> 16)
28870 this[offset + 1] = (value >>> 8)
28871 this[offset] = (value & 0xff)
28872 return offset + 4
28873 }
28874
28875 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
28876 value = +value
28877 offset = offset >>> 0
28878 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28879 this[offset] = (value >>> 24)
28880 this[offset + 1] = (value >>> 16)
28881 this[offset + 2] = (value >>> 8)
28882 this[offset + 3] = (value & 0xff)
28883 return offset + 4
28884 }
28885
28886 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
28887 value = +value
28888 offset = offset >>> 0
28889 if (!noAssert) {
28890 var limit = Math.pow(2, (8 * byteLength) - 1)
28891
28892 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28893 }
28894
28895 var i = 0
28896 var mul = 1
28897 var sub = 0
28898 this[offset] = value & 0xFF
28899 while (++i < byteLength && (mul *= 0x100)) {
28900 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
28901 sub = 1
28902 }
28903 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28904 }
28905
28906 return offset + byteLength
28907 }
28908
28909 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
28910 value = +value
28911 offset = offset >>> 0
28912 if (!noAssert) {
28913 var limit = Math.pow(2, (8 * byteLength) - 1)
28914
28915 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28916 }
28917
28918 var i = byteLength - 1
28919 var mul = 1
28920 var sub = 0
28921 this[offset + i] = value & 0xFF
28922 while (--i >= 0 && (mul *= 0x100)) {
28923 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
28924 sub = 1
28925 }
28926 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28927 }
28928
28929 return offset + byteLength
28930 }
28931
28932 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
28933 value = +value
28934 offset = offset >>> 0
28935 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
28936 if (value < 0) value = 0xff + value + 1
28937 this[offset] = (value & 0xff)
28938 return offset + 1
28939 }
28940
28941 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
28942 value = +value
28943 offset = offset >>> 0
28944 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28945 this[offset] = (value & 0xff)
28946 this[offset + 1] = (value >>> 8)
28947 return offset + 2
28948 }
28949
28950 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
28951 value = +value
28952 offset = offset >>> 0
28953 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28954 this[offset] = (value >>> 8)
28955 this[offset + 1] = (value & 0xff)
28956 return offset + 2
28957 }
28958
28959 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
28960 value = +value
28961 offset = offset >>> 0
28962 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28963 this[offset] = (value & 0xff)
28964 this[offset + 1] = (value >>> 8)
28965 this[offset + 2] = (value >>> 16)
28966 this[offset + 3] = (value >>> 24)
28967 return offset + 4
28968 }
28969
28970 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
28971 value = +value
28972 offset = offset >>> 0
28973 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28974 if (value < 0) value = 0xffffffff + value + 1
28975 this[offset] = (value >>> 24)
28976 this[offset + 1] = (value >>> 16)
28977 this[offset + 2] = (value >>> 8)
28978 this[offset + 3] = (value & 0xff)
28979 return offset + 4
28980 }
28981
28982 function checkIEEE754 (buf, value, offset, ext, max, min) {
28983 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28984 if (offset < 0) throw new RangeError('Index out of range')
28985 }
28986
28987 function writeFloat (buf, value, offset, littleEndian, noAssert) {
28988 value = +value
28989 offset = offset >>> 0
28990 if (!noAssert) {
28991 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
28992 }
28993 ieee754.write(buf, value, offset, littleEndian, 23, 4)
28994 return offset + 4
28995 }
28996
28997 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
28998 return writeFloat(this, value, offset, true, noAssert)
28999 }
29000
29001 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
29002 return writeFloat(this, value, offset, false, noAssert)
29003 }
29004
29005 function writeDouble (buf, value, offset, littleEndian, noAssert) {
29006 value = +value
29007 offset = offset >>> 0
29008 if (!noAssert) {
29009 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
29010 }
29011 ieee754.write(buf, value, offset, littleEndian, 52, 8)
29012 return offset + 8
29013 }
29014
29015 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
29016 return writeDouble(this, value, offset, true, noAssert)
29017 }
29018
29019 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
29020 return writeDouble(this, value, offset, false, noAssert)
29021 }
29022
29023 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
29024 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
29025 if (!start) start = 0
29026 if (!end && end !== 0) end = this.length
29027 if (targetStart >= target.length) targetStart = target.length
29028 if (!targetStart) targetStart = 0
29029 if (end > 0 && end < start) end = start
29030
29031 // Copy 0 bytes; we're done
29032 if (end === start) return 0
29033 if (target.length === 0 || this.length === 0) return 0
29034
29035 // Fatal error conditions
29036 if (targetStart < 0) {
29037 throw new RangeError('targetStart out of bounds')
29038 }
29039 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
29040 if (end < 0) throw new RangeError('sourceEnd out of bounds')
29041
29042 // Are we oob?
29043 if (end > this.length) end = this.length
29044 if (target.length - targetStart < end - start) {
29045 end = target.length - targetStart + start
29046 }
29047
29048 var len = end - start
29049 var i
29050
29051 if (this === target && start < targetStart && targetStart < end) {
29052 // descending copy from end
29053 for (i = len - 1; i >= 0; --i) {
29054 target[i + targetStart] = this[i + start]
29055 }
29056 } else if (len < 1000) {
29057 // ascending copy from start
29058 for (i = 0; i < len; ++i) {
29059 target[i + targetStart] = this[i + start]
29060 }
29061 } else {
29062 Uint8Array.prototype.set.call(
29063 target,
29064 this.subarray(start, start + len),
29065 targetStart
29066 )
29067 }
29068
29069 return len
29070 }
29071
29072 // Usage:
29073 // buffer.fill(number[, offset[, end]])
29074 // buffer.fill(buffer[, offset[, end]])
29075 // buffer.fill(string[, offset[, end]][, encoding])
29076 Buffer.prototype.fill = function fill (val, start, end, encoding) {
29077 // Handle string cases:
29078 if (typeof val === 'string') {
29079 if (typeof start === 'string') {
29080 encoding = start
29081 start = 0
29082 end = this.length
29083 } else if (typeof end === 'string') {
29084 encoding = end
29085 end = this.length
29086 }
29087 if (val.length === 1) {
29088 var code = val.charCodeAt(0)
29089 if (code < 256) {
29090 val = code
29091 }
29092 }
29093 if (encoding !== undefined && typeof encoding !== 'string') {
29094 throw new TypeError('encoding must be a string')
29095 }
29096 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
29097 throw new TypeError('Unknown encoding: ' + encoding)
29098 }
29099 } else if (typeof val === 'number') {
29100 val = val & 255
29101 }
29102
29103 // Invalid ranges are not set to a default, so can range check early.
29104 if (start < 0 || this.length < start || this.length < end) {
29105 throw new RangeError('Out of range index')
29106 }
29107
29108 if (end <= start) {
29109 return this
29110 }
29111
29112 start = start >>> 0
29113 end = end === undefined ? this.length : end >>> 0
29114
29115 if (!val) val = 0
29116
29117 var i
29118 if (typeof val === 'number') {
29119 for (i = start; i < end; ++i) {
29120 this[i] = val
29121 }
29122 } else {
29123 var bytes = Buffer.isBuffer(val)
29124 ? val
29125 : new Buffer(val, encoding)
29126 var len = bytes.length
29127 for (i = 0; i < end - start; ++i) {
29128 this[i + start] = bytes[i % len]
29129 }
29130 }
29131
29132 return this
29133 }
29134
29135 // HELPER FUNCTIONS
29136 // ================
29137
29138 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
29139
29140 function base64clean (str) {
29141 // Node strips out invalid characters like \n and \t from the string, base64-js does not
29142 str = str.trim().replace(INVALID_BASE64_RE, '')
29143 // Node converts strings with length < 2 to ''
29144 if (str.length < 2) return ''
29145 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
29146 while (str.length % 4 !== 0) {
29147 str = str + '='
29148 }
29149 return str
29150 }
29151
29152 function toHex (n) {
29153 if (n < 16) return '0' + n.toString(16)
29154 return n.toString(16)
29155 }
29156
29157 function utf8ToBytes (string, units) {
29158 units = units || Infinity
29159 var codePoint
29160 var length = string.length
29161 var leadSurrogate = null
29162 var bytes = []
29163
29164 for (var i = 0; i < length; ++i) {
29165 codePoint = string.charCodeAt(i)
29166
29167 // is surrogate component
29168 if (codePoint > 0xD7FF && codePoint < 0xE000) {
29169 // last char was a lead
29170 if (!leadSurrogate) {
29171 // no lead yet
29172 if (codePoint > 0xDBFF) {
29173 // unexpected trail
29174 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29175 continue
29176 } else if (i + 1 === length) {
29177 // unpaired lead
29178 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29179 continue
29180 }
29181
29182 // valid lead
29183 leadSurrogate = codePoint
29184
29185 continue
29186 }
29187
29188 // 2 leads in a row
29189 if (codePoint < 0xDC00) {
29190 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29191 leadSurrogate = codePoint
29192 continue
29193 }
29194
29195 // valid surrogate pair
29196 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
29197 } else if (leadSurrogate) {
29198 // valid bmp char, but last char was a lead
29199 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29200 }
29201
29202 leadSurrogate = null
29203
29204 // encode utf8
29205 if (codePoint < 0x80) {
29206 if ((units -= 1) < 0) break
29207 bytes.push(codePoint)
29208 } else if (codePoint < 0x800) {
29209 if ((units -= 2) < 0) break
29210 bytes.push(
29211 codePoint >> 0x6 | 0xC0,
29212 codePoint & 0x3F | 0x80
29213 )
29214 } else if (codePoint < 0x10000) {
29215 if ((units -= 3) < 0) break
29216 bytes.push(
29217 codePoint >> 0xC | 0xE0,
29218 codePoint >> 0x6 & 0x3F | 0x80,
29219 codePoint & 0x3F | 0x80
29220 )
29221 } else if (codePoint < 0x110000) {
29222 if ((units -= 4) < 0) break
29223 bytes.push(
29224 codePoint >> 0x12 | 0xF0,
29225 codePoint >> 0xC & 0x3F | 0x80,
29226 codePoint >> 0x6 & 0x3F | 0x80,
29227 codePoint & 0x3F | 0x80
29228 )
29229 } else {
29230 throw new Error('Invalid code point')
29231 }
29232 }
29233
29234 return bytes
29235 }
29236
29237 function asciiToBytes (str) {
29238 var byteArray = []
29239 for (var i = 0; i < str.length; ++i) {
29240 // Node's code seems to be doing this and not & 0x7F..
29241 byteArray.push(str.charCodeAt(i) & 0xFF)
29242 }
29243 return byteArray
29244 }
29245
29246 function utf16leToBytes (str, units) {
29247 var c, hi, lo
29248 var byteArray = []
29249 for (var i = 0; i < str.length; ++i) {
29250 if ((units -= 2) < 0) break
29251
29252 c = str.charCodeAt(i)
29253 hi = c >> 8
29254 lo = c % 256
29255 byteArray.push(lo)
29256 byteArray.push(hi)
29257 }
29258
29259 return byteArray
29260 }
29261
29262 function base64ToBytes (str) {
29263 return base64.toByteArray(base64clean(str))
29264 }
29265
29266 function blitBuffer (src, dst, offset, length) {
29267 for (var i = 0; i < length; ++i) {
29268 if ((i + offset >= dst.length) || (i >= src.length)) break
29269 dst[i + offset] = src[i]
29270 }
29271 return i
29272 }
29273
29274 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
29275 function isArrayBufferView (obj) {
29276 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
29277 }
29278
29279 function numberIsNaN (obj) {
29280 return obj !== obj // eslint-disable-line no-self-compare
29281 }
29282
29283 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
29284 (function (Buffer){
29285 // Copyright Joyent, Inc. and other Node contributors.
29286 //
29287 // Permission is hereby granted, free of charge, to any person obtaining a
29288 // copy of this software and associated documentation files (the
29289 // "Software"), to deal in the Software without restriction, including
29290 // without limitation the rights to use, copy, modify, merge, publish,
29291 // distribute, sublicense, and/or sell copies of the Software, and to permit
29292 // persons to whom the Software is furnished to do so, subject to the
29293 // following conditions:
29294 //
29295 // The above copyright notice and this permission notice shall be included
29296 // in all copies or substantial portions of the Software.
29297 //
29298 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29299 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29300 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29301 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29302 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29303 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29304 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29305
29306 // NOTE: These type checking functions intentionally don't use `instanceof`
29307 // because it is fragile and can be easily faked with `Object.create()`.
29308
29309 function isArray(arg) {
29310 if (Array.isArray) {
29311 return Array.isArray(arg);
29312 }
29313 return objectToString(arg) === '[object Array]';
29314 }
29315 exports.isArray = isArray;
29316
29317 function isBoolean(arg) {
29318 return typeof arg === 'boolean';
29319 }
29320 exports.isBoolean = isBoolean;
29321
29322 function isNull(arg) {
29323 return arg === null;
29324 }
29325 exports.isNull = isNull;
29326
29327 function isNullOrUndefined(arg) {
29328 return arg == null;
29329 }
29330 exports.isNullOrUndefined = isNullOrUndefined;
29331
29332 function isNumber(arg) {
29333 return typeof arg === 'number';
29334 }
29335 exports.isNumber = isNumber;
29336
29337 function isString(arg) {
29338 return typeof arg === 'string';
29339 }
29340 exports.isString = isString;
29341
29342 function isSymbol(arg) {
29343 return typeof arg === 'symbol';
29344 }
29345 exports.isSymbol = isSymbol;
29346
29347 function isUndefined(arg) {
29348 return arg === void 0;
29349 }
29350 exports.isUndefined = isUndefined;
29351
29352 function isRegExp(re) {
29353 return objectToString(re) === '[object RegExp]';
29354 }
29355 exports.isRegExp = isRegExp;
29356
29357 function isObject(arg) {
29358 return typeof arg === 'object' && arg !== null;
29359 }
29360 exports.isObject = isObject;
29361
29362 function isDate(d) {
29363 return objectToString(d) === '[object Date]';
29364 }
29365 exports.isDate = isDate;
29366
29367 function isError(e) {
29368 return (objectToString(e) === '[object Error]' || e instanceof Error);
29369 }
29370 exports.isError = isError;
29371
29372 function isFunction(arg) {
29373 return typeof arg === 'function';
29374 }
29375 exports.isFunction = isFunction;
29376
29377 function isPrimitive(arg) {
29378 return arg === null ||
29379 typeof arg === 'boolean' ||
29380 typeof arg === 'number' ||
29381 typeof arg === 'string' ||
29382 typeof arg === 'symbol' || // ES6 symbol
29383 typeof arg === 'undefined';
29384 }
29385 exports.isPrimitive = isPrimitive;
29386
29387 exports.isBuffer = Buffer.isBuffer;
29388
29389 function objectToString(o) {
29390 return Object.prototype.toString.call(o);
29391 }
29392
29393 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
29394 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
29395 // Copyright Joyent, Inc. and other Node contributors.
29396 //
29397 // Permission is hereby granted, free of charge, to any person obtaining a
29398 // copy of this software and associated documentation files (the
29399 // "Software"), to deal in the Software without restriction, including
29400 // without limitation the rights to use, copy, modify, merge, publish,
29401 // distribute, sublicense, and/or sell copies of the Software, and to permit
29402 // persons to whom the Software is furnished to do so, subject to the
29403 // following conditions:
29404 //
29405 // The above copyright notice and this permission notice shall be included
29406 // in all copies or substantial portions of the Software.
29407 //
29408 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29409 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29410 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29411 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29412 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29413 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29414 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29415
29416 function EventEmitter() {
29417 this._events = this._events || {};
29418 this._maxListeners = this._maxListeners || undefined;
29419 }
29420 module.exports = EventEmitter;
29421
29422 // Backwards-compat with node 0.10.x
29423 EventEmitter.EventEmitter = EventEmitter;
29424
29425 EventEmitter.prototype._events = undefined;
29426 EventEmitter.prototype._maxListeners = undefined;
29427
29428 // By default EventEmitters will print a warning if more than 10 listeners are
29429 // added to it. This is a useful default which helps finding memory leaks.
29430 EventEmitter.defaultMaxListeners = 10;
29431
29432 // Obviously not all Emitters should be limited to 10. This function allows
29433 // that to be increased. Set to zero for unlimited.
29434 EventEmitter.prototype.setMaxListeners = function(n) {
29435 if (!isNumber(n) || n < 0 || isNaN(n))
29436 throw TypeError('n must be a positive number');
29437 this._maxListeners = n;
29438 return this;
29439 };
29440
29441 EventEmitter.prototype.emit = function(type) {
29442 var er, handler, len, args, i, listeners;
29443
29444 if (!this._events)
29445 this._events = {};
29446
29447 // If there is no 'error' event listener then throw.
29448 if (type === 'error') {
29449 if (!this._events.error ||
29450 (isObject(this._events.error) && !this._events.error.length)) {
29451 er = arguments[1];
29452 if (er instanceof Error) {
29453 throw er; // Unhandled 'error' event
29454 } else {
29455 // At least give some kind of context to the user
29456 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
29457 err.context = er;
29458 throw err;
29459 }
29460 }
29461 }
29462
29463 handler = this._events[type];
29464
29465 if (isUndefined(handler))
29466 return false;
29467
29468 if (isFunction(handler)) {
29469 switch (arguments.length) {
29470 // fast cases
29471 case 1:
29472 handler.call(this);
29473 break;
29474 case 2:
29475 handler.call(this, arguments[1]);
29476 break;
29477 case 3:
29478 handler.call(this, arguments[1], arguments[2]);
29479 break;
29480 // slower
29481 default:
29482 args = Array.prototype.slice.call(arguments, 1);
29483 handler.apply(this, args);
29484 }
29485 } else if (isObject(handler)) {
29486 args = Array.prototype.slice.call(arguments, 1);
29487 listeners = handler.slice();
29488 len = listeners.length;
29489 for (i = 0; i < len; i++)
29490 listeners[i].apply(this, args);
29491 }
29492
29493 return true;
29494 };
29495
29496 EventEmitter.prototype.addListener = function(type, listener) {
29497 var m;
29498
29499 if (!isFunction(listener))
29500 throw TypeError('listener must be a function');
29501
29502 if (!this._events)
29503 this._events = {};
29504
29505 // To avoid recursion in the case that type === "newListener"! Before
29506 // adding it to the listeners, first emit "newListener".
29507 if (this._events.newListener)
29508 this.emit('newListener', type,
29509 isFunction(listener.listener) ?
29510 listener.listener : listener);
29511
29512 if (!this._events[type])
29513 // Optimize the case of one listener. Don't need the extra array object.
29514 this._events[type] = listener;
29515 else if (isObject(this._events[type]))
29516 // If we've already got an array, just append.
29517 this._events[type].push(listener);
29518 else
29519 // Adding the second element, need to change to array.
29520 this._events[type] = [this._events[type], listener];
29521
29522 // Check for listener leak
29523 if (isObject(this._events[type]) && !this._events[type].warned) {
29524 if (!isUndefined(this._maxListeners)) {
29525 m = this._maxListeners;
29526 } else {
29527 m = EventEmitter.defaultMaxListeners;
29528 }
29529
29530 if (m && m > 0 && this._events[type].length > m) {
29531 this._events[type].warned = true;
29532 console.error('(node) warning: possible EventEmitter memory ' +
29533 'leak detected. %d listeners added. ' +
29534 'Use emitter.setMaxListeners() to increase limit.',
29535 this._events[type].length);
29536 if (typeof console.trace === 'function') {
29537 // not supported in IE 10
29538 console.trace();
29539 }
29540 }
29541 }
29542
29543 return this;
29544 };
29545
29546 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
29547
29548 EventEmitter.prototype.once = function(type, listener) {
29549 if (!isFunction(listener))
29550 throw TypeError('listener must be a function');
29551
29552 var fired = false;
29553
29554 function g() {
29555 this.removeListener(type, g);
29556
29557 if (!fired) {
29558 fired = true;
29559 listener.apply(this, arguments);
29560 }
29561 }
29562
29563 g.listener = listener;
29564 this.on(type, g);
29565
29566 return this;
29567 };
29568
29569 // emits a 'removeListener' event iff the listener was removed
29570 EventEmitter.prototype.removeListener = function(type, listener) {
29571 var list, position, length, i;
29572
29573 if (!isFunction(listener))
29574 throw TypeError('listener must be a function');
29575
29576 if (!this._events || !this._events[type])
29577 return this;
29578
29579 list = this._events[type];
29580 length = list.length;
29581 position = -1;
29582
29583 if (list === listener ||
29584 (isFunction(list.listener) && list.listener === listener)) {
29585 delete this._events[type];
29586 if (this._events.removeListener)
29587 this.emit('removeListener', type, listener);
29588
29589 } else if (isObject(list)) {
29590 for (i = length; i-- > 0;) {
29591 if (list[i] === listener ||
29592 (list[i].listener && list[i].listener === listener)) {
29593 position = i;
29594 break;
29595 }
29596 }
29597
29598 if (position < 0)
29599 return this;
29600
29601 if (list.length === 1) {
29602 list.length = 0;
29603 delete this._events[type];
29604 } else {
29605 list.splice(position, 1);
29606 }
29607
29608 if (this._events.removeListener)
29609 this.emit('removeListener', type, listener);
29610 }
29611
29612 return this;
29613 };
29614
29615 EventEmitter.prototype.removeAllListeners = function(type) {
29616 var key, listeners;
29617
29618 if (!this._events)
29619 return this;
29620
29621 // not listening for removeListener, no need to emit
29622 if (!this._events.removeListener) {
29623 if (arguments.length === 0)
29624 this._events = {};
29625 else if (this._events[type])
29626 delete this._events[type];
29627 return this;
29628 }
29629
29630 // emit removeListener for all listeners on all events
29631 if (arguments.length === 0) {
29632 for (key in this._events) {
29633 if (key === 'removeListener') continue;
29634 this.removeAllListeners(key);
29635 }
29636 this.removeAllListeners('removeListener');
29637 this._events = {};
29638 return this;
29639 }
29640
29641 listeners = this._events[type];
29642
29643 if (isFunction(listeners)) {
29644 this.removeListener(type, listeners);
29645 } else if (listeners) {
29646 // LIFO order
29647 while (listeners.length)
29648 this.removeListener(type, listeners[listeners.length - 1]);
29649 }
29650 delete this._events[type];
29651
29652 return this;
29653 };
29654
29655 EventEmitter.prototype.listeners = function(type) {
29656 var ret;
29657 if (!this._events || !this._events[type])
29658 ret = [];
29659 else if (isFunction(this._events[type]))
29660 ret = [this._events[type]];
29661 else
29662 ret = this._events[type].slice();
29663 return ret;
29664 };
29665
29666 EventEmitter.prototype.listenerCount = function(type) {
29667 if (this._events) {
29668 var evlistener = this._events[type];
29669
29670 if (isFunction(evlistener))
29671 return 1;
29672 else if (evlistener)
29673 return evlistener.length;
29674 }
29675 return 0;
29676 };
29677
29678 EventEmitter.listenerCount = function(emitter, type) {
29679 return emitter.listenerCount(type);
29680 };
29681
29682 function isFunction(arg) {
29683 return typeof arg === 'function';
29684 }
29685
29686 function isNumber(arg) {
29687 return typeof arg === 'number';
29688 }
29689
29690 function isObject(arg) {
29691 return typeof arg === 'object' && arg !== null;
29692 }
29693
29694 function isUndefined(arg) {
29695 return arg === void 0;
29696 }
29697
29698 },{}],8:[function(require,module,exports){
29699 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
29700 var e, m
29701 var eLen = nBytes * 8 - mLen - 1
29702 var eMax = (1 << eLen) - 1
29703 var eBias = eMax >> 1
29704 var nBits = -7
29705 var i = isLE ? (nBytes - 1) : 0
29706 var d = isLE ? -1 : 1
29707 var s = buffer[offset + i]
29708
29709 i += d
29710
29711 e = s & ((1 << (-nBits)) - 1)
29712 s >>= (-nBits)
29713 nBits += eLen
29714 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29715
29716 m = e & ((1 << (-nBits)) - 1)
29717 e >>= (-nBits)
29718 nBits += mLen
29719 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29720
29721 if (e === 0) {
29722 e = 1 - eBias
29723 } else if (e === eMax) {
29724 return m ? NaN : ((s ? -1 : 1) * Infinity)
29725 } else {
29726 m = m + Math.pow(2, mLen)
29727 e = e - eBias
29728 }
29729 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
29730 }
29731
29732 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
29733 var e, m, c
29734 var eLen = nBytes * 8 - mLen - 1
29735 var eMax = (1 << eLen) - 1
29736 var eBias = eMax >> 1
29737 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
29738 var i = isLE ? 0 : (nBytes - 1)
29739 var d = isLE ? 1 : -1
29740 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
29741
29742 value = Math.abs(value)
29743
29744 if (isNaN(value) || value === Infinity) {
29745 m = isNaN(value) ? 1 : 0
29746 e = eMax
29747 } else {
29748 e = Math.floor(Math.log(value) / Math.LN2)
29749 if (value * (c = Math.pow(2, -e)) < 1) {
29750 e--
29751 c *= 2
29752 }
29753 if (e + eBias >= 1) {
29754 value += rt / c
29755 } else {
29756 value += rt * Math.pow(2, 1 - eBias)
29757 }
29758 if (value * c >= 2) {
29759 e++
29760 c /= 2
29761 }
29762
29763 if (e + eBias >= eMax) {
29764 m = 0
29765 e = eMax
29766 } else if (e + eBias >= 1) {
29767 m = (value * c - 1) * Math.pow(2, mLen)
29768 e = e + eBias
29769 } else {
29770 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
29771 e = 0
29772 }
29773 }
29774
29775 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
29776
29777 e = (e << mLen) | m
29778 eLen += mLen
29779 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
29780
29781 buffer[offset + i - d] |= s * 128
29782 }
29783
29784 },{}],9:[function(require,module,exports){
29785 if (typeof Object.create === 'function') {
29786 // implementation from standard node.js 'util' module
29787 module.exports = function inherits(ctor, superCtor) {
29788 ctor.super_ = superCtor
29789 ctor.prototype = Object.create(superCtor.prototype, {
29790 constructor: {
29791 value: ctor,
29792 enumerable: false,
29793 writable: true,
29794 configurable: true
29795 }
29796 });
29797 };
29798 } else {
29799 // old school shim for old browsers
29800 module.exports = function inherits(ctor, superCtor) {
29801 ctor.super_ = superCtor
29802 var TempCtor = function () {}
29803 TempCtor.prototype = superCtor.prototype
29804 ctor.prototype = new TempCtor()
29805 ctor.prototype.constructor = ctor
29806 }
29807 }
29808
29809 },{}],10:[function(require,module,exports){
29810 /*!
29811 * Determine if an object is a Buffer
29812 *
29813 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
29814 * @license MIT
29815 */
29816
29817 // The _isBuffer check is for Safari 5-7 support, because it's missing
29818 // Object.prototype.constructor. Remove this eventually
29819 module.exports = function (obj) {
29820 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
29821 }
29822
29823 function isBuffer (obj) {
29824 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
29825 }
29826
29827 // For Node v0.10 support. Remove this eventually.
29828 function isSlowBuffer (obj) {
29829 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
29830 }
29831
29832 },{}],11:[function(require,module,exports){
29833 var toString = {}.toString;
29834
29835 module.exports = Array.isArray || function (arr) {
29836 return toString.call(arr) == '[object Array]';
29837 };
29838
29839 },{}],12:[function(require,module,exports){
29840 (function (process){
29841 'use strict';
29842
29843 if (!process.version ||
29844 process.version.indexOf('v0.') === 0 ||
29845 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
29846 module.exports = nextTick;
29847 } else {
29848 module.exports = process.nextTick;
29849 }
29850
29851 function nextTick(fn, arg1, arg2, arg3) {
29852 if (typeof fn !== 'function') {
29853 throw new TypeError('"callback" argument must be a function');
29854 }
29855 var len = arguments.length;
29856 var args, i;
29857 switch (len) {
29858 case 0:
29859 case 1:
29860 return process.nextTick(fn);
29861 case 2:
29862 return process.nextTick(function afterTickOne() {
29863 fn.call(null, arg1);
29864 });
29865 case 3:
29866 return process.nextTick(function afterTickTwo() {
29867 fn.call(null, arg1, arg2);
29868 });
29869 case 4:
29870 return process.nextTick(function afterTickThree() {
29871 fn.call(null, arg1, arg2, arg3);
29872 });
29873 default:
29874 args = new Array(len - 1);
29875 i = 0;
29876 while (i < args.length) {
29877 args[i++] = arguments[i];
29878 }
29879 return process.nextTick(function afterTick() {
29880 fn.apply(null, args);
29881 });
29882 }
29883 }
29884
29885 }).call(this,require('_process'))
29886 },{"_process":13}],13:[function(require,module,exports){
29887 // shim for using process in browser
29888 var process = module.exports = {};
29889
29890 // cached from whatever global is present so that test runners that stub it
29891 // don't break things. But we need to wrap it in a try catch in case it is
29892 // wrapped in strict mode code which doesn't define any globals. It's inside a
29893 // function because try/catches deoptimize in certain engines.
29894
29895 var cachedSetTimeout;
29896 var cachedClearTimeout;
29897
29898 function defaultSetTimout() {
29899 throw new Error('setTimeout has not been defined');
29900 }
29901 function defaultClearTimeout () {
29902 throw new Error('clearTimeout has not been defined');
29903 }
29904 (function () {
29905 try {
29906 if (typeof setTimeout === 'function') {
29907 cachedSetTimeout = setTimeout;
29908 } else {
29909 cachedSetTimeout = defaultSetTimout;
29910 }
29911 } catch (e) {
29912 cachedSetTimeout = defaultSetTimout;
29913 }
29914 try {
29915 if (typeof clearTimeout === 'function') {
29916 cachedClearTimeout = clearTimeout;
29917 } else {
29918 cachedClearTimeout = defaultClearTimeout;
29919 }
29920 } catch (e) {
29921 cachedClearTimeout = defaultClearTimeout;
29922 }
29923 } ())
29924 function runTimeout(fun) {
29925 if (cachedSetTimeout === setTimeout) {
29926 //normal enviroments in sane situations
29927 return setTimeout(fun, 0);
29928 }
29929 // if setTimeout wasn't available but was latter defined
29930 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
29931 cachedSetTimeout = setTimeout;
29932 return setTimeout(fun, 0);
29933 }
29934 try {
29935 // when when somebody has screwed with setTimeout but no I.E. maddness
29936 return cachedSetTimeout(fun, 0);
29937 } catch(e){
29938 try {
29939 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29940 return cachedSetTimeout.call(null, fun, 0);
29941 } catch(e){
29942 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
29943 return cachedSetTimeout.call(this, fun, 0);
29944 }
29945 }
29946
29947
29948 }
29949 function runClearTimeout(marker) {
29950 if (cachedClearTimeout === clearTimeout) {
29951 //normal enviroments in sane situations
29952 return clearTimeout(marker);
29953 }
29954 // if clearTimeout wasn't available but was latter defined
29955 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
29956 cachedClearTimeout = clearTimeout;
29957 return clearTimeout(marker);
29958 }
29959 try {
29960 // when when somebody has screwed with setTimeout but no I.E. maddness
29961 return cachedClearTimeout(marker);
29962 } catch (e){
29963 try {
29964 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29965 return cachedClearTimeout.call(null, marker);
29966 } catch (e){
29967 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
29968 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
29969 return cachedClearTimeout.call(this, marker);
29970 }
29971 }
29972
29973
29974
29975 }
29976 var queue = [];
29977 var draining = false;
29978 var currentQueue;
29979 var queueIndex = -1;
29980
29981 function cleanUpNextTick() {
29982 if (!draining || !currentQueue) {
29983 return;
29984 }
29985 draining = false;
29986 if (currentQueue.length) {
29987 queue = currentQueue.concat(queue);
29988 } else {
29989 queueIndex = -1;
29990 }
29991 if (queue.length) {
29992 drainQueue();
29993 }
29994 }
29995
29996 function drainQueue() {
29997 if (draining) {
29998 return;
29999 }
30000 var timeout = runTimeout(cleanUpNextTick);
30001 draining = true;
30002
30003 var len = queue.length;
30004 while(len) {
30005 currentQueue = queue;
30006 queue = [];
30007 while (++queueIndex < len) {
30008 if (currentQueue) {
30009 currentQueue[queueIndex].run();
30010 }
30011 }
30012 queueIndex = -1;
30013 len = queue.length;
30014 }
30015 currentQueue = null;
30016 draining = false;
30017 runClearTimeout(timeout);
30018 }
30019
30020 process.nextTick = function (fun) {
30021 var args = new Array(arguments.length - 1);
30022 if (arguments.length > 1) {
30023 for (var i = 1; i < arguments.length; i++) {
30024 args[i - 1] = arguments[i];
30025 }
30026 }
30027 queue.push(new Item(fun, args));
30028 if (queue.length === 1 && !draining) {
30029 runTimeout(drainQueue);
30030 }
30031 };
30032
30033 // v8 likes predictible objects
30034 function Item(fun, array) {
30035 this.fun = fun;
30036 this.array = array;
30037 }
30038 Item.prototype.run = function () {
30039 this.fun.apply(null, this.array);
30040 };
30041 process.title = 'browser';
30042 process.browser = true;
30043 process.env = {};
30044 process.argv = [];
30045 process.version = ''; // empty string to avoid regexp issues
30046 process.versions = {};
30047
30048 function noop() {}
30049
30050 process.on = noop;
30051 process.addListener = noop;
30052 process.once = noop;
30053 process.off = noop;
30054 process.removeListener = noop;
30055 process.removeAllListeners = noop;
30056 process.emit = noop;
30057 process.prependListener = noop;
30058 process.prependOnceListener = noop;
30059
30060 process.listeners = function (name) { return [] }
30061
30062 process.binding = function (name) {
30063 throw new Error('process.binding is not supported');
30064 };
30065
30066 process.cwd = function () { return '/' };
30067 process.chdir = function (dir) {
30068 throw new Error('process.chdir is not supported');
30069 };
30070 process.umask = function() { return 0; };
30071
30072 },{}],14:[function(require,module,exports){
30073 module.exports = require('./lib/_stream_duplex.js');
30074
30075 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
30076 // a duplex stream is just a stream that is both readable and writable.
30077 // Since JS doesn't have multiple prototypal inheritance, this class
30078 // prototypally inherits from Readable, and then parasitically from
30079 // Writable.
30080
30081 'use strict';
30082
30083 /*<replacement>*/
30084
30085 var objectKeys = Object.keys || function (obj) {
30086 var keys = [];
30087 for (var key in obj) {
30088 keys.push(key);
30089 }return keys;
30090 };
30091 /*</replacement>*/
30092
30093 module.exports = Duplex;
30094
30095 /*<replacement>*/
30096 var processNextTick = require('process-nextick-args');
30097 /*</replacement>*/
30098
30099 /*<replacement>*/
30100 var util = require('core-util-is');
30101 util.inherits = require('inherits');
30102 /*</replacement>*/
30103
30104 var Readable = require('./_stream_readable');
30105 var Writable = require('./_stream_writable');
30106
30107 util.inherits(Duplex, Readable);
30108
30109 var keys = objectKeys(Writable.prototype);
30110 for (var v = 0; v < keys.length; v++) {
30111 var method = keys[v];
30112 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
30113 }
30114
30115 function Duplex(options) {
30116 if (!(this instanceof Duplex)) return new Duplex(options);
30117
30118 Readable.call(this, options);
30119 Writable.call(this, options);
30120
30121 if (options && options.readable === false) this.readable = false;
30122
30123 if (options && options.writable === false) this.writable = false;
30124
30125 this.allowHalfOpen = true;
30126 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
30127
30128 this.once('end', onend);
30129 }
30130
30131 // the no-half-open enforcer
30132 function onend() {
30133 // if we allow half-open state, or if the writable side ended,
30134 // then we're ok.
30135 if (this.allowHalfOpen || this._writableState.ended) return;
30136
30137 // no more data can be written.
30138 // But allow more writes to happen in this tick.
30139 processNextTick(onEndNT, this);
30140 }
30141
30142 function onEndNT(self) {
30143 self.end();
30144 }
30145
30146 function forEach(xs, f) {
30147 for (var i = 0, l = xs.length; i < l; i++) {
30148 f(xs[i], i);
30149 }
30150 }
30151 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
30152 // a passthrough stream.
30153 // basically just the most minimal sort of Transform stream.
30154 // Every written chunk gets output as-is.
30155
30156 'use strict';
30157
30158 module.exports = PassThrough;
30159
30160 var Transform = require('./_stream_transform');
30161
30162 /*<replacement>*/
30163 var util = require('core-util-is');
30164 util.inherits = require('inherits');
30165 /*</replacement>*/
30166
30167 util.inherits(PassThrough, Transform);
30168
30169 function PassThrough(options) {
30170 if (!(this instanceof PassThrough)) return new PassThrough(options);
30171
30172 Transform.call(this, options);
30173 }
30174
30175 PassThrough.prototype._transform = function (chunk, encoding, cb) {
30176 cb(null, chunk);
30177 };
30178 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
30179 (function (process){
30180 'use strict';
30181
30182 module.exports = Readable;
30183
30184 /*<replacement>*/
30185 var processNextTick = require('process-nextick-args');
30186 /*</replacement>*/
30187
30188 /*<replacement>*/
30189 var isArray = require('isarray');
30190 /*</replacement>*/
30191
30192 /*<replacement>*/
30193 var Duplex;
30194 /*</replacement>*/
30195
30196 Readable.ReadableState = ReadableState;
30197
30198 /*<replacement>*/
30199 var EE = require('events').EventEmitter;
30200
30201 var EElistenerCount = function (emitter, type) {
30202 return emitter.listeners(type).length;
30203 };
30204 /*</replacement>*/
30205
30206 /*<replacement>*/
30207 var Stream = require('./internal/streams/stream');
30208 /*</replacement>*/
30209
30210 var Buffer = require('buffer').Buffer;
30211 /*<replacement>*/
30212 var bufferShim = require('buffer-shims');
30213 /*</replacement>*/
30214
30215 /*<replacement>*/
30216 var util = require('core-util-is');
30217 util.inherits = require('inherits');
30218 /*</replacement>*/
30219
30220 /*<replacement>*/
30221 var debugUtil = require('util');
30222 var debug = void 0;
30223 if (debugUtil && debugUtil.debuglog) {
30224 debug = debugUtil.debuglog('stream');
30225 } else {
30226 debug = function () {};
30227 }
30228 /*</replacement>*/
30229
30230 var BufferList = require('./internal/streams/BufferList');
30231 var StringDecoder;
30232
30233 util.inherits(Readable, Stream);
30234
30235 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
30236
30237 function prependListener(emitter, event, fn) {
30238 // Sadly this is not cacheable as some libraries bundle their own
30239 // event emitter implementation with them.
30240 if (typeof emitter.prependListener === 'function') {
30241 return emitter.prependListener(event, fn);
30242 } else {
30243 // This is a hack to make sure that our error handler is attached before any
30244 // userland ones. NEVER DO THIS. This is here only because this code needs
30245 // to continue to work with older versions of Node.js that do not include
30246 // the prependListener() method. The goal is to eventually remove this hack.
30247 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
30248 }
30249 }
30250
30251 function ReadableState(options, stream) {
30252 Duplex = Duplex || require('./_stream_duplex');
30253
30254 options = options || {};
30255
30256 // object stream flag. Used to make read(n) ignore n and to
30257 // make all the buffer merging and length checks go away
30258 this.objectMode = !!options.objectMode;
30259
30260 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
30261
30262 // the point at which it stops calling _read() to fill the buffer
30263 // Note: 0 is a valid value, means "don't call _read preemptively ever"
30264 var hwm = options.highWaterMark;
30265 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
30266 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
30267
30268 // cast to ints.
30269 this.highWaterMark = ~~this.highWaterMark;
30270
30271 // A linked list is used to store data chunks instead of an array because the
30272 // linked list can remove elements from the beginning faster than
30273 // array.shift()
30274 this.buffer = new BufferList();
30275 this.length = 0;
30276 this.pipes = null;
30277 this.pipesCount = 0;
30278 this.flowing = null;
30279 this.ended = false;
30280 this.endEmitted = false;
30281 this.reading = false;
30282
30283 // a flag to be able to tell if the onwrite cb is called immediately,
30284 // or on a later tick. We set this to true at first, because any
30285 // actions that shouldn't happen until "later" should generally also
30286 // not happen before the first write call.
30287 this.sync = true;
30288
30289 // whenever we return null, then we set a flag to say
30290 // that we're awaiting a 'readable' event emission.
30291 this.needReadable = false;
30292 this.emittedReadable = false;
30293 this.readableListening = false;
30294 this.resumeScheduled = false;
30295
30296 // Crypto is kind of old and crusty. Historically, its default string
30297 // encoding is 'binary' so we have to make this configurable.
30298 // Everything else in the universe uses 'utf8', though.
30299 this.defaultEncoding = options.defaultEncoding || 'utf8';
30300
30301 // when piping, we only care about 'readable' events that happen
30302 // after read()ing all the bytes and not getting any pushback.
30303 this.ranOut = false;
30304
30305 // the number of writers that are awaiting a drain event in .pipe()s
30306 this.awaitDrain = 0;
30307
30308 // if true, a maybeReadMore has been scheduled
30309 this.readingMore = false;
30310
30311 this.decoder = null;
30312 this.encoding = null;
30313 if (options.encoding) {
30314 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30315 this.decoder = new StringDecoder(options.encoding);
30316 this.encoding = options.encoding;
30317 }
30318 }
30319
30320 function Readable(options) {
30321 Duplex = Duplex || require('./_stream_duplex');
30322
30323 if (!(this instanceof Readable)) return new Readable(options);
30324
30325 this._readableState = new ReadableState(options, this);
30326
30327 // legacy
30328 this.readable = true;
30329
30330 if (options && typeof options.read === 'function') this._read = options.read;
30331
30332 Stream.call(this);
30333 }
30334
30335 // Manually shove something into the read() buffer.
30336 // This returns true if the highWaterMark has not been hit yet,
30337 // similar to how Writable.write() returns true if you should
30338 // write() some more.
30339 Readable.prototype.push = function (chunk, encoding) {
30340 var state = this._readableState;
30341
30342 if (!state.objectMode && typeof chunk === 'string') {
30343 encoding = encoding || state.defaultEncoding;
30344 if (encoding !== state.encoding) {
30345 chunk = bufferShim.from(chunk, encoding);
30346 encoding = '';
30347 }
30348 }
30349
30350 return readableAddChunk(this, state, chunk, encoding, false);
30351 };
30352
30353 // Unshift should *always* be something directly out of read()
30354 Readable.prototype.unshift = function (chunk) {
30355 var state = this._readableState;
30356 return readableAddChunk(this, state, chunk, '', true);
30357 };
30358
30359 Readable.prototype.isPaused = function () {
30360 return this._readableState.flowing === false;
30361 };
30362
30363 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
30364 var er = chunkInvalid(state, chunk);
30365 if (er) {
30366 stream.emit('error', er);
30367 } else if (chunk === null) {
30368 state.reading = false;
30369 onEofChunk(stream, state);
30370 } else if (state.objectMode || chunk && chunk.length > 0) {
30371 if (state.ended && !addToFront) {
30372 var e = new Error('stream.push() after EOF');
30373 stream.emit('error', e);
30374 } else if (state.endEmitted && addToFront) {
30375 var _e = new Error('stream.unshift() after end event');
30376 stream.emit('error', _e);
30377 } else {
30378 var skipAdd;
30379 if (state.decoder && !addToFront && !encoding) {
30380 chunk = state.decoder.write(chunk);
30381 skipAdd = !state.objectMode && chunk.length === 0;
30382 }
30383
30384 if (!addToFront) state.reading = false;
30385
30386 // Don't add to the buffer if we've decoded to an empty string chunk and
30387 // we're not in object mode
30388 if (!skipAdd) {
30389 // if we want the data now, just emit it.
30390 if (state.flowing && state.length === 0 && !state.sync) {
30391 stream.emit('data', chunk);
30392 stream.read(0);
30393 } else {
30394 // update the buffer info.
30395 state.length += state.objectMode ? 1 : chunk.length;
30396 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
30397
30398 if (state.needReadable) emitReadable(stream);
30399 }
30400 }
30401
30402 maybeReadMore(stream, state);
30403 }
30404 } else if (!addToFront) {
30405 state.reading = false;
30406 }
30407
30408 return needMoreData(state);
30409 }
30410
30411 // if it's past the high water mark, we can push in some more.
30412 // Also, if we have no data yet, we can stand some
30413 // more bytes. This is to work around cases where hwm=0,
30414 // such as the repl. Also, if the push() triggered a
30415 // readable event, and the user called read(largeNumber) such that
30416 // needReadable was set, then we ought to push more, so that another
30417 // 'readable' event will be triggered.
30418 function needMoreData(state) {
30419 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
30420 }
30421
30422 // backwards compatibility.
30423 Readable.prototype.setEncoding = function (enc) {
30424 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30425 this._readableState.decoder = new StringDecoder(enc);
30426 this._readableState.encoding = enc;
30427 return this;
30428 };
30429
30430 // Don't raise the hwm > 8MB
30431 var MAX_HWM = 0x800000;
30432 function computeNewHighWaterMark(n) {
30433 if (n >= MAX_HWM) {
30434 n = MAX_HWM;
30435 } else {
30436 // Get the next highest power of 2 to prevent increasing hwm excessively in
30437 // tiny amounts
30438 n--;
30439 n |= n >>> 1;
30440 n |= n >>> 2;
30441 n |= n >>> 4;
30442 n |= n >>> 8;
30443 n |= n >>> 16;
30444 n++;
30445 }
30446 return n;
30447 }
30448
30449 // This function is designed to be inlinable, so please take care when making
30450 // changes to the function body.
30451 function howMuchToRead(n, state) {
30452 if (n <= 0 || state.length === 0 && state.ended) return 0;
30453 if (state.objectMode) return 1;
30454 if (n !== n) {
30455 // Only flow one buffer at a time
30456 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
30457 }
30458 // If we're asking for more than the current hwm, then raise the hwm.
30459 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
30460 if (n <= state.length) return n;
30461 // Don't have enough
30462 if (!state.ended) {
30463 state.needReadable = true;
30464 return 0;
30465 }
30466 return state.length;
30467 }
30468
30469 // you can override either this method, or the async _read(n) below.
30470 Readable.prototype.read = function (n) {
30471 debug('read', n);
30472 n = parseInt(n, 10);
30473 var state = this._readableState;
30474 var nOrig = n;
30475
30476 if (n !== 0) state.emittedReadable = false;
30477
30478 // if we're doing read(0) to trigger a readable event, but we
30479 // already have a bunch of data in the buffer, then just trigger
30480 // the 'readable' event and move on.
30481 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
30482 debug('read: emitReadable', state.length, state.ended);
30483 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
30484 return null;
30485 }
30486
30487 n = howMuchToRead(n, state);
30488
30489 // if we've ended, and we're now clear, then finish it up.
30490 if (n === 0 && state.ended) {
30491 if (state.length === 0) endReadable(this);
30492 return null;
30493 }
30494
30495 // All the actual chunk generation logic needs to be
30496 // *below* the call to _read. The reason is that in certain
30497 // synthetic stream cases, such as passthrough streams, _read
30498 // may be a completely synchronous operation which may change
30499 // the state of the read buffer, providing enough data when
30500 // before there was *not* enough.
30501 //
30502 // So, the steps are:
30503 // 1. Figure out what the state of things will be after we do
30504 // a read from the buffer.
30505 //
30506 // 2. If that resulting state will trigger a _read, then call _read.
30507 // Note that this may be asynchronous, or synchronous. Yes, it is
30508 // deeply ugly to write APIs this way, but that still doesn't mean
30509 // that the Readable class should behave improperly, as streams are
30510 // designed to be sync/async agnostic.
30511 // Take note if the _read call is sync or async (ie, if the read call
30512 // has returned yet), so that we know whether or not it's safe to emit
30513 // 'readable' etc.
30514 //
30515 // 3. Actually pull the requested chunks out of the buffer and return.
30516
30517 // if we need a readable event, then we need to do some reading.
30518 var doRead = state.needReadable;
30519 debug('need readable', doRead);
30520
30521 // if we currently have less than the highWaterMark, then also read some
30522 if (state.length === 0 || state.length - n < state.highWaterMark) {
30523 doRead = true;
30524 debug('length less than watermark', doRead);
30525 }
30526
30527 // however, if we've ended, then there's no point, and if we're already
30528 // reading, then it's unnecessary.
30529 if (state.ended || state.reading) {
30530 doRead = false;
30531 debug('reading or ended', doRead);
30532 } else if (doRead) {
30533 debug('do read');
30534 state.reading = true;
30535 state.sync = true;
30536 // if the length is currently zero, then we *need* a readable event.
30537 if (state.length === 0) state.needReadable = true;
30538 // call internal read method
30539 this._read(state.highWaterMark);
30540 state.sync = false;
30541 // If _read pushed data synchronously, then `reading` will be false,
30542 // and we need to re-evaluate how much data we can return to the user.
30543 if (!state.reading) n = howMuchToRead(nOrig, state);
30544 }
30545
30546 var ret;
30547 if (n > 0) ret = fromList(n, state);else ret = null;
30548
30549 if (ret === null) {
30550 state.needReadable = true;
30551 n = 0;
30552 } else {
30553 state.length -= n;
30554 }
30555
30556 if (state.length === 0) {
30557 // If we have nothing in the buffer, then we want to know
30558 // as soon as we *do* get something into the buffer.
30559 if (!state.ended) state.needReadable = true;
30560
30561 // If we tried to read() past the EOF, then emit end on the next tick.
30562 if (nOrig !== n && state.ended) endReadable(this);
30563 }
30564
30565 if (ret !== null) this.emit('data', ret);
30566
30567 return ret;
30568 };
30569
30570 function chunkInvalid(state, chunk) {
30571 var er = null;
30572 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
30573 er = new TypeError('Invalid non-string/buffer chunk');
30574 }
30575 return er;
30576 }
30577
30578 function onEofChunk(stream, state) {
30579 if (state.ended) return;
30580 if (state.decoder) {
30581 var chunk = state.decoder.end();
30582 if (chunk && chunk.length) {
30583 state.buffer.push(chunk);
30584 state.length += state.objectMode ? 1 : chunk.length;
30585 }
30586 }
30587 state.ended = true;
30588
30589 // emit 'readable' now to make sure it gets picked up.
30590 emitReadable(stream);
30591 }
30592
30593 // Don't emit readable right away in sync mode, because this can trigger
30594 // another read() call => stack overflow. This way, it might trigger
30595 // a nextTick recursion warning, but that's not so bad.
30596 function emitReadable(stream) {
30597 var state = stream._readableState;
30598 state.needReadable = false;
30599 if (!state.emittedReadable) {
30600 debug('emitReadable', state.flowing);
30601 state.emittedReadable = true;
30602 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
30603 }
30604 }
30605
30606 function emitReadable_(stream) {
30607 debug('emit readable');
30608 stream.emit('readable');
30609 flow(stream);
30610 }
30611
30612 // at this point, the user has presumably seen the 'readable' event,
30613 // and called read() to consume some data. that may have triggered
30614 // in turn another _read(n) call, in which case reading = true if
30615 // it's in progress.
30616 // However, if we're not ended, or reading, and the length < hwm,
30617 // then go ahead and try to read some more preemptively.
30618 function maybeReadMore(stream, state) {
30619 if (!state.readingMore) {
30620 state.readingMore = true;
30621 processNextTick(maybeReadMore_, stream, state);
30622 }
30623 }
30624
30625 function maybeReadMore_(stream, state) {
30626 var len = state.length;
30627 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
30628 debug('maybeReadMore read 0');
30629 stream.read(0);
30630 if (len === state.length)
30631 // didn't get any data, stop spinning.
30632 break;else len = state.length;
30633 }
30634 state.readingMore = false;
30635 }
30636
30637 // abstract method. to be overridden in specific implementation classes.
30638 // call cb(er, data) where data is <= n in length.
30639 // for virtual (non-string, non-buffer) streams, "length" is somewhat
30640 // arbitrary, and perhaps not very meaningful.
30641 Readable.prototype._read = function (n) {
30642 this.emit('error', new Error('_read() is not implemented'));
30643 };
30644
30645 Readable.prototype.pipe = function (dest, pipeOpts) {
30646 var src = this;
30647 var state = this._readableState;
30648
30649 switch (state.pipesCount) {
30650 case 0:
30651 state.pipes = dest;
30652 break;
30653 case 1:
30654 state.pipes = [state.pipes, dest];
30655 break;
30656 default:
30657 state.pipes.push(dest);
30658 break;
30659 }
30660 state.pipesCount += 1;
30661 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
30662
30663 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
30664
30665 var endFn = doEnd ? onend : cleanup;
30666 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
30667
30668 dest.on('unpipe', onunpipe);
30669 function onunpipe(readable) {
30670 debug('onunpipe');
30671 if (readable === src) {
30672 cleanup();
30673 }
30674 }
30675
30676 function onend() {
30677 debug('onend');
30678 dest.end();
30679 }
30680
30681 // when the dest drains, it reduces the awaitDrain counter
30682 // on the source. This would be more elegant with a .once()
30683 // handler in flow(), but adding and removing repeatedly is
30684 // too slow.
30685 var ondrain = pipeOnDrain(src);
30686 dest.on('drain', ondrain);
30687
30688 var cleanedUp = false;
30689 function cleanup() {
30690 debug('cleanup');
30691 // cleanup event handlers once the pipe is broken
30692 dest.removeListener('close', onclose);
30693 dest.removeListener('finish', onfinish);
30694 dest.removeListener('drain', ondrain);
30695 dest.removeListener('error', onerror);
30696 dest.removeListener('unpipe', onunpipe);
30697 src.removeListener('end', onend);
30698 src.removeListener('end', cleanup);
30699 src.removeListener('data', ondata);
30700
30701 cleanedUp = true;
30702
30703 // if the reader is waiting for a drain event from this
30704 // specific writer, then it would cause it to never start
30705 // flowing again.
30706 // So, if this is awaiting a drain, then we just call it now.
30707 // If we don't know, then assume that we are waiting for one.
30708 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
30709 }
30710
30711 // If the user pushes more data while we're writing to dest then we'll end up
30712 // in ondata again. However, we only want to increase awaitDrain once because
30713 // dest will only emit one 'drain' event for the multiple writes.
30714 // => Introduce a guard on increasing awaitDrain.
30715 var increasedAwaitDrain = false;
30716 src.on('data', ondata);
30717 function ondata(chunk) {
30718 debug('ondata');
30719 increasedAwaitDrain = false;
30720 var ret = dest.write(chunk);
30721 if (false === ret && !increasedAwaitDrain) {
30722 // If the user unpiped during `dest.write()`, it is possible
30723 // to get stuck in a permanently paused state if that write
30724 // also returned false.
30725 // => Check whether `dest` is still a piping destination.
30726 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
30727 debug('false write response, pause', src._readableState.awaitDrain);
30728 src._readableState.awaitDrain++;
30729 increasedAwaitDrain = true;
30730 }
30731 src.pause();
30732 }
30733 }
30734
30735 // if the dest has an error, then stop piping into it.
30736 // however, don't suppress the throwing behavior for this.
30737 function onerror(er) {
30738 debug('onerror', er);
30739 unpipe();
30740 dest.removeListener('error', onerror);
30741 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
30742 }
30743
30744 // Make sure our error handler is attached before userland ones.
30745 prependListener(dest, 'error', onerror);
30746
30747 // Both close and finish should trigger unpipe, but only once.
30748 function onclose() {
30749 dest.removeListener('finish', onfinish);
30750 unpipe();
30751 }
30752 dest.once('close', onclose);
30753 function onfinish() {
30754 debug('onfinish');
30755 dest.removeListener('close', onclose);
30756 unpipe();
30757 }
30758 dest.once('finish', onfinish);
30759
30760 function unpipe() {
30761 debug('unpipe');
30762 src.unpipe(dest);
30763 }
30764
30765 // tell the dest that it's being piped to
30766 dest.emit('pipe', src);
30767
30768 // start the flow if it hasn't been started already.
30769 if (!state.flowing) {
30770 debug('pipe resume');
30771 src.resume();
30772 }
30773
30774 return dest;
30775 };
30776
30777 function pipeOnDrain(src) {
30778 return function () {
30779 var state = src._readableState;
30780 debug('pipeOnDrain', state.awaitDrain);
30781 if (state.awaitDrain) state.awaitDrain--;
30782 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
30783 state.flowing = true;
30784 flow(src);
30785 }
30786 };
30787 }
30788
30789 Readable.prototype.unpipe = function (dest) {
30790 var state = this._readableState;
30791
30792 // if we're not piping anywhere, then do nothing.
30793 if (state.pipesCount === 0) return this;
30794
30795 // just one destination. most common case.
30796 if (state.pipesCount === 1) {
30797 // passed in one, but it's not the right one.
30798 if (dest && dest !== state.pipes) return this;
30799
30800 if (!dest) dest = state.pipes;
30801
30802 // got a match.
30803 state.pipes = null;
30804 state.pipesCount = 0;
30805 state.flowing = false;
30806 if (dest) dest.emit('unpipe', this);
30807 return this;
30808 }
30809
30810 // slow case. multiple pipe destinations.
30811
30812 if (!dest) {
30813 // remove all.
30814 var dests = state.pipes;
30815 var len = state.pipesCount;
30816 state.pipes = null;
30817 state.pipesCount = 0;
30818 state.flowing = false;
30819
30820 for (var i = 0; i < len; i++) {
30821 dests[i].emit('unpipe', this);
30822 }return this;
30823 }
30824
30825 // try to find the right one.
30826 var index = indexOf(state.pipes, dest);
30827 if (index === -1) return this;
30828
30829 state.pipes.splice(index, 1);
30830 state.pipesCount -= 1;
30831 if (state.pipesCount === 1) state.pipes = state.pipes[0];
30832
30833 dest.emit('unpipe', this);
30834
30835 return this;
30836 };
30837
30838 // set up data events if they are asked for
30839 // Ensure readable listeners eventually get something
30840 Readable.prototype.on = function (ev, fn) {
30841 var res = Stream.prototype.on.call(this, ev, fn);
30842
30843 if (ev === 'data') {
30844 // Start flowing on next tick if stream isn't explicitly paused
30845 if (this._readableState.flowing !== false) this.resume();
30846 } else if (ev === 'readable') {
30847 var state = this._readableState;
30848 if (!state.endEmitted && !state.readableListening) {
30849 state.readableListening = state.needReadable = true;
30850 state.emittedReadable = false;
30851 if (!state.reading) {
30852 processNextTick(nReadingNextTick, this);
30853 } else if (state.length) {
30854 emitReadable(this, state);
30855 }
30856 }
30857 }
30858
30859 return res;
30860 };
30861 Readable.prototype.addListener = Readable.prototype.on;
30862
30863 function nReadingNextTick(self) {
30864 debug('readable nexttick read 0');
30865 self.read(0);
30866 }
30867
30868 // pause() and resume() are remnants of the legacy readable stream API
30869 // If the user uses them, then switch into old mode.
30870 Readable.prototype.resume = function () {
30871 var state = this._readableState;
30872 if (!state.flowing) {
30873 debug('resume');
30874 state.flowing = true;
30875 resume(this, state);
30876 }
30877 return this;
30878 };
30879
30880 function resume(stream, state) {
30881 if (!state.resumeScheduled) {
30882 state.resumeScheduled = true;
30883 processNextTick(resume_, stream, state);
30884 }
30885 }
30886
30887 function resume_(stream, state) {
30888 if (!state.reading) {
30889 debug('resume read 0');
30890 stream.read(0);
30891 }
30892
30893 state.resumeScheduled = false;
30894 state.awaitDrain = 0;
30895 stream.emit('resume');
30896 flow(stream);
30897 if (state.flowing && !state.reading) stream.read(0);
30898 }
30899
30900 Readable.prototype.pause = function () {
30901 debug('call pause flowing=%j', this._readableState.flowing);
30902 if (false !== this._readableState.flowing) {
30903 debug('pause');
30904 this._readableState.flowing = false;
30905 this.emit('pause');
30906 }
30907 return this;
30908 };
30909
30910 function flow(stream) {
30911 var state = stream._readableState;
30912 debug('flow', state.flowing);
30913 while (state.flowing && stream.read() !== null) {}
30914 }
30915
30916 // wrap an old-style stream as the async data source.
30917 // This is *not* part of the readable stream interface.
30918 // It is an ugly unfortunate mess of history.
30919 Readable.prototype.wrap = function (stream) {
30920 var state = this._readableState;
30921 var paused = false;
30922
30923 var self = this;
30924 stream.on('end', function () {
30925 debug('wrapped end');
30926 if (state.decoder && !state.ended) {
30927 var chunk = state.decoder.end();
30928 if (chunk && chunk.length) self.push(chunk);
30929 }
30930
30931 self.push(null);
30932 });
30933
30934 stream.on('data', function (chunk) {
30935 debug('wrapped data');
30936 if (state.decoder) chunk = state.decoder.write(chunk);
30937
30938 // don't skip over falsy values in objectMode
30939 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
30940
30941 var ret = self.push(chunk);
30942 if (!ret) {
30943 paused = true;
30944 stream.pause();
30945 }
30946 });
30947
30948 // proxy all the other methods.
30949 // important when wrapping filters and duplexes.
30950 for (var i in stream) {
30951 if (this[i] === undefined && typeof stream[i] === 'function') {
30952 this[i] = function (method) {
30953 return function () {
30954 return stream[method].apply(stream, arguments);
30955 };
30956 }(i);
30957 }
30958 }
30959
30960 // proxy certain important events.
30961 for (var n = 0; n < kProxyEvents.length; n++) {
30962 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
30963 }
30964
30965 // when we try to consume some more bytes, simply unpause the
30966 // underlying stream.
30967 self._read = function (n) {
30968 debug('wrapped _read', n);
30969 if (paused) {
30970 paused = false;
30971 stream.resume();
30972 }
30973 };
30974
30975 return self;
30976 };
30977
30978 // exposed for testing purposes only.
30979 Readable._fromList = fromList;
30980
30981 // Pluck off n bytes from an array of buffers.
30982 // Length is the combined lengths of all the buffers in the list.
30983 // This function is designed to be inlinable, so please take care when making
30984 // changes to the function body.
30985 function fromList(n, state) {
30986 // nothing buffered
30987 if (state.length === 0) return null;
30988
30989 var ret;
30990 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
30991 // read it all, truncate the list
30992 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
30993 state.buffer.clear();
30994 } else {
30995 // read part of list
30996 ret = fromListPartial(n, state.buffer, state.decoder);
30997 }
30998
30999 return ret;
31000 }
31001
31002 // Extracts only enough buffered data to satisfy the amount requested.
31003 // This function is designed to be inlinable, so please take care when making
31004 // changes to the function body.
31005 function fromListPartial(n, list, hasStrings) {
31006 var ret;
31007 if (n < list.head.data.length) {
31008 // slice is the same for buffers and strings
31009 ret = list.head.data.slice(0, n);
31010 list.head.data = list.head.data.slice(n);
31011 } else if (n === list.head.data.length) {
31012 // first chunk is a perfect match
31013 ret = list.shift();
31014 } else {
31015 // result spans more than one buffer
31016 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
31017 }
31018 return ret;
31019 }
31020
31021 // Copies a specified amount of characters from the list of buffered data
31022 // chunks.
31023 // This function is designed to be inlinable, so please take care when making
31024 // changes to the function body.
31025 function copyFromBufferString(n, list) {
31026 var p = list.head;
31027 var c = 1;
31028 var ret = p.data;
31029 n -= ret.length;
31030 while (p = p.next) {
31031 var str = p.data;
31032 var nb = n > str.length ? str.length : n;
31033 if (nb === str.length) ret += str;else ret += str.slice(0, n);
31034 n -= nb;
31035 if (n === 0) {
31036 if (nb === str.length) {
31037 ++c;
31038 if (p.next) list.head = p.next;else list.head = list.tail = null;
31039 } else {
31040 list.head = p;
31041 p.data = str.slice(nb);
31042 }
31043 break;
31044 }
31045 ++c;
31046 }
31047 list.length -= c;
31048 return ret;
31049 }
31050
31051 // Copies a specified amount of bytes from the list of buffered data chunks.
31052 // This function is designed to be inlinable, so please take care when making
31053 // changes to the function body.
31054 function copyFromBuffer(n, list) {
31055 var ret = bufferShim.allocUnsafe(n);
31056 var p = list.head;
31057 var c = 1;
31058 p.data.copy(ret);
31059 n -= p.data.length;
31060 while (p = p.next) {
31061 var buf = p.data;
31062 var nb = n > buf.length ? buf.length : n;
31063 buf.copy(ret, ret.length - n, 0, nb);
31064 n -= nb;
31065 if (n === 0) {
31066 if (nb === buf.length) {
31067 ++c;
31068 if (p.next) list.head = p.next;else list.head = list.tail = null;
31069 } else {
31070 list.head = p;
31071 p.data = buf.slice(nb);
31072 }
31073 break;
31074 }
31075 ++c;
31076 }
31077 list.length -= c;
31078 return ret;
31079 }
31080
31081 function endReadable(stream) {
31082 var state = stream._readableState;
31083
31084 // If we get here before consuming all the bytes, then that is a
31085 // bug in node. Should never happen.
31086 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
31087
31088 if (!state.endEmitted) {
31089 state.ended = true;
31090 processNextTick(endReadableNT, state, stream);
31091 }
31092 }
31093
31094 function endReadableNT(state, stream) {
31095 // Check that we didn't get one last unshift.
31096 if (!state.endEmitted && state.length === 0) {
31097 state.endEmitted = true;
31098 stream.readable = false;
31099 stream.emit('end');
31100 }
31101 }
31102
31103 function forEach(xs, f) {
31104 for (var i = 0, l = xs.length; i < l; i++) {
31105 f(xs[i], i);
31106 }
31107 }
31108
31109 function indexOf(xs, x) {
31110 for (var i = 0, l = xs.length; i < l; i++) {
31111 if (xs[i] === x) return i;
31112 }
31113 return -1;
31114 }
31115 }).call(this,require('_process'))
31116 },{"./_stream_duplex":15,"./internal/streams/BufferList":20,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":22,"util":3}],18:[function(require,module,exports){
31117 // a transform stream is a readable/writable stream where you do
31118 // something with the data. Sometimes it's called a "filter",
31119 // but that's not a great name for it, since that implies a thing where
31120 // some bits pass through, and others are simply ignored. (That would
31121 // be a valid example of a transform, of course.)
31122 //
31123 // While the output is causally related to the input, it's not a
31124 // necessarily symmetric or synchronous transformation. For example,
31125 // a zlib stream might take multiple plain-text writes(), and then
31126 // emit a single compressed chunk some time in the future.
31127 //
31128 // Here's how this works:
31129 //
31130 // The Transform stream has all the aspects of the readable and writable
31131 // stream classes. When you write(chunk), that calls _write(chunk,cb)
31132 // internally, and returns false if there's a lot of pending writes
31133 // buffered up. When you call read(), that calls _read(n) until
31134 // there's enough pending readable data buffered up.
31135 //
31136 // In a transform stream, the written data is placed in a buffer. When
31137 // _read(n) is called, it transforms the queued up data, calling the
31138 // buffered _write cb's as it consumes chunks. If consuming a single
31139 // written chunk would result in multiple output chunks, then the first
31140 // outputted bit calls the readcb, and subsequent chunks just go into
31141 // the read buffer, and will cause it to emit 'readable' if necessary.
31142 //
31143 // This way, back-pressure is actually determined by the reading side,
31144 // since _read has to be called to start processing a new chunk. However,
31145 // a pathological inflate type of transform can cause excessive buffering
31146 // here. For example, imagine a stream where every byte of input is
31147 // interpreted as an integer from 0-255, and then results in that many
31148 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
31149 // 1kb of data being output. In this case, you could write a very small
31150 // amount of input, and end up with a very large amount of output. In
31151 // such a pathological inflating mechanism, there'd be no way to tell
31152 // the system to stop doing the transform. A single 4MB write could
31153 // cause the system to run out of memory.
31154 //
31155 // However, even in such a pathological case, only a single written chunk
31156 // would be consumed, and then the rest would wait (un-transformed) until
31157 // the results of the previous transformed chunk were consumed.
31158
31159 'use strict';
31160
31161 module.exports = Transform;
31162
31163 var Duplex = require('./_stream_duplex');
31164
31165 /*<replacement>*/
31166 var util = require('core-util-is');
31167 util.inherits = require('inherits');
31168 /*</replacement>*/
31169
31170 util.inherits(Transform, Duplex);
31171
31172 function TransformState(stream) {
31173 this.afterTransform = function (er, data) {
31174 return afterTransform(stream, er, data);
31175 };
31176
31177 this.needTransform = false;
31178 this.transforming = false;
31179 this.writecb = null;
31180 this.writechunk = null;
31181 this.writeencoding = null;
31182 }
31183
31184 function afterTransform(stream, er, data) {
31185 var ts = stream._transformState;
31186 ts.transforming = false;
31187
31188 var cb = ts.writecb;
31189
31190 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
31191
31192 ts.writechunk = null;
31193 ts.writecb = null;
31194
31195 if (data !== null && data !== undefined) stream.push(data);
31196
31197 cb(er);
31198
31199 var rs = stream._readableState;
31200 rs.reading = false;
31201 if (rs.needReadable || rs.length < rs.highWaterMark) {
31202 stream._read(rs.highWaterMark);
31203 }
31204 }
31205
31206 function Transform(options) {
31207 if (!(this instanceof Transform)) return new Transform(options);
31208
31209 Duplex.call(this, options);
31210
31211 this._transformState = new TransformState(this);
31212
31213 var stream = this;
31214
31215 // start out asking for a readable event once data is transformed.
31216 this._readableState.needReadable = true;
31217
31218 // we have implemented the _read method, and done the other things
31219 // that Readable wants before the first _read call, so unset the
31220 // sync guard flag.
31221 this._readableState.sync = false;
31222
31223 if (options) {
31224 if (typeof options.transform === 'function') this._transform = options.transform;
31225
31226 if (typeof options.flush === 'function') this._flush = options.flush;
31227 }
31228
31229 // When the writable side finishes, then flush out anything remaining.
31230 this.once('prefinish', function () {
31231 if (typeof this._flush === 'function') this._flush(function (er, data) {
31232 done(stream, er, data);
31233 });else done(stream);
31234 });
31235 }
31236
31237 Transform.prototype.push = function (chunk, encoding) {
31238 this._transformState.needTransform = false;
31239 return Duplex.prototype.push.call(this, chunk, encoding);
31240 };
31241
31242 // This is the part where you do stuff!
31243 // override this function in implementation classes.
31244 // 'chunk' is an input chunk.
31245 //
31246 // Call `push(newChunk)` to pass along transformed output
31247 // to the readable side. You may call 'push' zero or more times.
31248 //
31249 // Call `cb(err)` when you are done with this chunk. If you pass
31250 // an error, then that'll put the hurt on the whole operation. If you
31251 // never call cb(), then you'll never get another chunk.
31252 Transform.prototype._transform = function (chunk, encoding, cb) {
31253 throw new Error('_transform() is not implemented');
31254 };
31255
31256 Transform.prototype._write = function (chunk, encoding, cb) {
31257 var ts = this._transformState;
31258 ts.writecb = cb;
31259 ts.writechunk = chunk;
31260 ts.writeencoding = encoding;
31261 if (!ts.transforming) {
31262 var rs = this._readableState;
31263 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
31264 }
31265 };
31266
31267 // Doesn't matter what the args are here.
31268 // _transform does all the work.
31269 // That we got here means that the readable side wants more data.
31270 Transform.prototype._read = function (n) {
31271 var ts = this._transformState;
31272
31273 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
31274 ts.transforming = true;
31275 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
31276 } else {
31277 // mark that we need a transform, so that any data that comes in
31278 // will get processed, now that we've asked for it.
31279 ts.needTransform = true;
31280 }
31281 };
31282
31283 function done(stream, er, data) {
31284 if (er) return stream.emit('error', er);
31285
31286 if (data !== null && data !== undefined) stream.push(data);
31287
31288 // if there's nothing in the write buffer, then that means
31289 // that nothing more will ever be provided
31290 var ws = stream._writableState;
31291 var ts = stream._transformState;
31292
31293 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
31294
31295 if (ts.transforming) throw new Error('Calling transform done when still transforming');
31296
31297 return stream.push(null);
31298 }
31299 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
31300 (function (process){
31301 // A bit simpler than readable streams.
31302 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
31303 // the drain event emission and buffering.
31304
31305 'use strict';
31306
31307 module.exports = Writable;
31308
31309 /*<replacement>*/
31310 var processNextTick = require('process-nextick-args');
31311 /*</replacement>*/
31312
31313 /*<replacement>*/
31314 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
31315 /*</replacement>*/
31316
31317 /*<replacement>*/
31318 var Duplex;
31319 /*</replacement>*/
31320
31321 Writable.WritableState = WritableState;
31322
31323 /*<replacement>*/
31324 var util = require('core-util-is');
31325 util.inherits = require('inherits');
31326 /*</replacement>*/
31327
31328 /*<replacement>*/
31329 var internalUtil = {
31330 deprecate: require('util-deprecate')
31331 };
31332 /*</replacement>*/
31333
31334 /*<replacement>*/
31335 var Stream = require('./internal/streams/stream');
31336 /*</replacement>*/
31337
31338 var Buffer = require('buffer').Buffer;
31339 /*<replacement>*/
31340 var bufferShim = require('buffer-shims');
31341 /*</replacement>*/
31342
31343 util.inherits(Writable, Stream);
31344
31345 function nop() {}
31346
31347 function WriteReq(chunk, encoding, cb) {
31348 this.chunk = chunk;
31349 this.encoding = encoding;
31350 this.callback = cb;
31351 this.next = null;
31352 }
31353
31354 function WritableState(options, stream) {
31355 Duplex = Duplex || require('./_stream_duplex');
31356
31357 options = options || {};
31358
31359 // object stream flag to indicate whether or not this stream
31360 // contains buffers or objects.
31361 this.objectMode = !!options.objectMode;
31362
31363 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
31364
31365 // the point at which write() starts returning false
31366 // Note: 0 is a valid value, means that we always return false if
31367 // the entire buffer is not flushed immediately on write()
31368 var hwm = options.highWaterMark;
31369 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
31370 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
31371
31372 // cast to ints.
31373 this.highWaterMark = ~~this.highWaterMark;
31374
31375 // drain event flag.
31376 this.needDrain = false;
31377 // at the start of calling end()
31378 this.ending = false;
31379 // when end() has been called, and returned
31380 this.ended = false;
31381 // when 'finish' is emitted
31382 this.finished = false;
31383
31384 // should we decode strings into buffers before passing to _write?
31385 // this is here so that some node-core streams can optimize string
31386 // handling at a lower level.
31387 var noDecode = options.decodeStrings === false;
31388 this.decodeStrings = !noDecode;
31389
31390 // Crypto is kind of old and crusty. Historically, its default string
31391 // encoding is 'binary' so we have to make this configurable.
31392 // Everything else in the universe uses 'utf8', though.
31393 this.defaultEncoding = options.defaultEncoding || 'utf8';
31394
31395 // not an actual buffer we keep track of, but a measurement
31396 // of how much we're waiting to get pushed to some underlying
31397 // socket or file.
31398 this.length = 0;
31399
31400 // a flag to see when we're in the middle of a write.
31401 this.writing = false;
31402
31403 // when true all writes will be buffered until .uncork() call
31404 this.corked = 0;
31405
31406 // a flag to be able to tell if the onwrite cb is called immediately,
31407 // or on a later tick. We set this to true at first, because any
31408 // actions that shouldn't happen until "later" should generally also
31409 // not happen before the first write call.
31410 this.sync = true;
31411
31412 // a flag to know if we're processing previously buffered items, which
31413 // may call the _write() callback in the same tick, so that we don't
31414 // end up in an overlapped onwrite situation.
31415 this.bufferProcessing = false;
31416
31417 // the callback that's passed to _write(chunk,cb)
31418 this.onwrite = function (er) {
31419 onwrite(stream, er);
31420 };
31421
31422 // the callback that the user supplies to write(chunk,encoding,cb)
31423 this.writecb = null;
31424
31425 // the amount that is being written when _write is called.
31426 this.writelen = 0;
31427
31428 this.bufferedRequest = null;
31429 this.lastBufferedRequest = null;
31430
31431 // number of pending user-supplied write callbacks
31432 // this must be 0 before 'finish' can be emitted
31433 this.pendingcb = 0;
31434
31435 // emit prefinish if the only thing we're waiting for is _write cbs
31436 // This is relevant for synchronous Transform streams
31437 this.prefinished = false;
31438
31439 // True if the error was already emitted and should not be thrown again
31440 this.errorEmitted = false;
31441
31442 // count buffered requests
31443 this.bufferedRequestCount = 0;
31444
31445 // allocate the first CorkedRequest, there is always
31446 // one allocated and free to use, and we maintain at most two
31447 this.corkedRequestsFree = new CorkedRequest(this);
31448 }
31449
31450 WritableState.prototype.getBuffer = function getBuffer() {
31451 var current = this.bufferedRequest;
31452 var out = [];
31453 while (current) {
31454 out.push(current);
31455 current = current.next;
31456 }
31457 return out;
31458 };
31459
31460 (function () {
31461 try {
31462 Object.defineProperty(WritableState.prototype, 'buffer', {
31463 get: internalUtil.deprecate(function () {
31464 return this.getBuffer();
31465 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
31466 });
31467 } catch (_) {}
31468 })();
31469
31470 // Test _writableState for inheritance to account for Duplex streams,
31471 // whose prototype chain only points to Readable.
31472 var realHasInstance;
31473 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
31474 realHasInstance = Function.prototype[Symbol.hasInstance];
31475 Object.defineProperty(Writable, Symbol.hasInstance, {
31476 value: function (object) {
31477 if (realHasInstance.call(this, object)) return true;
31478
31479 return object && object._writableState instanceof WritableState;
31480 }
31481 });
31482 } else {
31483 realHasInstance = function (object) {
31484 return object instanceof this;
31485 };
31486 }
31487
31488 function Writable(options) {
31489 Duplex = Duplex || require('./_stream_duplex');
31490
31491 // Writable ctor is applied to Duplexes, too.
31492 // `realHasInstance` is necessary because using plain `instanceof`
31493 // would return false, as no `_writableState` property is attached.
31494
31495 // Trying to use the custom `instanceof` for Writable here will also break the
31496 // Node.js LazyTransform implementation, which has a non-trivial getter for
31497 // `_writableState` that would lead to infinite recursion.
31498 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
31499 return new Writable(options);
31500 }
31501
31502 this._writableState = new WritableState(options, this);
31503
31504 // legacy.
31505 this.writable = true;
31506
31507 if (options) {
31508 if (typeof options.write === 'function') this._write = options.write;
31509
31510 if (typeof options.writev === 'function') this._writev = options.writev;
31511 }
31512
31513 Stream.call(this);
31514 }
31515
31516 // Otherwise people can pipe Writable streams, which is just wrong.
31517 Writable.prototype.pipe = function () {
31518 this.emit('error', new Error('Cannot pipe, not readable'));
31519 };
31520
31521 function writeAfterEnd(stream, cb) {
31522 var er = new Error('write after end');
31523 // TODO: defer error events consistently everywhere, not just the cb
31524 stream.emit('error', er);
31525 processNextTick(cb, er);
31526 }
31527
31528 // Checks that a user-supplied chunk is valid, especially for the particular
31529 // mode the stream is in. Currently this means that `null` is never accepted
31530 // and undefined/non-string values are only allowed in object mode.
31531 function validChunk(stream, state, chunk, cb) {
31532 var valid = true;
31533 var er = false;
31534
31535 if (chunk === null) {
31536 er = new TypeError('May not write null values to stream');
31537 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
31538 er = new TypeError('Invalid non-string/buffer chunk');
31539 }
31540 if (er) {
31541 stream.emit('error', er);
31542 processNextTick(cb, er);
31543 valid = false;
31544 }
31545 return valid;
31546 }
31547
31548 Writable.prototype.write = function (chunk, encoding, cb) {
31549 var state = this._writableState;
31550 var ret = false;
31551 var isBuf = Buffer.isBuffer(chunk);
31552
31553 if (typeof encoding === 'function') {
31554 cb = encoding;
31555 encoding = null;
31556 }
31557
31558 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
31559
31560 if (typeof cb !== 'function') cb = nop;
31561
31562 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
31563 state.pendingcb++;
31564 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
31565 }
31566
31567 return ret;
31568 };
31569
31570 Writable.prototype.cork = function () {
31571 var state = this._writableState;
31572
31573 state.corked++;
31574 };
31575
31576 Writable.prototype.uncork = function () {
31577 var state = this._writableState;
31578
31579 if (state.corked) {
31580 state.corked--;
31581
31582 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
31583 }
31584 };
31585
31586 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
31587 // node::ParseEncoding() requires lower case.
31588 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
31589 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
31590 this._writableState.defaultEncoding = encoding;
31591 return this;
31592 };
31593
31594 function decodeChunk(state, chunk, encoding) {
31595 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
31596 chunk = bufferShim.from(chunk, encoding);
31597 }
31598 return chunk;
31599 }
31600
31601 // if we're already writing something, then just put this
31602 // in the queue, and wait our turn. Otherwise, call _write
31603 // If we return false, then we need a drain event, so set that flag.
31604 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
31605 if (!isBuf) {
31606 chunk = decodeChunk(state, chunk, encoding);
31607 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
31608 }
31609 var len = state.objectMode ? 1 : chunk.length;
31610
31611 state.length += len;
31612
31613 var ret = state.length < state.highWaterMark;
31614 // we must ensure that previous needDrain will not be reset to false.
31615 if (!ret) state.needDrain = true;
31616
31617 if (state.writing || state.corked) {
31618 var last = state.lastBufferedRequest;
31619 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
31620 if (last) {
31621 last.next = state.lastBufferedRequest;
31622 } else {
31623 state.bufferedRequest = state.lastBufferedRequest;
31624 }
31625 state.bufferedRequestCount += 1;
31626 } else {
31627 doWrite(stream, state, false, len, chunk, encoding, cb);
31628 }
31629
31630 return ret;
31631 }
31632
31633 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
31634 state.writelen = len;
31635 state.writecb = cb;
31636 state.writing = true;
31637 state.sync = true;
31638 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
31639 state.sync = false;
31640 }
31641
31642 function onwriteError(stream, state, sync, er, cb) {
31643 --state.pendingcb;
31644 if (sync) processNextTick(cb, er);else cb(er);
31645
31646 stream._writableState.errorEmitted = true;
31647 stream.emit('error', er);
31648 }
31649
31650 function onwriteStateUpdate(state) {
31651 state.writing = false;
31652 state.writecb = null;
31653 state.length -= state.writelen;
31654 state.writelen = 0;
31655 }
31656
31657 function onwrite(stream, er) {
31658 var state = stream._writableState;
31659 var sync = state.sync;
31660 var cb = state.writecb;
31661
31662 onwriteStateUpdate(state);
31663
31664 if (er) onwriteError(stream, state, sync, er, cb);else {
31665 // Check if we're actually ready to finish, but don't emit yet
31666 var finished = needFinish(state);
31667
31668 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
31669 clearBuffer(stream, state);
31670 }
31671
31672 if (sync) {
31673 /*<replacement>*/
31674 asyncWrite(afterWrite, stream, state, finished, cb);
31675 /*</replacement>*/
31676 } else {
31677 afterWrite(stream, state, finished, cb);
31678 }
31679 }
31680 }
31681
31682 function afterWrite(stream, state, finished, cb) {
31683 if (!finished) onwriteDrain(stream, state);
31684 state.pendingcb--;
31685 cb();
31686 finishMaybe(stream, state);
31687 }
31688
31689 // Must force callback to be called on nextTick, so that we don't
31690 // emit 'drain' before the write() consumer gets the 'false' return
31691 // value, and has a chance to attach a 'drain' listener.
31692 function onwriteDrain(stream, state) {
31693 if (state.length === 0 && state.needDrain) {
31694 state.needDrain = false;
31695 stream.emit('drain');
31696 }
31697 }
31698
31699 // if there's something in the buffer waiting, then process it
31700 function clearBuffer(stream, state) {
31701 state.bufferProcessing = true;
31702 var entry = state.bufferedRequest;
31703
31704 if (stream._writev && entry && entry.next) {
31705 // Fast case, write everything using _writev()
31706 var l = state.bufferedRequestCount;
31707 var buffer = new Array(l);
31708 var holder = state.corkedRequestsFree;
31709 holder.entry = entry;
31710
31711 var count = 0;
31712 while (entry) {
31713 buffer[count] = entry;
31714 entry = entry.next;
31715 count += 1;
31716 }
31717
31718 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
31719
31720 // doWrite is almost always async, defer these to save a bit of time
31721 // as the hot path ends with doWrite
31722 state.pendingcb++;
31723 state.lastBufferedRequest = null;
31724 if (holder.next) {
31725 state.corkedRequestsFree = holder.next;
31726 holder.next = null;
31727 } else {
31728 state.corkedRequestsFree = new CorkedRequest(state);
31729 }
31730 } else {
31731 // Slow case, write chunks one-by-one
31732 while (entry) {
31733 var chunk = entry.chunk;
31734 var encoding = entry.encoding;
31735 var cb = entry.callback;
31736 var len = state.objectMode ? 1 : chunk.length;
31737
31738 doWrite(stream, state, false, len, chunk, encoding, cb);
31739 entry = entry.next;
31740 // if we didn't call the onwrite immediately, then
31741 // it means that we need to wait until it does.
31742 // also, that means that the chunk and cb are currently
31743 // being processed, so move the buffer counter past them.
31744 if (state.writing) {
31745 break;
31746 }
31747 }
31748
31749 if (entry === null) state.lastBufferedRequest = null;
31750 }
31751
31752 state.bufferedRequestCount = 0;
31753 state.bufferedRequest = entry;
31754 state.bufferProcessing = false;
31755 }
31756
31757 Writable.prototype._write = function (chunk, encoding, cb) {
31758 cb(new Error('_write() is not implemented'));
31759 };
31760
31761 Writable.prototype._writev = null;
31762
31763 Writable.prototype.end = function (chunk, encoding, cb) {
31764 var state = this._writableState;
31765
31766 if (typeof chunk === 'function') {
31767 cb = chunk;
31768 chunk = null;
31769 encoding = null;
31770 } else if (typeof encoding === 'function') {
31771 cb = encoding;
31772 encoding = null;
31773 }
31774
31775 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
31776
31777 // .end() fully uncorks
31778 if (state.corked) {
31779 state.corked = 1;
31780 this.uncork();
31781 }
31782
31783 // ignore unnecessary end() calls.
31784 if (!state.ending && !state.finished) endWritable(this, state, cb);
31785 };
31786
31787 function needFinish(state) {
31788 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
31789 }
31790
31791 function prefinish(stream, state) {
31792 if (!state.prefinished) {
31793 state.prefinished = true;
31794 stream.emit('prefinish');
31795 }
31796 }
31797
31798 function finishMaybe(stream, state) {
31799 var need = needFinish(state);
31800 if (need) {
31801 if (state.pendingcb === 0) {
31802 prefinish(stream, state);
31803 state.finished = true;
31804 stream.emit('finish');
31805 } else {
31806 prefinish(stream, state);
31807 }
31808 }
31809 return need;
31810 }
31811
31812 function endWritable(stream, state, cb) {
31813 state.ending = true;
31814 finishMaybe(stream, state);
31815 if (cb) {
31816 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
31817 }
31818 state.ended = true;
31819 stream.writable = false;
31820 }
31821
31822 // It seems a linked list but it is not
31823 // there will be only 2 of these for each stream
31824 function CorkedRequest(state) {
31825 var _this = this;
31826
31827 this.next = null;
31828 this.entry = null;
31829 this.finish = function (err) {
31830 var entry = _this.entry;
31831 _this.entry = null;
31832 while (entry) {
31833 var cb = entry.callback;
31834 state.pendingcb--;
31835 cb(err);
31836 entry = entry.next;
31837 }
31838 if (state.corkedRequestsFree) {
31839 state.corkedRequestsFree.next = _this;
31840 } else {
31841 state.corkedRequestsFree = _this;
31842 }
31843 };
31844 }
31845 }).call(this,require('_process'))
31846 },{"./_stream_duplex":15,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"inherits":9,"process-nextick-args":12,"util-deprecate":30}],20:[function(require,module,exports){
31847 'use strict';
31848
31849 var Buffer = require('buffer').Buffer;
31850 /*<replacement>*/
31851 var bufferShim = require('buffer-shims');
31852 /*</replacement>*/
31853
31854 module.exports = BufferList;
31855
31856 function BufferList() {
31857 this.head = null;
31858 this.tail = null;
31859 this.length = 0;
31860 }
31861
31862 BufferList.prototype.push = function (v) {
31863 var entry = { data: v, next: null };
31864 if (this.length > 0) this.tail.next = entry;else this.head = entry;
31865 this.tail = entry;
31866 ++this.length;
31867 };
31868
31869 BufferList.prototype.unshift = function (v) {
31870 var entry = { data: v, next: this.head };
31871 if (this.length === 0) this.tail = entry;
31872 this.head = entry;
31873 ++this.length;
31874 };
31875
31876 BufferList.prototype.shift = function () {
31877 if (this.length === 0) return;
31878 var ret = this.head.data;
31879 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
31880 --this.length;
31881 return ret;
31882 };
31883
31884 BufferList.prototype.clear = function () {
31885 this.head = this.tail = null;
31886 this.length = 0;
31887 };
31888
31889 BufferList.prototype.join = function (s) {
31890 if (this.length === 0) return '';
31891 var p = this.head;
31892 var ret = '' + p.data;
31893 while (p = p.next) {
31894 ret += s + p.data;
31895 }return ret;
31896 };
31897
31898 BufferList.prototype.concat = function (n) {
31899 if (this.length === 0) return bufferShim.alloc(0);
31900 if (this.length === 1) return this.head.data;
31901 var ret = bufferShim.allocUnsafe(n >>> 0);
31902 var p = this.head;
31903 var i = 0;
31904 while (p) {
31905 p.data.copy(ret, i);
31906 i += p.data.length;
31907 p = p.next;
31908 }
31909 return ret;
31910 };
31911 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
31912 module.exports = require('events').EventEmitter;
31913
31914 },{"events":7}],22:[function(require,module,exports){
31915 'use strict';
31916
31917 var Buffer = require('safe-buffer').Buffer;
31918
31919 var isEncoding = Buffer.isEncoding || function (encoding) {
31920 encoding = '' + encoding;
31921 switch (encoding && encoding.toLowerCase()) {
31922 case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
31923 return true;
31924 default:
31925 return false;
31926 }
31927 };
31928
31929 function _normalizeEncoding(enc) {
31930 if (!enc) return 'utf8';
31931 var retried;
31932 while (true) {
31933 switch (enc) {
31934 case 'utf8':
31935 case 'utf-8':
31936 return 'utf8';
31937 case 'ucs2':
31938 case 'ucs-2':
31939 case 'utf16le':
31940 case 'utf-16le':
31941 return 'utf16le';
31942 case 'latin1':
31943 case 'binary':
31944 return 'latin1';
31945 case 'base64':
31946 case 'ascii':
31947 case 'hex':
31948 return enc;
31949 default:
31950 if (retried) return; // undefined
31951 enc = ('' + enc).toLowerCase();
31952 retried = true;
31953 }
31954 }
31955 };
31956
31957 // Do not cache `Buffer.isEncoding` when checking encoding names as some
31958 // modules monkey-patch it to support additional encodings
31959 function normalizeEncoding(enc) {
31960 var nenc = _normalizeEncoding(enc);
31961 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
31962 return nenc || enc;
31963 }
31964
31965 // StringDecoder provides an interface for efficiently splitting a series of
31966 // buffers into a series of JS strings without breaking apart multi-byte
31967 // characters.
31968 exports.StringDecoder = StringDecoder;
31969 function StringDecoder(encoding) {
31970 this.encoding = normalizeEncoding(encoding);
31971 var nb;
31972 switch (this.encoding) {
31973 case 'utf16le':
31974 this.text = utf16Text;
31975 this.end = utf16End;
31976 nb = 4;
31977 break;
31978 case 'utf8':
31979 this.fillLast = utf8FillLast;
31980 nb = 4;
31981 break;
31982 case 'base64':
31983 this.text = base64Text;
31984 this.end = base64End;
31985 nb = 3;
31986 break;
31987 default:
31988 this.write = simpleWrite;
31989 this.end = simpleEnd;
31990 return;
31991 }
31992 this.lastNeed = 0;
31993 this.lastTotal = 0;
31994 this.lastChar = Buffer.allocUnsafe(nb);
31995 }
31996
31997 StringDecoder.prototype.write = function (buf) {
31998 if (buf.length === 0) return '';
31999 var r;
32000 var i;
32001 if (this.lastNeed) {
32002 r = this.fillLast(buf);
32003 if (r === undefined) return '';
32004 i = this.lastNeed;
32005 this.lastNeed = 0;
32006 } else {
32007 i = 0;
32008 }
32009 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
32010 return r || '';
32011 };
32012
32013 StringDecoder.prototype.end = utf8End;
32014
32015 // Returns only complete characters in a Buffer
32016 StringDecoder.prototype.text = utf8Text;
32017
32018 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
32019 StringDecoder.prototype.fillLast = function (buf) {
32020 if (this.lastNeed <= buf.length) {
32021 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
32022 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32023 }
32024 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
32025 this.lastNeed -= buf.length;
32026 };
32027
32028 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
32029 // continuation byte.
32030 function utf8CheckByte(byte) {
32031 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
32032 return -1;
32033 }
32034
32035 // Checks at most 3 bytes at the end of a Buffer in order to detect an
32036 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
32037 // needed to complete the UTF-8 character (if applicable) are returned.
32038 function utf8CheckIncomplete(self, buf, i) {
32039 var j = buf.length - 1;
32040 if (j < i) return 0;
32041 var nb = utf8CheckByte(buf[j]);
32042 if (nb >= 0) {
32043 if (nb > 0) self.lastNeed = nb - 1;
32044 return nb;
32045 }
32046 if (--j < i) return 0;
32047 nb = utf8CheckByte(buf[j]);
32048 if (nb >= 0) {
32049 if (nb > 0) self.lastNeed = nb - 2;
32050 return nb;
32051 }
32052 if (--j < i) return 0;
32053 nb = utf8CheckByte(buf[j]);
32054 if (nb >= 0) {
32055 if (nb > 0) {
32056 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
32057 }
32058 return nb;
32059 }
32060 return 0;
32061 }
32062
32063 // Validates as many continuation bytes for a multi-byte UTF-8 character as
32064 // needed or are available. If we see a non-continuation byte where we expect
32065 // one, we "replace" the validated continuation bytes we've seen so far with
32066 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
32067 // behavior. The continuation byte check is included three times in the case
32068 // where all of the continuation bytes for a character exist in the same buffer.
32069 // It is also done this way as a slight performance increase instead of using a
32070 // loop.
32071 function utf8CheckExtraBytes(self, buf, p) {
32072 if ((buf[0] & 0xC0) !== 0x80) {
32073 self.lastNeed = 0;
32074 return '\ufffd'.repeat(p);
32075 }
32076 if (self.lastNeed > 1 && buf.length > 1) {
32077 if ((buf[1] & 0xC0) !== 0x80) {
32078 self.lastNeed = 1;
32079 return '\ufffd'.repeat(p + 1);
32080 }
32081 if (self.lastNeed > 2 && buf.length > 2) {
32082 if ((buf[2] & 0xC0) !== 0x80) {
32083 self.lastNeed = 2;
32084 return '\ufffd'.repeat(p + 2);
32085 }
32086 }
32087 }
32088 }
32089
32090 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
32091 function utf8FillLast(buf) {
32092 var p = this.lastTotal - this.lastNeed;
32093 var r = utf8CheckExtraBytes(this, buf, p);
32094 if (r !== undefined) return r;
32095 if (this.lastNeed <= buf.length) {
32096 buf.copy(this.lastChar, p, 0, this.lastNeed);
32097 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32098 }
32099 buf.copy(this.lastChar, p, 0, buf.length);
32100 this.lastNeed -= buf.length;
32101 }
32102
32103 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
32104 // partial character, the character's bytes are buffered until the required
32105 // number of bytes are available.
32106 function utf8Text(buf, i) {
32107 var total = utf8CheckIncomplete(this, buf, i);
32108 if (!this.lastNeed) return buf.toString('utf8', i);
32109 this.lastTotal = total;
32110 var end = buf.length - (total - this.lastNeed);
32111 buf.copy(this.lastChar, 0, end);
32112 return buf.toString('utf8', i, end);
32113 }
32114
32115 // For UTF-8, a replacement character for each buffered byte of a (partial)
32116 // character needs to be added to the output.
32117 function utf8End(buf) {
32118 var r = buf && buf.length ? this.write(buf) : '';
32119 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
32120 return r;
32121 }
32122
32123 // UTF-16LE typically needs two bytes per character, but even if we have an even
32124 // number of bytes available, we need to check if we end on a leading/high
32125 // surrogate. In that case, we need to wait for the next two bytes in order to
32126 // decode the last character properly.
32127 function utf16Text(buf, i) {
32128 if ((buf.length - i) % 2 === 0) {
32129 var r = buf.toString('utf16le', i);
32130 if (r) {
32131 var c = r.charCodeAt(r.length - 1);
32132 if (c >= 0xD800 && c <= 0xDBFF) {
32133 this.lastNeed = 2;
32134 this.lastTotal = 4;
32135 this.lastChar[0] = buf[buf.length - 2];
32136 this.lastChar[1] = buf[buf.length - 1];
32137 return r.slice(0, -1);
32138 }
32139 }
32140 return r;
32141 }
32142 this.lastNeed = 1;
32143 this.lastTotal = 2;
32144 this.lastChar[0] = buf[buf.length - 1];
32145 return buf.toString('utf16le', i, buf.length - 1);
32146 }
32147
32148 // For UTF-16LE we do not explicitly append special replacement characters if we
32149 // end on a partial character, we simply let v8 handle that.
32150 function utf16End(buf) {
32151 var r = buf && buf.length ? this.write(buf) : '';
32152 if (this.lastNeed) {
32153 var end = this.lastTotal - this.lastNeed;
32154 return r + this.lastChar.toString('utf16le', 0, end);
32155 }
32156 return r;
32157 }
32158
32159 function base64Text(buf, i) {
32160 var n = (buf.length - i) % 3;
32161 if (n === 0) return buf.toString('base64', i);
32162 this.lastNeed = 3 - n;
32163 this.lastTotal = 3;
32164 if (n === 1) {
32165 this.lastChar[0] = buf[buf.length - 1];
32166 } else {
32167 this.lastChar[0] = buf[buf.length - 2];
32168 this.lastChar[1] = buf[buf.length - 1];
32169 }
32170 return buf.toString('base64', i, buf.length - n);
32171 }
32172
32173 function base64End(buf) {
32174 var r = buf && buf.length ? this.write(buf) : '';
32175 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
32176 return r;
32177 }
32178
32179 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
32180 function simpleWrite(buf) {
32181 return buf.toString(this.encoding);
32182 }
32183
32184 function simpleEnd(buf) {
32185 return buf && buf.length ? this.write(buf) : '';
32186 }
32187 },{"safe-buffer":27}],23:[function(require,module,exports){
32188 module.exports = require('./readable').PassThrough
32189
32190 },{"./readable":24}],24:[function(require,module,exports){
32191 exports = module.exports = require('./lib/_stream_readable.js');
32192 exports.Stream = exports;
32193 exports.Readable = exports;
32194 exports.Writable = require('./lib/_stream_writable.js');
32195 exports.Duplex = require('./lib/_stream_duplex.js');
32196 exports.Transform = require('./lib/_stream_transform.js');
32197 exports.PassThrough = require('./lib/_stream_passthrough.js');
32198
32199 },{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
32200 module.exports = require('./readable').Transform
32201
32202 },{"./readable":24}],26:[function(require,module,exports){
32203 module.exports = require('./lib/_stream_writable.js');
32204
32205 },{"./lib/_stream_writable.js":19}],27:[function(require,module,exports){
32206 module.exports = require('buffer')
32207
32208 },{"buffer":5}],28:[function(require,module,exports){
32209 // Copyright Joyent, Inc. and other Node contributors.
32210 //
32211 // Permission is hereby granted, free of charge, to any person obtaining a
32212 // copy of this software and associated documentation files (the
32213 // "Software"), to deal in the Software without restriction, including
32214 // without limitation the rights to use, copy, modify, merge, publish,
32215 // distribute, sublicense, and/or sell copies of the Software, and to permit
32216 // persons to whom the Software is furnished to do so, subject to the
32217 // following conditions:
32218 //
32219 // The above copyright notice and this permission notice shall be included
32220 // in all copies or substantial portions of the Software.
32221 //
32222 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32223 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32224 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32225 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32226 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32227 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32228 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32229
32230 module.exports = Stream;
32231
32232 var EE = require('events').EventEmitter;
32233 var inherits = require('inherits');
32234
32235 inherits(Stream, EE);
32236 Stream.Readable = require('readable-stream/readable.js');
32237 Stream.Writable = require('readable-stream/writable.js');
32238 Stream.Duplex = require('readable-stream/duplex.js');
32239 Stream.Transform = require('readable-stream/transform.js');
32240 Stream.PassThrough = require('readable-stream/passthrough.js');
32241
32242 // Backwards-compat with node 0.4.x
32243 Stream.Stream = Stream;
32244
32245
32246
32247 // old-style streams. Note that the pipe method (the only relevant
32248 // part of this class) is overridden in the Readable class.
32249
32250 function Stream() {
32251 EE.call(this);
32252 }
32253
32254 Stream.prototype.pipe = function(dest, options) {
32255 var source = this;
32256
32257 function ondata(chunk) {
32258 if (dest.writable) {
32259 if (false === dest.write(chunk) && source.pause) {
32260 source.pause();
32261 }
32262 }
32263 }
32264
32265 source.on('data', ondata);
32266
32267 function ondrain() {
32268 if (source.readable && source.resume) {
32269 source.resume();
32270 }
32271 }
32272
32273 dest.on('drain', ondrain);
32274
32275 // If the 'end' option is not supplied, dest.end() will be called when
32276 // source gets the 'end' or 'close' events. Only dest.end() once.
32277 if (!dest._isStdio && (!options || options.end !== false)) {
32278 source.on('end', onend);
32279 source.on('close', onclose);
32280 }
32281
32282 var didOnEnd = false;
32283 function onend() {
32284 if (didOnEnd) return;
32285 didOnEnd = true;
32286
32287 dest.end();
32288 }
32289
32290
32291 function onclose() {
32292 if (didOnEnd) return;
32293 didOnEnd = true;
32294
32295 if (typeof dest.destroy === 'function') dest.destroy();
32296 }
32297
32298 // don't leave dangling pipes when there are errors.
32299 function onerror(er) {
32300 cleanup();
32301 if (EE.listenerCount(this, 'error') === 0) {
32302 throw er; // Unhandled stream error in pipe.
32303 }
32304 }
32305
32306 source.on('error', onerror);
32307 dest.on('error', onerror);
32308
32309 // remove all the event listeners that were added.
32310 function cleanup() {
32311 source.removeListener('data', ondata);
32312 dest.removeListener('drain', ondrain);
32313
32314 source.removeListener('end', onend);
32315 source.removeListener('close', onclose);
32316
32317 source.removeListener('error', onerror);
32318 dest.removeListener('error', onerror);
32319
32320 source.removeListener('end', cleanup);
32321 source.removeListener('close', cleanup);
32322
32323 dest.removeListener('close', cleanup);
32324 }
32325
32326 source.on('end', cleanup);
32327 source.on('close', cleanup);
32328
32329 dest.on('close', cleanup);
32330
32331 dest.emit('pipe', source);
32332
32333 // Allow for unix-like usage: A.pipe(B).pipe(C)
32334 return dest;
32335 };
32336
32337 },{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":23,"readable-stream/readable.js":24,"readable-stream/transform.js":25,"readable-stream/writable.js":26}],29:[function(require,module,exports){
32338 // Copyright Joyent, Inc. and other Node contributors.
32339 //
32340 // Permission is hereby granted, free of charge, to any person obtaining a
32341 // copy of this software and associated documentation files (the
32342 // "Software"), to deal in the Software without restriction, including
32343 // without limitation the rights to use, copy, modify, merge, publish,
32344 // distribute, sublicense, and/or sell copies of the Software, and to permit
32345 // persons to whom the Software is furnished to do so, subject to the
32346 // following conditions:
32347 //
32348 // The above copyright notice and this permission notice shall be included
32349 // in all copies or substantial portions of the Software.
32350 //
32351 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32352 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32353 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32354 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32355 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32356 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32357 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32358
32359 var Buffer = require('buffer').Buffer;
32360
32361 var isBufferEncoding = Buffer.isEncoding
32362 || function(encoding) {
32363 switch (encoding && encoding.toLowerCase()) {
32364 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
32365 default: return false;
32366 }
32367 }
32368
32369
32370 function assertEncoding(encoding) {
32371 if (encoding && !isBufferEncoding(encoding)) {
32372 throw new Error('Unknown encoding: ' + encoding);
32373 }
32374 }
32375
32376 // StringDecoder provides an interface for efficiently splitting a series of
32377 // buffers into a series of JS strings without breaking apart multi-byte
32378 // characters. CESU-8 is handled as part of the UTF-8 encoding.
32379 //
32380 // @TODO Handling all encodings inside a single object makes it very difficult
32381 // to reason about this code, so it should be split up in the future.
32382 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
32383 // points as used by CESU-8.
32384 var StringDecoder = exports.StringDecoder = function(encoding) {
32385 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
32386 assertEncoding(encoding);
32387 switch (this.encoding) {
32388 case 'utf8':
32389 // CESU-8 represents each of Surrogate Pair by 3-bytes
32390 this.surrogateSize = 3;
32391 break;
32392 case 'ucs2':
32393 case 'utf16le':
32394 // UTF-16 represents each of Surrogate Pair by 2-bytes
32395 this.surrogateSize = 2;
32396 this.detectIncompleteChar = utf16DetectIncompleteChar;
32397 break;
32398 case 'base64':
32399 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
32400 this.surrogateSize = 3;
32401 this.detectIncompleteChar = base64DetectIncompleteChar;
32402 break;
32403 default:
32404 this.write = passThroughWrite;
32405 return;
32406 }
32407
32408 // Enough space to store all bytes of a single character. UTF-8 needs 4
32409 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
32410 this.charBuffer = new Buffer(6);
32411 // Number of bytes received for the current incomplete multi-byte character.
32412 this.charReceived = 0;
32413 // Number of bytes expected for the current incomplete multi-byte character.
32414 this.charLength = 0;
32415 };
32416
32417
32418 // write decodes the given buffer and returns it as JS string that is
32419 // guaranteed to not contain any partial multi-byte characters. Any partial
32420 // character found at the end of the buffer is buffered up, and will be
32421 // returned when calling write again with the remaining bytes.
32422 //
32423 // Note: Converting a Buffer containing an orphan surrogate to a String
32424 // currently works, but converting a String to a Buffer (via `new Buffer`, or
32425 // Buffer#write) will replace incomplete surrogates with the unicode
32426 // replacement character. See https://codereview.chromium.org/121173009/ .
32427 StringDecoder.prototype.write = function(buffer) {
32428 var charStr = '';
32429 // if our last write ended with an incomplete multibyte character
32430 while (this.charLength) {
32431 // determine how many remaining bytes this buffer has to offer for this char
32432 var available = (buffer.length >= this.charLength - this.charReceived) ?
32433 this.charLength - this.charReceived :
32434 buffer.length;
32435
32436 // add the new bytes to the char buffer
32437 buffer.copy(this.charBuffer, this.charReceived, 0, available);
32438 this.charReceived += available;
32439
32440 if (this.charReceived < this.charLength) {
32441 // still not enough chars in this buffer? wait for more ...
32442 return '';
32443 }
32444
32445 // remove bytes belonging to the current character from the buffer
32446 buffer = buffer.slice(available, buffer.length);
32447
32448 // get the character that was split
32449 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
32450
32451 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32452 var charCode = charStr.charCodeAt(charStr.length - 1);
32453 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32454 this.charLength += this.surrogateSize;
32455 charStr = '';
32456 continue;
32457 }
32458 this.charReceived = this.charLength = 0;
32459
32460 // if there are no more bytes in this buffer, just emit our char
32461 if (buffer.length === 0) {
32462 return charStr;
32463 }
32464 break;
32465 }
32466
32467 // determine and set charLength / charReceived
32468 this.detectIncompleteChar(buffer);
32469
32470 var end = buffer.length;
32471 if (this.charLength) {
32472 // buffer the incomplete character bytes we got
32473 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
32474 end -= this.charReceived;
32475 }
32476
32477 charStr += buffer.toString(this.encoding, 0, end);
32478
32479 var end = charStr.length - 1;
32480 var charCode = charStr.charCodeAt(end);
32481 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32482 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32483 var size = this.surrogateSize;
32484 this.charLength += size;
32485 this.charReceived += size;
32486 this.charBuffer.copy(this.charBuffer, size, 0, size);
32487 buffer.copy(this.charBuffer, 0, 0, size);
32488 return charStr.substring(0, end);
32489 }
32490
32491 // or just emit the charStr
32492 return charStr;
32493 };
32494
32495 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
32496 // the end of the given buffer. If so, it sets this.charLength to the byte
32497 // length that character, and sets this.charReceived to the number of bytes
32498 // that are available for this character.
32499 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
32500 // determine how many bytes we have to check at the end of this buffer
32501 var i = (buffer.length >= 3) ? 3 : buffer.length;
32502
32503 // Figure out if one of the last i bytes of our buffer announces an
32504 // incomplete char.
32505 for (; i > 0; i--) {
32506 var c = buffer[buffer.length - i];
32507
32508 // See http://en.wikipedia.org/wiki/UTF-8#Description
32509
32510 // 110XXXXX
32511 if (i == 1 && c >> 5 == 0x06) {
32512 this.charLength = 2;
32513 break;
32514 }
32515
32516 // 1110XXXX
32517 if (i <= 2 && c >> 4 == 0x0E) {
32518 this.charLength = 3;
32519 break;
32520 }
32521
32522 // 11110XXX
32523 if (i <= 3 && c >> 3 == 0x1E) {
32524 this.charLength = 4;
32525 break;
32526 }
32527 }
32528 this.charReceived = i;
32529 };
32530
32531 StringDecoder.prototype.end = function(buffer) {
32532 var res = '';
32533 if (buffer && buffer.length)
32534 res = this.write(buffer);
32535
32536 if (this.charReceived) {
32537 var cr = this.charReceived;
32538 var buf = this.charBuffer;
32539 var enc = this.encoding;
32540 res += buf.slice(0, cr).toString(enc);
32541 }
32542
32543 return res;
32544 };
32545
32546 function passThroughWrite(buffer) {
32547 return buffer.toString(this.encoding);
32548 }
32549
32550 function utf16DetectIncompleteChar(buffer) {
32551 this.charReceived = buffer.length % 2;
32552 this.charLength = this.charReceived ? 2 : 0;
32553 }
32554
32555 function base64DetectIncompleteChar(buffer) {
32556 this.charReceived = buffer.length % 3;
32557 this.charLength = this.charReceived ? 3 : 0;
32558 }
32559
32560 },{"buffer":5}],30:[function(require,module,exports){
32561 (function (global){
32562
32563 /**
32564 * Module exports.
32565 */
32566
32567 module.exports = deprecate;
32568
32569 /**
32570 * Mark that a method should not be used.
32571 * Returns a modified function which warns once by default.
32572 *
32573 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
32574 *
32575 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
32576 * will throw an Error when invoked.
32577 *
32578 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
32579 * will invoke `console.trace()` instead of `console.error()`.
32580 *
32581 * @param {Function} fn - the function to deprecate
32582 * @param {String} msg - the string to print to the console when `fn` is invoked
32583 * @returns {Function} a new "deprecated" version of `fn`
32584 * @api public
32585 */
32586
32587 function deprecate (fn, msg) {
32588 if (config('noDeprecation')) {
32589 return fn;
32590 }
32591
32592 var warned = false;
32593 function deprecated() {
32594 if (!warned) {
32595 if (config('throwDeprecation')) {
32596 throw new Error(msg);
32597 } else if (config('traceDeprecation')) {
32598 console.trace(msg);
32599 } else {
32600 console.warn(msg);
32601 }
32602 warned = true;
32603 }
32604 return fn.apply(this, arguments);
32605 }
32606
32607 return deprecated;
32608 }
32609
32610 /**
32611 * Checks `localStorage` for boolean values for the given `name`.
32612 *
32613 * @param {String} name
32614 * @returns {Boolean}
32615 * @api private
32616 */
32617
32618 function config (name) {
32619 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
32620 try {
32621 if (!global.localStorage) return false;
32622 } catch (_) {
32623 return false;
32624 }
32625 var val = global.localStorage[name];
32626 if (null == val) return false;
32627 return String(val).toLowerCase() === 'true';
32628 }
32629
32630 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32631 },{}],31:[function(require,module,exports){
32632 arguments[4][9][0].apply(exports,arguments)
32633 },{"dup":9}],32:[function(require,module,exports){
32634 module.exports = function isBuffer(arg) {
32635 return arg && typeof arg === 'object'
32636 && typeof arg.copy === 'function'
32637 && typeof arg.fill === 'function'
32638 && typeof arg.readUInt8 === 'function';
32639 }
32640 },{}],33:[function(require,module,exports){
32641 (function (process,global){
32642 // Copyright Joyent, Inc. and other Node contributors.
32643 //
32644 // Permission is hereby granted, free of charge, to any person obtaining a
32645 // copy of this software and associated documentation files (the
32646 // "Software"), to deal in the Software without restriction, including
32647 // without limitation the rights to use, copy, modify, merge, publish,
32648 // distribute, sublicense, and/or sell copies of the Software, and to permit
32649 // persons to whom the Software is furnished to do so, subject to the
32650 // following conditions:
32651 //
32652 // The above copyright notice and this permission notice shall be included
32653 // in all copies or substantial portions of the Software.
32654 //
32655 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32656 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32657 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32658 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32659 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32660 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32661 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32662
32663 var formatRegExp = /%[sdj%]/g;
32664 exports.format = function(f) {
32665 if (!isString(f)) {
32666 var objects = [];
32667 for (var i = 0; i < arguments.length; i++) {
32668 objects.push(inspect(arguments[i]));
32669 }
32670 return objects.join(' ');
32671 }
32672
32673 var i = 1;
32674 var args = arguments;
32675 var len = args.length;
32676 var str = String(f).replace(formatRegExp, function(x) {
32677 if (x === '%%') return '%';
32678 if (i >= len) return x;
32679 switch (x) {
32680 case '%s': return String(args[i++]);
32681 case '%d': return Number(args[i++]);
32682 case '%j':
32683 try {
32684 return JSON.stringify(args[i++]);
32685 } catch (_) {
32686 return '[Circular]';
32687 }
32688 default:
32689 return x;
32690 }
32691 });
32692 for (var x = args[i]; i < len; x = args[++i]) {
32693 if (isNull(x) || !isObject(x)) {
32694 str += ' ' + x;
32695 } else {
32696 str += ' ' + inspect(x);
32697 }
32698 }
32699 return str;
32700 };
32701
32702
32703 // Mark that a method should not be used.
32704 // Returns a modified function which warns once by default.
32705 // If --no-deprecation is set, then it is a no-op.
32706 exports.deprecate = function(fn, msg) {
32707 // Allow for deprecating things in the process of starting up.
32708 if (isUndefined(global.process)) {
32709 return function() {
32710 return exports.deprecate(fn, msg).apply(this, arguments);
32711 };
32712 }
32713
32714 if (process.noDeprecation === true) {
32715 return fn;
32716 }
32717
32718 var warned = false;
32719 function deprecated() {
32720 if (!warned) {
32721 if (process.throwDeprecation) {
32722 throw new Error(msg);
32723 } else if (process.traceDeprecation) {
32724 console.trace(msg);
32725 } else {
32726 console.error(msg);
32727 }
32728 warned = true;
32729 }
32730 return fn.apply(this, arguments);
32731 }
32732
32733 return deprecated;
32734 };
32735
32736
32737 var debugs = {};
32738 var debugEnviron;
32739 exports.debuglog = function(set) {
32740 if (isUndefined(debugEnviron))
32741 debugEnviron = process.env.NODE_DEBUG || '';
32742 set = set.toUpperCase();
32743 if (!debugs[set]) {
32744 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
32745 var pid = process.pid;
32746 debugs[set] = function() {
32747 var msg = exports.format.apply(exports, arguments);
32748 console.error('%s %d: %s', set, pid, msg);
32749 };
32750 } else {
32751 debugs[set] = function() {};
32752 }
32753 }
32754 return debugs[set];
32755 };
32756
32757
32758 /**
32759 * Echos the value of a value. Trys to print the value out
32760 * in the best way possible given the different types.
32761 *
32762 * @param {Object} obj The object to print out.
32763 * @param {Object} opts Optional options object that alters the output.
32764 */
32765 /* legacy: obj, showHidden, depth, colors*/
32766 function inspect(obj, opts) {
32767 // default options
32768 var ctx = {
32769 seen: [],
32770 stylize: stylizeNoColor
32771 };
32772 // legacy...
32773 if (arguments.length >= 3) ctx.depth = arguments[2];
32774 if (arguments.length >= 4) ctx.colors = arguments[3];
32775 if (isBoolean(opts)) {
32776 // legacy...
32777 ctx.showHidden = opts;
32778 } else if (opts) {
32779 // got an "options" object
32780 exports._extend(ctx, opts);
32781 }
32782 // set default options
32783 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
32784 if (isUndefined(ctx.depth)) ctx.depth = 2;
32785 if (isUndefined(ctx.colors)) ctx.colors = false;
32786 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
32787 if (ctx.colors) ctx.stylize = stylizeWithColor;
32788 return formatValue(ctx, obj, ctx.depth);
32789 }
32790 exports.inspect = inspect;
32791
32792
32793 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
32794 inspect.colors = {
32795 'bold' : [1, 22],
32796 'italic' : [3, 23],
32797 'underline' : [4, 24],
32798 'inverse' : [7, 27],
32799 'white' : [37, 39],
32800 'grey' : [90, 39],
32801 'black' : [30, 39],
32802 'blue' : [34, 39],
32803 'cyan' : [36, 39],
32804 'green' : [32, 39],
32805 'magenta' : [35, 39],
32806 'red' : [31, 39],
32807 'yellow' : [33, 39]
32808 };
32809
32810 // Don't use 'blue' not visible on cmd.exe
32811 inspect.styles = {
32812 'special': 'cyan',
32813 'number': 'yellow',
32814 'boolean': 'yellow',
32815 'undefined': 'grey',
32816 'null': 'bold',
32817 'string': 'green',
32818 'date': 'magenta',
32819 // "name": intentionally not styling
32820 'regexp': 'red'
32821 };
32822
32823
32824 function stylizeWithColor(str, styleType) {
32825 var style = inspect.styles[styleType];
32826
32827 if (style) {
32828 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
32829 '\u001b[' + inspect.colors[style][1] + 'm';
32830 } else {
32831 return str;
32832 }
32833 }
32834
32835
32836 function stylizeNoColor(str, styleType) {
32837 return str;
32838 }
32839
32840
32841 function arrayToHash(array) {
32842 var hash = {};
32843
32844 array.forEach(function(val, idx) {
32845 hash[val] = true;
32846 });
32847
32848 return hash;
32849 }
32850
32851
32852 function formatValue(ctx, value, recurseTimes) {
32853 // Provide a hook for user-specified inspect functions.
32854 // Check that value is an object with an inspect function on it
32855 if (ctx.customInspect &&
32856 value &&
32857 isFunction(value.inspect) &&
32858 // Filter out the util module, it's inspect function is special
32859 value.inspect !== exports.inspect &&
32860 // Also filter out any prototype objects using the circular check.
32861 !(value.constructor && value.constructor.prototype === value)) {
32862 var ret = value.inspect(recurseTimes, ctx);
32863 if (!isString(ret)) {
32864 ret = formatValue(ctx, ret, recurseTimes);
32865 }
32866 return ret;
32867 }
32868
32869 // Primitive types cannot have properties
32870 var primitive = formatPrimitive(ctx, value);
32871 if (primitive) {
32872 return primitive;
32873 }
32874
32875 // Look up the keys of the object.
32876 var keys = Object.keys(value);
32877 var visibleKeys = arrayToHash(keys);
32878
32879 if (ctx.showHidden) {
32880 keys = Object.getOwnPropertyNames(value);
32881 }
32882
32883 // IE doesn't make error fields non-enumerable
32884 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
32885 if (isError(value)
32886 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
32887 return formatError(value);
32888 }
32889
32890 // Some type of object without properties can be shortcutted.
32891 if (keys.length === 0) {
32892 if (isFunction(value)) {
32893 var name = value.name ? ': ' + value.name : '';
32894 return ctx.stylize('[Function' + name + ']', 'special');
32895 }
32896 if (isRegExp(value)) {
32897 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32898 }
32899 if (isDate(value)) {
32900 return ctx.stylize(Date.prototype.toString.call(value), 'date');
32901 }
32902 if (isError(value)) {
32903 return formatError(value);
32904 }
32905 }
32906
32907 var base = '', array = false, braces = ['{', '}'];
32908
32909 // Make Array say that they are Array
32910 if (isArray(value)) {
32911 array = true;
32912 braces = ['[', ']'];
32913 }
32914
32915 // Make functions say that they are functions
32916 if (isFunction(value)) {
32917 var n = value.name ? ': ' + value.name : '';
32918 base = ' [Function' + n + ']';
32919 }
32920
32921 // Make RegExps say that they are RegExps
32922 if (isRegExp(value)) {
32923 base = ' ' + RegExp.prototype.toString.call(value);
32924 }
32925
32926 // Make dates with properties first say the date
32927 if (isDate(value)) {
32928 base = ' ' + Date.prototype.toUTCString.call(value);
32929 }
32930
32931 // Make error with message first say the error
32932 if (isError(value)) {
32933 base = ' ' + formatError(value);
32934 }
32935
32936 if (keys.length === 0 && (!array || value.length == 0)) {
32937 return braces[0] + base + braces[1];
32938 }
32939
32940 if (recurseTimes < 0) {
32941 if (isRegExp(value)) {
32942 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32943 } else {
32944 return ctx.stylize('[Object]', 'special');
32945 }
32946 }
32947
32948 ctx.seen.push(value);
32949
32950 var output;
32951 if (array) {
32952 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
32953 } else {
32954 output = keys.map(function(key) {
32955 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
32956 });
32957 }
32958
32959 ctx.seen.pop();
32960
32961 return reduceToSingleString(output, base, braces);
32962 }
32963
32964
32965 function formatPrimitive(ctx, value) {
32966 if (isUndefined(value))
32967 return ctx.stylize('undefined', 'undefined');
32968 if (isString(value)) {
32969 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
32970 .replace(/'/g, "\\'")
32971 .replace(/\\"/g, '"') + '\'';
32972 return ctx.stylize(simple, 'string');
32973 }
32974 if (isNumber(value))
32975 return ctx.stylize('' + value, 'number');
32976 if (isBoolean(value))
32977 return ctx.stylize('' + value, 'boolean');
32978 // For some reason typeof null is "object", so special case here.
32979 if (isNull(value))
32980 return ctx.stylize('null', 'null');
32981 }
32982
32983
32984 function formatError(value) {
32985 return '[' + Error.prototype.toString.call(value) + ']';
32986 }
32987
32988
32989 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
32990 var output = [];
32991 for (var i = 0, l = value.length; i < l; ++i) {
32992 if (hasOwnProperty(value, String(i))) {
32993 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32994 String(i), true));
32995 } else {
32996 output.push('');
32997 }
32998 }
32999 keys.forEach(function(key) {
33000 if (!key.match(/^\d+$/)) {
33001 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
33002 key, true));
33003 }
33004 });
33005 return output;
33006 }
33007
33008
33009 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
33010 var name, str, desc;
33011 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
33012 if (desc.get) {
33013 if (desc.set) {
33014 str = ctx.stylize('[Getter/Setter]', 'special');
33015 } else {
33016 str = ctx.stylize('[Getter]', 'special');
33017 }
33018 } else {
33019 if (desc.set) {
33020 str = ctx.stylize('[Setter]', 'special');
33021 }
33022 }
33023 if (!hasOwnProperty(visibleKeys, key)) {
33024 name = '[' + key + ']';
33025 }
33026 if (!str) {
33027 if (ctx.seen.indexOf(desc.value) < 0) {
33028 if (isNull(recurseTimes)) {
33029 str = formatValue(ctx, desc.value, null);
33030 } else {
33031 str = formatValue(ctx, desc.value, recurseTimes - 1);
33032 }
33033 if (str.indexOf('\n') > -1) {
33034 if (array) {
33035 str = str.split('\n').map(function(line) {
33036 return ' ' + line;
33037 }).join('\n').substr(2);
33038 } else {
33039 str = '\n' + str.split('\n').map(function(line) {
33040 return ' ' + line;
33041 }).join('\n');
33042 }
33043 }
33044 } else {
33045 str = ctx.stylize('[Circular]', 'special');
33046 }
33047 }
33048 if (isUndefined(name)) {
33049 if (array && key.match(/^\d+$/)) {
33050 return str;
33051 }
33052 name = JSON.stringify('' + key);
33053 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
33054 name = name.substr(1, name.length - 2);
33055 name = ctx.stylize(name, 'name');
33056 } else {
33057 name = name.replace(/'/g, "\\'")
33058 .replace(/\\"/g, '"')
33059 .replace(/(^"|"$)/g, "'");
33060 name = ctx.stylize(name, 'string');
33061 }
33062 }
33063
33064 return name + ': ' + str;
33065 }
33066
33067
33068 function reduceToSingleString(output, base, braces) {
33069 var numLinesEst = 0;
33070 var length = output.reduce(function(prev, cur) {
33071 numLinesEst++;
33072 if (cur.indexOf('\n') >= 0) numLinesEst++;
33073 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
33074 }, 0);
33075
33076 if (length > 60) {
33077 return braces[0] +
33078 (base === '' ? '' : base + '\n ') +
33079 ' ' +
33080 output.join(',\n ') +
33081 ' ' +
33082 braces[1];
33083 }
33084
33085 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
33086 }
33087
33088
33089 // NOTE: These type checking functions intentionally don't use `instanceof`
33090 // because it is fragile and can be easily faked with `Object.create()`.
33091 function isArray(ar) {
33092 return Array.isArray(ar);
33093 }
33094 exports.isArray = isArray;
33095
33096 function isBoolean(arg) {
33097 return typeof arg === 'boolean';
33098 }
33099 exports.isBoolean = isBoolean;
33100
33101 function isNull(arg) {
33102 return arg === null;
33103 }
33104 exports.isNull = isNull;
33105
33106 function isNullOrUndefined(arg) {
33107 return arg == null;
33108 }
33109 exports.isNullOrUndefined = isNullOrUndefined;
33110
33111 function isNumber(arg) {
33112 return typeof arg === 'number';
33113 }
33114 exports.isNumber = isNumber;
33115
33116 function isString(arg) {
33117 return typeof arg === 'string';
33118 }
33119 exports.isString = isString;
33120
33121 function isSymbol(arg) {
33122 return typeof arg === 'symbol';
33123 }
33124 exports.isSymbol = isSymbol;
33125
33126 function isUndefined(arg) {
33127 return arg === void 0;
33128 }
33129 exports.isUndefined = isUndefined;
33130
33131 function isRegExp(re) {
33132 return isObject(re) && objectToString(re) === '[object RegExp]';
33133 }
33134 exports.isRegExp = isRegExp;
33135
33136 function isObject(arg) {
33137 return typeof arg === 'object' && arg !== null;
33138 }
33139 exports.isObject = isObject;
33140
33141 function isDate(d) {
33142 return isObject(d) && objectToString(d) === '[object Date]';
33143 }
33144 exports.isDate = isDate;
33145
33146 function isError(e) {
33147 return isObject(e) &&
33148 (objectToString(e) === '[object Error]' || e instanceof Error);
33149 }
33150 exports.isError = isError;
33151
33152 function isFunction(arg) {
33153 return typeof arg === 'function';
33154 }
33155 exports.isFunction = isFunction;
33156
33157 function isPrimitive(arg) {
33158 return arg === null ||
33159 typeof arg === 'boolean' ||
33160 typeof arg === 'number' ||
33161 typeof arg === 'string' ||
33162 typeof arg === 'symbol' || // ES6 symbol
33163 typeof arg === 'undefined';
33164 }
33165 exports.isPrimitive = isPrimitive;
33166
33167 exports.isBuffer = require('./support/isBuffer');
33168
33169 function objectToString(o) {
33170 return Object.prototype.toString.call(o);
33171 }
33172
33173
33174 function pad(n) {
33175 return n < 10 ? '0' + n.toString(10) : n.toString(10);
33176 }
33177
33178
33179 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
33180 'Oct', 'Nov', 'Dec'];
33181
33182 // 26 Feb 16:19:34
33183 function timestamp() {
33184 var d = new Date();
33185 var time = [pad(d.getHours()),
33186 pad(d.getMinutes()),
33187 pad(d.getSeconds())].join(':');
33188 return [d.getDate(), months[d.getMonth()], time].join(' ');
33189 }
33190
33191
33192 // log is just a thin wrapper to console.log that prepends a timestamp
33193 exports.log = function() {
33194 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
33195 };
33196
33197
33198 /**
33199 * Inherit the prototype methods from one constructor into another.
33200 *
33201 * The Function.prototype.inherits from lang.js rewritten as a standalone
33202 * function (not on Function.prototype). NOTE: If this file is to be loaded
33203 * during bootstrapping this function needs to be rewritten using some native
33204 * functions as prototype setup using normal JavaScript does not work as
33205 * expected during bootstrapping (see mirror.js in r114903).
33206 *
33207 * @param {function} ctor Constructor function which needs to inherit the
33208 * prototype.
33209 * @param {function} superCtor Constructor function to inherit prototype from.
33210 */
33211 exports.inherits = require('inherits');
33212
33213 exports._extend = function(origin, add) {
33214 // Don't do anything if add isn't an object
33215 if (!add || !isObject(add)) return origin;
33216
33217 var keys = Object.keys(add);
33218 var i = keys.length;
33219 while (i--) {
33220 origin[keys[i]] = add[keys[i]];
33221 }
33222 return origin;
33223 };
33224
33225 function hasOwnProperty(obj, prop) {
33226 return Object.prototype.hasOwnProperty.call(obj, prop);
33227 }
33228
33229 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
33230 },{"./support/isBuffer":32,"_process":13,"inherits":31}],34:[function(require,module,exports){
33231 let bitcoin = require('bitcoinjs-lib');
33232
33233 module.exports = {
33234 bitcoin
33235 }
33236
33237 },{"bitcoinjs-lib":52}],35:[function(require,module,exports){
33238 // base-x encoding
33239 // Forked from https://github.com/cryptocoinjs/bs58
33240 // Originally written by Mike Hearn for BitcoinJ
33241 // Copyright (c) 2011 Google Inc
33242 // Ported to JavaScript by Stefan Thomas
33243 // Merged Buffer refactorings from base58-native by Stephen Pair
33244 // Copyright (c) 2013 BitPay Inc
33245
33246 var Buffer = require('safe-buffer').Buffer
33247
33248 module.exports = function base (ALPHABET) {
33249 var ALPHABET_MAP = {}
33250 var BASE = ALPHABET.length
33251 var LEADER = ALPHABET.charAt(0)
33252
33253 // pre-compute lookup table
33254 for (var z = 0; z < ALPHABET.length; z++) {
33255 var x = ALPHABET.charAt(z)
33256
33257 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33258 ALPHABET_MAP[x] = z
33259 }
33260
33261 function encode (source) {
33262 if (source.length === 0) return ''
33263
33264 var digits = [0]
33265 for (var i = 0; i < source.length; ++i) {
33266 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
33267 carry += digits[j] << 8
33268 digits[j] = carry % BASE
33269 carry = (carry / BASE) | 0
33270 }
33271
33272 while (carry > 0) {
33273 digits.push(carry % BASE)
33274 carry = (carry / BASE) | 0
33275 }
33276 }
33277
33278 var string = ''
33279
33280 // deal with leading zeros
33281 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
33282 // convert digits to a string
33283 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
33284
33285 return string
33286 }
33287
33288 function decodeUnsafe (string) {
33289 if (typeof string !== 'string') throw new TypeError('Expected String')
33290 if (string.length === 0) return Buffer.allocUnsafe(0)
33291
33292 var bytes = [0]
33293 for (var i = 0; i < string.length; i++) {
33294 var value = ALPHABET_MAP[string[i]]
33295 if (value === undefined) return
33296
33297 for (var j = 0, carry = value; j < bytes.length; ++j) {
33298 carry += bytes[j] * BASE
33299 bytes[j] = carry & 0xff
33300 carry >>= 8
33301 }
33302
33303 while (carry > 0) {
33304 bytes.push(carry & 0xff)
33305 carry >>= 8
33306 }
33307 }
33308
33309 // deal with leading zeros
33310 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
33311 bytes.push(0)
33312 }
33313
33314 return Buffer.from(bytes.reverse())
33315 }
33316
33317 function decode (string) {
33318 var buffer = decodeUnsafe(string)
33319 if (buffer) return buffer
33320
33321 throw new Error('Non-base' + BASE + ' character')
33322 }
33323
33324 return {
33325 encode: encode,
33326 decodeUnsafe: decodeUnsafe,
33327 decode: decode
33328 }
33329 }
33330
33331 },{"safe-buffer":101}],36:[function(require,module,exports){
33332 'use strict'
33333 var ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
33334
33335 // pre-compute lookup table
33336 var ALPHABET_MAP = {}
33337 for (var z = 0; z < ALPHABET.length; z++) {
33338 var x = ALPHABET.charAt(z)
33339
33340 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33341 ALPHABET_MAP[x] = z
33342 }
33343
33344 function polymodStep (pre) {
33345 var b = pre >> 25
33346 return ((pre & 0x1FFFFFF) << 5) ^
33347 (-((b >> 0) & 1) & 0x3b6a57b2) ^
33348 (-((b >> 1) & 1) & 0x26508e6d) ^
33349 (-((b >> 2) & 1) & 0x1ea119fa) ^
33350 (-((b >> 3) & 1) & 0x3d4233dd) ^
33351 (-((b >> 4) & 1) & 0x2a1462b3)
33352 }
33353
33354 function prefixChk (prefix) {
33355 var chk = 1
33356 for (var i = 0; i < prefix.length; ++i) {
33357 var c = prefix.charCodeAt(i)
33358 if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')')
33359
33360 chk = polymodStep(chk) ^ (c >> 5)
33361 }
33362 chk = polymodStep(chk)
33363
33364 for (i = 0; i < prefix.length; ++i) {
33365 var v = prefix.charCodeAt(i)
33366 chk = polymodStep(chk) ^ (v & 0x1f)
33367 }
33368 return chk
33369 }
33370
33371 function encode (prefix, words, LIMIT) {
33372 LIMIT = LIMIT || 90
33373 if ((prefix.length + 7 + words.length) > LIMIT) throw new TypeError('Exceeds length limit')
33374
33375 prefix = prefix.toLowerCase()
33376
33377 // determine chk mod
33378 var chk = prefixChk(prefix)
33379 var result = prefix + '1'
33380 for (var i = 0; i < words.length; ++i) {
33381 var x = words[i]
33382 if ((x >> 5) !== 0) throw new Error('Non 5-bit word')
33383
33384 chk = polymodStep(chk) ^ x
33385 result += ALPHABET.charAt(x)
33386 }
33387
33388 for (i = 0; i < 6; ++i) {
33389 chk = polymodStep(chk)
33390 }
33391 chk ^= 1
33392
33393 for (i = 0; i < 6; ++i) {
33394 var v = (chk >> ((5 - i) * 5)) & 0x1f
33395 result += ALPHABET.charAt(v)
33396 }
33397
33398 return result
33399 }
33400
33401 function decode (str, LIMIT) {
33402 LIMIT = LIMIT || 90
33403 if (str.length < 8) throw new TypeError(str + ' too short')
33404 if (str.length > LIMIT) throw new TypeError('Exceeds length limit')
33405
33406 // don't allow mixed case
33407 var lowered = str.toLowerCase()
33408 var uppered = str.toUpperCase()
33409 if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str)
33410 str = lowered
33411
33412 var split = str.lastIndexOf('1')
33413 if (split === -1) throw new Error('No separator character for ' + str)
33414 if (split === 0) throw new Error('Missing prefix for ' + str)
33415
33416 var prefix = str.slice(0, split)
33417 var wordChars = str.slice(split + 1)
33418 if (wordChars.length < 6) throw new Error('Data too short')
33419
33420 var chk = prefixChk(prefix)
33421 var words = []
33422 for (var i = 0; i < wordChars.length; ++i) {
33423 var c = wordChars.charAt(i)
33424 var v = ALPHABET_MAP[c]
33425 if (v === undefined) throw new Error('Unknown character ' + c)
33426 chk = polymodStep(chk) ^ v
33427
33428 // not in the checksum?
33429 if (i + 6 >= wordChars.length) continue
33430 words.push(v)
33431 }
33432
33433 if (chk !== 1) throw new Error('Invalid checksum for ' + str)
33434 return { prefix: prefix, words: words }
33435 }
33436
33437 function convert (data, inBits, outBits, pad) {
33438 var value = 0
33439 var bits = 0
33440 var maxV = (1 << outBits) - 1
33441
33442 var result = []
33443 for (var i = 0; i < data.length; ++i) {
33444 value = (value << inBits) | data[i]
33445 bits += inBits
33446
33447 while (bits >= outBits) {
33448 bits -= outBits
33449 result.push((value >> bits) & maxV)
33450 }
33451 }
33452
33453 if (pad) {
33454 if (bits > 0) {
33455 result.push((value << (outBits - bits)) & maxV)
33456 }
33457 } else {
33458 if (bits >= inBits) throw new Error('Excess padding')
33459 if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding')
33460 }
33461
33462 return result
33463 }
33464
33465 function toWords (bytes) {
33466 return convert(bytes, 8, 5, true)
33467 }
33468
33469 function fromWords (words) {
33470 return convert(words, 5, 8, false)
33471 }
33472
33473 module.exports = {
33474 decode: decode,
33475 encode: encode,
33476 toWords: toWords,
33477 fromWords: fromWords
33478 }
33479
33480 },{}],37:[function(require,module,exports){
33481 // (public) Constructor
33482 function BigInteger(a, b, c) {
33483 if (!(this instanceof BigInteger))
33484 return new BigInteger(a, b, c)
33485
33486 if (a != null) {
33487 if ("number" == typeof a) this.fromNumber(a, b, c)
33488 else if (b == null && "string" != typeof a) this.fromString(a, 256)
33489 else this.fromString(a, b)
33490 }
33491 }
33492
33493 var proto = BigInteger.prototype
33494
33495 // duck-typed isBigInteger
33496 proto.__bigi = require('../package.json').version
33497 BigInteger.isBigInteger = function (obj, check_ver) {
33498 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
33499 }
33500
33501 // Bits per digit
33502 var dbits
33503
33504 // am: Compute w_j += (x*this_i), propagate carries,
33505 // c is initial carry, returns final carry.
33506 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
33507 // We need to select the fastest one that works in this environment.
33508
33509 // am1: use a single mult and divide to get the high bits,
33510 // max digit bits should be 26 because
33511 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
33512 function am1(i, x, w, j, c, n) {
33513 while (--n >= 0) {
33514 var v = x * this[i++] + w[j] + c
33515 c = Math.floor(v / 0x4000000)
33516 w[j++] = v & 0x3ffffff
33517 }
33518 return c
33519 }
33520 // am2 avoids a big mult-and-extract completely.
33521 // Max digit bits should be <= 30 because we do bitwise ops
33522 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
33523 function am2(i, x, w, j, c, n) {
33524 var xl = x & 0x7fff,
33525 xh = x >> 15
33526 while (--n >= 0) {
33527 var l = this[i] & 0x7fff
33528 var h = this[i++] >> 15
33529 var m = xh * l + h * xl
33530 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
33531 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
33532 w[j++] = l & 0x3fffffff
33533 }
33534 return c
33535 }
33536 // Alternately, set max digit bits to 28 since some
33537 // browsers slow down when dealing with 32-bit numbers.
33538 function am3(i, x, w, j, c, n) {
33539 var xl = x & 0x3fff,
33540 xh = x >> 14
33541 while (--n >= 0) {
33542 var l = this[i] & 0x3fff
33543 var h = this[i++] >> 14
33544 var m = xh * l + h * xl
33545 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
33546 c = (l >> 28) + (m >> 14) + xh * h
33547 w[j++] = l & 0xfffffff
33548 }
33549 return c
33550 }
33551
33552 // wtf?
33553 BigInteger.prototype.am = am1
33554 dbits = 26
33555
33556 BigInteger.prototype.DB = dbits
33557 BigInteger.prototype.DM = ((1 << dbits) - 1)
33558 var DV = BigInteger.prototype.DV = (1 << dbits)
33559
33560 var BI_FP = 52
33561 BigInteger.prototype.FV = Math.pow(2, BI_FP)
33562 BigInteger.prototype.F1 = BI_FP - dbits
33563 BigInteger.prototype.F2 = 2 * dbits - BI_FP
33564
33565 // Digit conversions
33566 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
33567 var BI_RC = new Array()
33568 var rr, vv
33569 rr = "0".charCodeAt(0)
33570 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
33571 rr = "a".charCodeAt(0)
33572 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33573 rr = "A".charCodeAt(0)
33574 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33575
33576 function int2char(n) {
33577 return BI_RM.charAt(n)
33578 }
33579
33580 function intAt(s, i) {
33581 var c = BI_RC[s.charCodeAt(i)]
33582 return (c == null) ? -1 : c
33583 }
33584
33585 // (protected) copy this to r
33586 function bnpCopyTo(r) {
33587 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
33588 r.t = this.t
33589 r.s = this.s
33590 }
33591
33592 // (protected) set from integer value x, -DV <= x < DV
33593 function bnpFromInt(x) {
33594 this.t = 1
33595 this.s = (x < 0) ? -1 : 0
33596 if (x > 0) this[0] = x
33597 else if (x < -1) this[0] = x + DV
33598 else this.t = 0
33599 }
33600
33601 // return bigint initialized to value
33602 function nbv(i) {
33603 var r = new BigInteger()
33604 r.fromInt(i)
33605 return r
33606 }
33607
33608 // (protected) set from string and radix
33609 function bnpFromString(s, b) {
33610 var self = this
33611
33612 var k
33613 if (b == 16) k = 4
33614 else if (b == 8) k = 3
33615 else if (b == 256) k = 8; // byte array
33616 else if (b == 2) k = 1
33617 else if (b == 32) k = 5
33618 else if (b == 4) k = 2
33619 else {
33620 self.fromRadix(s, b)
33621 return
33622 }
33623 self.t = 0
33624 self.s = 0
33625 var i = s.length,
33626 mi = false,
33627 sh = 0
33628 while (--i >= 0) {
33629 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
33630 if (x < 0) {
33631 if (s.charAt(i) == "-") mi = true
33632 continue
33633 }
33634 mi = false
33635 if (sh == 0)
33636 self[self.t++] = x
33637 else if (sh + k > self.DB) {
33638 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
33639 self[self.t++] = (x >> (self.DB - sh))
33640 } else
33641 self[self.t - 1] |= x << sh
33642 sh += k
33643 if (sh >= self.DB) sh -= self.DB
33644 }
33645 if (k == 8 && (s[0] & 0x80) != 0) {
33646 self.s = -1
33647 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
33648 }
33649 self.clamp()
33650 if (mi) BigInteger.ZERO.subTo(self, self)
33651 }
33652
33653 // (protected) clamp off excess high words
33654 function bnpClamp() {
33655 var c = this.s & this.DM
33656 while (this.t > 0 && this[this.t - 1] == c)--this.t
33657 }
33658
33659 // (public) return string representation in given radix
33660 function bnToString(b) {
33661 var self = this
33662 if (self.s < 0) return "-" + self.negate()
33663 .toString(b)
33664 var k
33665 if (b == 16) k = 4
33666 else if (b == 8) k = 3
33667 else if (b == 2) k = 1
33668 else if (b == 32) k = 5
33669 else if (b == 4) k = 2
33670 else return self.toRadix(b)
33671 var km = (1 << k) - 1,
33672 d, m = false,
33673 r = "",
33674 i = self.t
33675 var p = self.DB - (i * self.DB) % k
33676 if (i-- > 0) {
33677 if (p < self.DB && (d = self[i] >> p) > 0) {
33678 m = true
33679 r = int2char(d)
33680 }
33681 while (i >= 0) {
33682 if (p < k) {
33683 d = (self[i] & ((1 << p) - 1)) << (k - p)
33684 d |= self[--i] >> (p += self.DB - k)
33685 } else {
33686 d = (self[i] >> (p -= k)) & km
33687 if (p <= 0) {
33688 p += self.DB
33689 --i
33690 }
33691 }
33692 if (d > 0) m = true
33693 if (m) r += int2char(d)
33694 }
33695 }
33696 return m ? r : "0"
33697 }
33698
33699 // (public) -this
33700 function bnNegate() {
33701 var r = new BigInteger()
33702 BigInteger.ZERO.subTo(this, r)
33703 return r
33704 }
33705
33706 // (public) |this|
33707 function bnAbs() {
33708 return (this.s < 0) ? this.negate() : this
33709 }
33710
33711 // (public) return + if this > a, - if this < a, 0 if equal
33712 function bnCompareTo(a) {
33713 var r = this.s - a.s
33714 if (r != 0) return r
33715 var i = this.t
33716 r = i - a.t
33717 if (r != 0) return (this.s < 0) ? -r : r
33718 while (--i >= 0)
33719 if ((r = this[i] - a[i]) != 0) return r
33720 return 0
33721 }
33722
33723 // returns bit length of the integer x
33724 function nbits(x) {
33725 var r = 1,
33726 t
33727 if ((t = x >>> 16) != 0) {
33728 x = t
33729 r += 16
33730 }
33731 if ((t = x >> 8) != 0) {
33732 x = t
33733 r += 8
33734 }
33735 if ((t = x >> 4) != 0) {
33736 x = t
33737 r += 4
33738 }
33739 if ((t = x >> 2) != 0) {
33740 x = t
33741 r += 2
33742 }
33743 if ((t = x >> 1) != 0) {
33744 x = t
33745 r += 1
33746 }
33747 return r
33748 }
33749
33750 // (public) return the number of bits in "this"
33751 function bnBitLength() {
33752 if (this.t <= 0) return 0
33753 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
33754 }
33755
33756 // (public) return the number of bytes in "this"
33757 function bnByteLength() {
33758 return this.bitLength() >> 3
33759 }
33760
33761 // (protected) r = this << n*DB
33762 function bnpDLShiftTo(n, r) {
33763 var i
33764 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
33765 for (i = n - 1; i >= 0; --i) r[i] = 0
33766 r.t = this.t + n
33767 r.s = this.s
33768 }
33769
33770 // (protected) r = this >> n*DB
33771 function bnpDRShiftTo(n, r) {
33772 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
33773 r.t = Math.max(this.t - n, 0)
33774 r.s = this.s
33775 }
33776
33777 // (protected) r = this << n
33778 function bnpLShiftTo(n, r) {
33779 var self = this
33780 var bs = n % self.DB
33781 var cbs = self.DB - bs
33782 var bm = (1 << cbs) - 1
33783 var ds = Math.floor(n / self.DB),
33784 c = (self.s << bs) & self.DM,
33785 i
33786 for (i = self.t - 1; i >= 0; --i) {
33787 r[i + ds + 1] = (self[i] >> cbs) | c
33788 c = (self[i] & bm) << bs
33789 }
33790 for (i = ds - 1; i >= 0; --i) r[i] = 0
33791 r[ds] = c
33792 r.t = self.t + ds + 1
33793 r.s = self.s
33794 r.clamp()
33795 }
33796
33797 // (protected) r = this >> n
33798 function bnpRShiftTo(n, r) {
33799 var self = this
33800 r.s = self.s
33801 var ds = Math.floor(n / self.DB)
33802 if (ds >= self.t) {
33803 r.t = 0
33804 return
33805 }
33806 var bs = n % self.DB
33807 var cbs = self.DB - bs
33808 var bm = (1 << bs) - 1
33809 r[0] = self[ds] >> bs
33810 for (var i = ds + 1; i < self.t; ++i) {
33811 r[i - ds - 1] |= (self[i] & bm) << cbs
33812 r[i - ds] = self[i] >> bs
33813 }
33814 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
33815 r.t = self.t - ds
33816 r.clamp()
33817 }
33818
33819 // (protected) r = this - a
33820 function bnpSubTo(a, r) {
33821 var self = this
33822 var i = 0,
33823 c = 0,
33824 m = Math.min(a.t, self.t)
33825 while (i < m) {
33826 c += self[i] - a[i]
33827 r[i++] = c & self.DM
33828 c >>= self.DB
33829 }
33830 if (a.t < self.t) {
33831 c -= a.s
33832 while (i < self.t) {
33833 c += self[i]
33834 r[i++] = c & self.DM
33835 c >>= self.DB
33836 }
33837 c += self.s
33838 } else {
33839 c += self.s
33840 while (i < a.t) {
33841 c -= a[i]
33842 r[i++] = c & self.DM
33843 c >>= self.DB
33844 }
33845 c -= a.s
33846 }
33847 r.s = (c < 0) ? -1 : 0
33848 if (c < -1) r[i++] = self.DV + c
33849 else if (c > 0) r[i++] = c
33850 r.t = i
33851 r.clamp()
33852 }
33853
33854 // (protected) r = this * a, r != this,a (HAC 14.12)
33855 // "this" should be the larger one if appropriate.
33856 function bnpMultiplyTo(a, r) {
33857 var x = this.abs(),
33858 y = a.abs()
33859 var i = x.t
33860 r.t = i + y.t
33861 while (--i >= 0) r[i] = 0
33862 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
33863 r.s = 0
33864 r.clamp()
33865 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
33866 }
33867
33868 // (protected) r = this^2, r != this (HAC 14.16)
33869 function bnpSquareTo(r) {
33870 var x = this.abs()
33871 var i = r.t = 2 * x.t
33872 while (--i >= 0) r[i] = 0
33873 for (i = 0; i < x.t - 1; ++i) {
33874 var c = x.am(i, x[i], r, 2 * i, 0, 1)
33875 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
33876 r[i + x.t] -= x.DV
33877 r[i + x.t + 1] = 1
33878 }
33879 }
33880 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
33881 r.s = 0
33882 r.clamp()
33883 }
33884
33885 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
33886 // r != q, this != m. q or r may be null.
33887 function bnpDivRemTo(m, q, r) {
33888 var self = this
33889 var pm = m.abs()
33890 if (pm.t <= 0) return
33891 var pt = self.abs()
33892 if (pt.t < pm.t) {
33893 if (q != null) q.fromInt(0)
33894 if (r != null) self.copyTo(r)
33895 return
33896 }
33897 if (r == null) r = new BigInteger()
33898 var y = new BigInteger(),
33899 ts = self.s,
33900 ms = m.s
33901 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
33902 if (nsh > 0) {
33903 pm.lShiftTo(nsh, y)
33904 pt.lShiftTo(nsh, r)
33905 } else {
33906 pm.copyTo(y)
33907 pt.copyTo(r)
33908 }
33909 var ys = y.t
33910 var y0 = y[ys - 1]
33911 if (y0 == 0) return
33912 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
33913 var d1 = self.FV / yt,
33914 d2 = (1 << self.F1) / yt,
33915 e = 1 << self.F2
33916 var i = r.t,
33917 j = i - ys,
33918 t = (q == null) ? new BigInteger() : q
33919 y.dlShiftTo(j, t)
33920 if (r.compareTo(t) >= 0) {
33921 r[r.t++] = 1
33922 r.subTo(t, r)
33923 }
33924 BigInteger.ONE.dlShiftTo(ys, t)
33925 t.subTo(y, y); // "negative" y so we can replace sub with am later
33926 while (y.t < ys) y[y.t++] = 0
33927 while (--j >= 0) {
33928 // Estimate quotient digit
33929 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
33930 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
33931 y.dlShiftTo(j, t)
33932 r.subTo(t, r)
33933 while (r[i] < --qd) r.subTo(t, r)
33934 }
33935 }
33936 if (q != null) {
33937 r.drShiftTo(ys, q)
33938 if (ts != ms) BigInteger.ZERO.subTo(q, q)
33939 }
33940 r.t = ys
33941 r.clamp()
33942 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
33943 if (ts < 0) BigInteger.ZERO.subTo(r, r)
33944 }
33945
33946 // (public) this mod a
33947 function bnMod(a) {
33948 var r = new BigInteger()
33949 this.abs()
33950 .divRemTo(a, null, r)
33951 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
33952 return r
33953 }
33954
33955 // Modular reduction using "classic" algorithm
33956 function Classic(m) {
33957 this.m = m
33958 }
33959
33960 function cConvert(x) {
33961 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
33962 else return x
33963 }
33964
33965 function cRevert(x) {
33966 return x
33967 }
33968
33969 function cReduce(x) {
33970 x.divRemTo(this.m, null, x)
33971 }
33972
33973 function cMulTo(x, y, r) {
33974 x.multiplyTo(y, r)
33975 this.reduce(r)
33976 }
33977
33978 function cSqrTo(x, r) {
33979 x.squareTo(r)
33980 this.reduce(r)
33981 }
33982
33983 Classic.prototype.convert = cConvert
33984 Classic.prototype.revert = cRevert
33985 Classic.prototype.reduce = cReduce
33986 Classic.prototype.mulTo = cMulTo
33987 Classic.prototype.sqrTo = cSqrTo
33988
33989 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
33990 // justification:
33991 // xy == 1 (mod m)
33992 // xy = 1+km
33993 // xy(2-xy) = (1+km)(1-km)
33994 // x[y(2-xy)] = 1-k^2m^2
33995 // x[y(2-xy)] == 1 (mod m^2)
33996 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
33997 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
33998 // JS multiply "overflows" differently from C/C++, so care is needed here.
33999 function bnpInvDigit() {
34000 if (this.t < 1) return 0
34001 var x = this[0]
34002 if ((x & 1) == 0) return 0
34003 var y = x & 3; // y == 1/x mod 2^2
34004 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
34005 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
34006 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
34007 // last step - calculate inverse mod DV directly
34008 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
34009 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
34010 // we really want the negative inverse, and -DV < y < DV
34011 return (y > 0) ? this.DV - y : -y
34012 }
34013
34014 // Montgomery reduction
34015 function Montgomery(m) {
34016 this.m = m
34017 this.mp = m.invDigit()
34018 this.mpl = this.mp & 0x7fff
34019 this.mph = this.mp >> 15
34020 this.um = (1 << (m.DB - 15)) - 1
34021 this.mt2 = 2 * m.t
34022 }
34023
34024 // xR mod m
34025 function montConvert(x) {
34026 var r = new BigInteger()
34027 x.abs()
34028 .dlShiftTo(this.m.t, r)
34029 r.divRemTo(this.m, null, r)
34030 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
34031 return r
34032 }
34033
34034 // x/R mod m
34035 function montRevert(x) {
34036 var r = new BigInteger()
34037 x.copyTo(r)
34038 this.reduce(r)
34039 return r
34040 }
34041
34042 // x = x/R mod m (HAC 14.32)
34043 function montReduce(x) {
34044 while (x.t <= this.mt2) // pad x so am has enough room later
34045 x[x.t++] = 0
34046 for (var i = 0; i < this.m.t; ++i) {
34047 // faster way of calculating u0 = x[i]*mp mod DV
34048 var j = x[i] & 0x7fff
34049 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
34050 // use am to combine the multiply-shift-add into one call
34051 j = i + this.m.t
34052 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
34053 // propagate carry
34054 while (x[j] >= x.DV) {
34055 x[j] -= x.DV
34056 x[++j]++
34057 }
34058 }
34059 x.clamp()
34060 x.drShiftTo(this.m.t, x)
34061 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
34062 }
34063
34064 // r = "x^2/R mod m"; x != r
34065 function montSqrTo(x, r) {
34066 x.squareTo(r)
34067 this.reduce(r)
34068 }
34069
34070 // r = "xy/R mod m"; x,y != r
34071 function montMulTo(x, y, r) {
34072 x.multiplyTo(y, r)
34073 this.reduce(r)
34074 }
34075
34076 Montgomery.prototype.convert = montConvert
34077 Montgomery.prototype.revert = montRevert
34078 Montgomery.prototype.reduce = montReduce
34079 Montgomery.prototype.mulTo = montMulTo
34080 Montgomery.prototype.sqrTo = montSqrTo
34081
34082 // (protected) true iff this is even
34083 function bnpIsEven() {
34084 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
34085 }
34086
34087 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
34088 function bnpExp(e, z) {
34089 if (e > 0xffffffff || e < 1) return BigInteger.ONE
34090 var r = new BigInteger(),
34091 r2 = new BigInteger(),
34092 g = z.convert(this),
34093 i = nbits(e) - 1
34094 g.copyTo(r)
34095 while (--i >= 0) {
34096 z.sqrTo(r, r2)
34097 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
34098 else {
34099 var t = r
34100 r = r2
34101 r2 = t
34102 }
34103 }
34104 return z.revert(r)
34105 }
34106
34107 // (public) this^e % m, 0 <= e < 2^32
34108 function bnModPowInt(e, m) {
34109 var z
34110 if (e < 256 || m.isEven()) z = new Classic(m)
34111 else z = new Montgomery(m)
34112 return this.exp(e, z)
34113 }
34114
34115 // protected
34116 proto.copyTo = bnpCopyTo
34117 proto.fromInt = bnpFromInt
34118 proto.fromString = bnpFromString
34119 proto.clamp = bnpClamp
34120 proto.dlShiftTo = bnpDLShiftTo
34121 proto.drShiftTo = bnpDRShiftTo
34122 proto.lShiftTo = bnpLShiftTo
34123 proto.rShiftTo = bnpRShiftTo
34124 proto.subTo = bnpSubTo
34125 proto.multiplyTo = bnpMultiplyTo
34126 proto.squareTo = bnpSquareTo
34127 proto.divRemTo = bnpDivRemTo
34128 proto.invDigit = bnpInvDigit
34129 proto.isEven = bnpIsEven
34130 proto.exp = bnpExp
34131
34132 // public
34133 proto.toString = bnToString
34134 proto.negate = bnNegate
34135 proto.abs = bnAbs
34136 proto.compareTo = bnCompareTo
34137 proto.bitLength = bnBitLength
34138 proto.byteLength = bnByteLength
34139 proto.mod = bnMod
34140 proto.modPowInt = bnModPowInt
34141
34142 // (public)
34143 function bnClone() {
34144 var r = new BigInteger()
34145 this.copyTo(r)
34146 return r
34147 }
34148
34149 // (public) return value as integer
34150 function bnIntValue() {
34151 if (this.s < 0) {
34152 if (this.t == 1) return this[0] - this.DV
34153 else if (this.t == 0) return -1
34154 } else if (this.t == 1) return this[0]
34155 else if (this.t == 0) return 0
34156 // assumes 16 < DB < 32
34157 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
34158 }
34159
34160 // (public) return value as byte
34161 function bnByteValue() {
34162 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
34163 }
34164
34165 // (public) return value as short (assumes DB>=16)
34166 function bnShortValue() {
34167 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
34168 }
34169
34170 // (protected) return x s.t. r^x < DV
34171 function bnpChunkSize(r) {
34172 return Math.floor(Math.LN2 * this.DB / Math.log(r))
34173 }
34174
34175 // (public) 0 if this == 0, 1 if this > 0
34176 function bnSigNum() {
34177 if (this.s < 0) return -1
34178 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
34179 else return 1
34180 }
34181
34182 // (protected) convert to radix string
34183 function bnpToRadix(b) {
34184 if (b == null) b = 10
34185 if (this.signum() == 0 || b < 2 || b > 36) return "0"
34186 var cs = this.chunkSize(b)
34187 var a = Math.pow(b, cs)
34188 var d = nbv(a),
34189 y = new BigInteger(),
34190 z = new BigInteger(),
34191 r = ""
34192 this.divRemTo(d, y, z)
34193 while (y.signum() > 0) {
34194 r = (a + z.intValue())
34195 .toString(b)
34196 .substr(1) + r
34197 y.divRemTo(d, y, z)
34198 }
34199 return z.intValue()
34200 .toString(b) + r
34201 }
34202
34203 // (protected) convert from radix string
34204 function bnpFromRadix(s, b) {
34205 var self = this
34206 self.fromInt(0)
34207 if (b == null) b = 10
34208 var cs = self.chunkSize(b)
34209 var d = Math.pow(b, cs),
34210 mi = false,
34211 j = 0,
34212 w = 0
34213 for (var i = 0; i < s.length; ++i) {
34214 var x = intAt(s, i)
34215 if (x < 0) {
34216 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
34217 continue
34218 }
34219 w = b * w + x
34220 if (++j >= cs) {
34221 self.dMultiply(d)
34222 self.dAddOffset(w, 0)
34223 j = 0
34224 w = 0
34225 }
34226 }
34227 if (j > 0) {
34228 self.dMultiply(Math.pow(b, j))
34229 self.dAddOffset(w, 0)
34230 }
34231 if (mi) BigInteger.ZERO.subTo(self, self)
34232 }
34233
34234 // (protected) alternate constructor
34235 function bnpFromNumber(a, b, c) {
34236 var self = this
34237 if ("number" == typeof b) {
34238 // new BigInteger(int,int,RNG)
34239 if (a < 2) self.fromInt(1)
34240 else {
34241 self.fromNumber(a, c)
34242 if (!self.testBit(a - 1)) // force MSB set
34243 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
34244 if (self.isEven()) self.dAddOffset(1, 0); // force odd
34245 while (!self.isProbablePrime(b)) {
34246 self.dAddOffset(2, 0)
34247 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
34248 }
34249 }
34250 } else {
34251 // new BigInteger(int,RNG)
34252 var x = new Array(),
34253 t = a & 7
34254 x.length = (a >> 3) + 1
34255 b.nextBytes(x)
34256 if (t > 0) x[0] &= ((1 << t) - 1)
34257 else x[0] = 0
34258 self.fromString(x, 256)
34259 }
34260 }
34261
34262 // (public) convert to bigendian byte array
34263 function bnToByteArray() {
34264 var self = this
34265 var i = self.t,
34266 r = new Array()
34267 r[0] = self.s
34268 var p = self.DB - (i * self.DB) % 8,
34269 d, k = 0
34270 if (i-- > 0) {
34271 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
34272 r[k++] = d | (self.s << (self.DB - p))
34273 while (i >= 0) {
34274 if (p < 8) {
34275 d = (self[i] & ((1 << p) - 1)) << (8 - p)
34276 d |= self[--i] >> (p += self.DB - 8)
34277 } else {
34278 d = (self[i] >> (p -= 8)) & 0xff
34279 if (p <= 0) {
34280 p += self.DB
34281 --i
34282 }
34283 }
34284 if ((d & 0x80) != 0) d |= -256
34285 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
34286 if (k > 0 || d != self.s) r[k++] = d
34287 }
34288 }
34289 return r
34290 }
34291
34292 function bnEquals(a) {
34293 return (this.compareTo(a) == 0)
34294 }
34295
34296 function bnMin(a) {
34297 return (this.compareTo(a) < 0) ? this : a
34298 }
34299
34300 function bnMax(a) {
34301 return (this.compareTo(a) > 0) ? this : a
34302 }
34303
34304 // (protected) r = this op a (bitwise)
34305 function bnpBitwiseTo(a, op, r) {
34306 var self = this
34307 var i, f, m = Math.min(a.t, self.t)
34308 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
34309 if (a.t < self.t) {
34310 f = a.s & self.DM
34311 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
34312 r.t = self.t
34313 } else {
34314 f = self.s & self.DM
34315 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
34316 r.t = a.t
34317 }
34318 r.s = op(self.s, a.s)
34319 r.clamp()
34320 }
34321
34322 // (public) this & a
34323 function op_and(x, y) {
34324 return x & y
34325 }
34326
34327 function bnAnd(a) {
34328 var r = new BigInteger()
34329 this.bitwiseTo(a, op_and, r)
34330 return r
34331 }
34332
34333 // (public) this | a
34334 function op_or(x, y) {
34335 return x | y
34336 }
34337
34338 function bnOr(a) {
34339 var r = new BigInteger()
34340 this.bitwiseTo(a, op_or, r)
34341 return r
34342 }
34343
34344 // (public) this ^ a
34345 function op_xor(x, y) {
34346 return x ^ y
34347 }
34348
34349 function bnXor(a) {
34350 var r = new BigInteger()
34351 this.bitwiseTo(a, op_xor, r)
34352 return r
34353 }
34354
34355 // (public) this & ~a
34356 function op_andnot(x, y) {
34357 return x & ~y
34358 }
34359
34360 function bnAndNot(a) {
34361 var r = new BigInteger()
34362 this.bitwiseTo(a, op_andnot, r)
34363 return r
34364 }
34365
34366 // (public) ~this
34367 function bnNot() {
34368 var r = new BigInteger()
34369 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
34370 r.t = this.t
34371 r.s = ~this.s
34372 return r
34373 }
34374
34375 // (public) this << n
34376 function bnShiftLeft(n) {
34377 var r = new BigInteger()
34378 if (n < 0) this.rShiftTo(-n, r)
34379 else this.lShiftTo(n, r)
34380 return r
34381 }
34382
34383 // (public) this >> n
34384 function bnShiftRight(n) {
34385 var r = new BigInteger()
34386 if (n < 0) this.lShiftTo(-n, r)
34387 else this.rShiftTo(n, r)
34388 return r
34389 }
34390
34391 // return index of lowest 1-bit in x, x < 2^31
34392 function lbit(x) {
34393 if (x == 0) return -1
34394 var r = 0
34395 if ((x & 0xffff) == 0) {
34396 x >>= 16
34397 r += 16
34398 }
34399 if ((x & 0xff) == 0) {
34400 x >>= 8
34401 r += 8
34402 }
34403 if ((x & 0xf) == 0) {
34404 x >>= 4
34405 r += 4
34406 }
34407 if ((x & 3) == 0) {
34408 x >>= 2
34409 r += 2
34410 }
34411 if ((x & 1) == 0)++r
34412 return r
34413 }
34414
34415 // (public) returns index of lowest 1-bit (or -1 if none)
34416 function bnGetLowestSetBit() {
34417 for (var i = 0; i < this.t; ++i)
34418 if (this[i] != 0) return i * this.DB + lbit(this[i])
34419 if (this.s < 0) return this.t * this.DB
34420 return -1
34421 }
34422
34423 // return number of 1 bits in x
34424 function cbit(x) {
34425 var r = 0
34426 while (x != 0) {
34427 x &= x - 1
34428 ++r
34429 }
34430 return r
34431 }
34432
34433 // (public) return number of set bits
34434 function bnBitCount() {
34435 var r = 0,
34436 x = this.s & this.DM
34437 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
34438 return r
34439 }
34440
34441 // (public) true iff nth bit is set
34442 function bnTestBit(n) {
34443 var j = Math.floor(n / this.DB)
34444 if (j >= this.t) return (this.s != 0)
34445 return ((this[j] & (1 << (n % this.DB))) != 0)
34446 }
34447
34448 // (protected) this op (1<<n)
34449 function bnpChangeBit(n, op) {
34450 var r = BigInteger.ONE.shiftLeft(n)
34451 this.bitwiseTo(r, op, r)
34452 return r
34453 }
34454
34455 // (public) this | (1<<n)
34456 function bnSetBit(n) {
34457 return this.changeBit(n, op_or)
34458 }
34459
34460 // (public) this & ~(1<<n)
34461 function bnClearBit(n) {
34462 return this.changeBit(n, op_andnot)
34463 }
34464
34465 // (public) this ^ (1<<n)
34466 function bnFlipBit(n) {
34467 return this.changeBit(n, op_xor)
34468 }
34469
34470 // (protected) r = this + a
34471 function bnpAddTo(a, r) {
34472 var self = this
34473
34474 var i = 0,
34475 c = 0,
34476 m = Math.min(a.t, self.t)
34477 while (i < m) {
34478 c += self[i] + a[i]
34479 r[i++] = c & self.DM
34480 c >>= self.DB
34481 }
34482 if (a.t < self.t) {
34483 c += a.s
34484 while (i < self.t) {
34485 c += self[i]
34486 r[i++] = c & self.DM
34487 c >>= self.DB
34488 }
34489 c += self.s
34490 } else {
34491 c += self.s
34492 while (i < a.t) {
34493 c += a[i]
34494 r[i++] = c & self.DM
34495 c >>= self.DB
34496 }
34497 c += a.s
34498 }
34499 r.s = (c < 0) ? -1 : 0
34500 if (c > 0) r[i++] = c
34501 else if (c < -1) r[i++] = self.DV + c
34502 r.t = i
34503 r.clamp()
34504 }
34505
34506 // (public) this + a
34507 function bnAdd(a) {
34508 var r = new BigInteger()
34509 this.addTo(a, r)
34510 return r
34511 }
34512
34513 // (public) this - a
34514 function bnSubtract(a) {
34515 var r = new BigInteger()
34516 this.subTo(a, r)
34517 return r
34518 }
34519
34520 // (public) this * a
34521 function bnMultiply(a) {
34522 var r = new BigInteger()
34523 this.multiplyTo(a, r)
34524 return r
34525 }
34526
34527 // (public) this^2
34528 function bnSquare() {
34529 var r = new BigInteger()
34530 this.squareTo(r)
34531 return r
34532 }
34533
34534 // (public) this / a
34535 function bnDivide(a) {
34536 var r = new BigInteger()
34537 this.divRemTo(a, r, null)
34538 return r
34539 }
34540
34541 // (public) this % a
34542 function bnRemainder(a) {
34543 var r = new BigInteger()
34544 this.divRemTo(a, null, r)
34545 return r
34546 }
34547
34548 // (public) [this/a,this%a]
34549 function bnDivideAndRemainder(a) {
34550 var q = new BigInteger(),
34551 r = new BigInteger()
34552 this.divRemTo(a, q, r)
34553 return new Array(q, r)
34554 }
34555
34556 // (protected) this *= n, this >= 0, 1 < n < DV
34557 function bnpDMultiply(n) {
34558 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
34559 ++this.t
34560 this.clamp()
34561 }
34562
34563 // (protected) this += n << w words, this >= 0
34564 function bnpDAddOffset(n, w) {
34565 if (n == 0) return
34566 while (this.t <= w) this[this.t++] = 0
34567 this[w] += n
34568 while (this[w] >= this.DV) {
34569 this[w] -= this.DV
34570 if (++w >= this.t) this[this.t++] = 0
34571 ++this[w]
34572 }
34573 }
34574
34575 // A "null" reducer
34576 function NullExp() {}
34577
34578 function nNop(x) {
34579 return x
34580 }
34581
34582 function nMulTo(x, y, r) {
34583 x.multiplyTo(y, r)
34584 }
34585
34586 function nSqrTo(x, r) {
34587 x.squareTo(r)
34588 }
34589
34590 NullExp.prototype.convert = nNop
34591 NullExp.prototype.revert = nNop
34592 NullExp.prototype.mulTo = nMulTo
34593 NullExp.prototype.sqrTo = nSqrTo
34594
34595 // (public) this^e
34596 function bnPow(e) {
34597 return this.exp(e, new NullExp())
34598 }
34599
34600 // (protected) r = lower n words of "this * a", a.t <= n
34601 // "this" should be the larger one if appropriate.
34602 function bnpMultiplyLowerTo(a, n, r) {
34603 var i = Math.min(this.t + a.t, n)
34604 r.s = 0; // assumes a,this >= 0
34605 r.t = i
34606 while (i > 0) r[--i] = 0
34607 var j
34608 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
34609 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
34610 r.clamp()
34611 }
34612
34613 // (protected) r = "this * a" without lower n words, n > 0
34614 // "this" should be the larger one if appropriate.
34615 function bnpMultiplyUpperTo(a, n, r) {
34616 --n
34617 var i = r.t = this.t + a.t - n
34618 r.s = 0; // assumes a,this >= 0
34619 while (--i >= 0) r[i] = 0
34620 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
34621 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
34622 r.clamp()
34623 r.drShiftTo(1, r)
34624 }
34625
34626 // Barrett modular reduction
34627 function Barrett(m) {
34628 // setup Barrett
34629 this.r2 = new BigInteger()
34630 this.q3 = new BigInteger()
34631 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
34632 this.mu = this.r2.divide(m)
34633 this.m = m
34634 }
34635
34636 function barrettConvert(x) {
34637 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
34638 else if (x.compareTo(this.m) < 0) return x
34639 else {
34640 var r = new BigInteger()
34641 x.copyTo(r)
34642 this.reduce(r)
34643 return r
34644 }
34645 }
34646
34647 function barrettRevert(x) {
34648 return x
34649 }
34650
34651 // x = x mod m (HAC 14.42)
34652 function barrettReduce(x) {
34653 var self = this
34654 x.drShiftTo(self.m.t - 1, self.r2)
34655 if (x.t > self.m.t + 1) {
34656 x.t = self.m.t + 1
34657 x.clamp()
34658 }
34659 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
34660 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
34661 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
34662 x.subTo(self.r2, x)
34663 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
34664 }
34665
34666 // r = x^2 mod m; x != r
34667 function barrettSqrTo(x, r) {
34668 x.squareTo(r)
34669 this.reduce(r)
34670 }
34671
34672 // r = x*y mod m; x,y != r
34673 function barrettMulTo(x, y, r) {
34674 x.multiplyTo(y, r)
34675 this.reduce(r)
34676 }
34677
34678 Barrett.prototype.convert = barrettConvert
34679 Barrett.prototype.revert = barrettRevert
34680 Barrett.prototype.reduce = barrettReduce
34681 Barrett.prototype.mulTo = barrettMulTo
34682 Barrett.prototype.sqrTo = barrettSqrTo
34683
34684 // (public) this^e % m (HAC 14.85)
34685 function bnModPow(e, m) {
34686 var i = e.bitLength(),
34687 k, r = nbv(1),
34688 z
34689 if (i <= 0) return r
34690 else if (i < 18) k = 1
34691 else if (i < 48) k = 3
34692 else if (i < 144) k = 4
34693 else if (i < 768) k = 5
34694 else k = 6
34695 if (i < 8)
34696 z = new Classic(m)
34697 else if (m.isEven())
34698 z = new Barrett(m)
34699 else
34700 z = new Montgomery(m)
34701
34702 // precomputation
34703 var g = new Array(),
34704 n = 3,
34705 k1 = k - 1,
34706 km = (1 << k) - 1
34707 g[1] = z.convert(this)
34708 if (k > 1) {
34709 var g2 = new BigInteger()
34710 z.sqrTo(g[1], g2)
34711 while (n <= km) {
34712 g[n] = new BigInteger()
34713 z.mulTo(g2, g[n - 2], g[n])
34714 n += 2
34715 }
34716 }
34717
34718 var j = e.t - 1,
34719 w, is1 = true,
34720 r2 = new BigInteger(),
34721 t
34722 i = nbits(e[j]) - 1
34723 while (j >= 0) {
34724 if (i >= k1) w = (e[j] >> (i - k1)) & km
34725 else {
34726 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
34727 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
34728 }
34729
34730 n = k
34731 while ((w & 1) == 0) {
34732 w >>= 1
34733 --n
34734 }
34735 if ((i -= n) < 0) {
34736 i += this.DB
34737 --j
34738 }
34739 if (is1) { // ret == 1, don't bother squaring or multiplying it
34740 g[w].copyTo(r)
34741 is1 = false
34742 } else {
34743 while (n > 1) {
34744 z.sqrTo(r, r2)
34745 z.sqrTo(r2, r)
34746 n -= 2
34747 }
34748 if (n > 0) z.sqrTo(r, r2)
34749 else {
34750 t = r
34751 r = r2
34752 r2 = t
34753 }
34754 z.mulTo(r2, g[w], r)
34755 }
34756
34757 while (j >= 0 && (e[j] & (1 << i)) == 0) {
34758 z.sqrTo(r, r2)
34759 t = r
34760 r = r2
34761 r2 = t
34762 if (--i < 0) {
34763 i = this.DB - 1
34764 --j
34765 }
34766 }
34767 }
34768 return z.revert(r)
34769 }
34770
34771 // (public) gcd(this,a) (HAC 14.54)
34772 function bnGCD(a) {
34773 var x = (this.s < 0) ? this.negate() : this.clone()
34774 var y = (a.s < 0) ? a.negate() : a.clone()
34775 if (x.compareTo(y) < 0) {
34776 var t = x
34777 x = y
34778 y = t
34779 }
34780 var i = x.getLowestSetBit(),
34781 g = y.getLowestSetBit()
34782 if (g < 0) return x
34783 if (i < g) g = i
34784 if (g > 0) {
34785 x.rShiftTo(g, x)
34786 y.rShiftTo(g, y)
34787 }
34788 while (x.signum() > 0) {
34789 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
34790 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
34791 if (x.compareTo(y) >= 0) {
34792 x.subTo(y, x)
34793 x.rShiftTo(1, x)
34794 } else {
34795 y.subTo(x, y)
34796 y.rShiftTo(1, y)
34797 }
34798 }
34799 if (g > 0) y.lShiftTo(g, y)
34800 return y
34801 }
34802
34803 // (protected) this % n, n < 2^26
34804 function bnpModInt(n) {
34805 if (n <= 0) return 0
34806 var d = this.DV % n,
34807 r = (this.s < 0) ? n - 1 : 0
34808 if (this.t > 0)
34809 if (d == 0) r = this[0] % n
34810 else
34811 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
34812 return r
34813 }
34814
34815 // (public) 1/this % m (HAC 14.61)
34816 function bnModInverse(m) {
34817 var ac = m.isEven()
34818 if (this.signum() === 0) throw new Error('division by zero')
34819 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
34820 var u = m.clone(),
34821 v = this.clone()
34822 var a = nbv(1),
34823 b = nbv(0),
34824 c = nbv(0),
34825 d = nbv(1)
34826 while (u.signum() != 0) {
34827 while (u.isEven()) {
34828 u.rShiftTo(1, u)
34829 if (ac) {
34830 if (!a.isEven() || !b.isEven()) {
34831 a.addTo(this, a)
34832 b.subTo(m, b)
34833 }
34834 a.rShiftTo(1, a)
34835 } else if (!b.isEven()) b.subTo(m, b)
34836 b.rShiftTo(1, b)
34837 }
34838 while (v.isEven()) {
34839 v.rShiftTo(1, v)
34840 if (ac) {
34841 if (!c.isEven() || !d.isEven()) {
34842 c.addTo(this, c)
34843 d.subTo(m, d)
34844 }
34845 c.rShiftTo(1, c)
34846 } else if (!d.isEven()) d.subTo(m, d)
34847 d.rShiftTo(1, d)
34848 }
34849 if (u.compareTo(v) >= 0) {
34850 u.subTo(v, u)
34851 if (ac) a.subTo(c, a)
34852 b.subTo(d, b)
34853 } else {
34854 v.subTo(u, v)
34855 if (ac) c.subTo(a, c)
34856 d.subTo(b, d)
34857 }
34858 }
34859 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
34860 while (d.compareTo(m) >= 0) d.subTo(m, d)
34861 while (d.signum() < 0) d.addTo(m, d)
34862 return d
34863 }
34864
34865 var lowprimes = [
34866 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
34867 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
34868 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
34869 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
34870 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
34871 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
34872 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
34873 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
34874 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
34875 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
34876 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
34877 ]
34878
34879 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
34880
34881 // (public) test primality with certainty >= 1-.5^t
34882 function bnIsProbablePrime(t) {
34883 var i, x = this.abs()
34884 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
34885 for (i = 0; i < lowprimes.length; ++i)
34886 if (x[0] == lowprimes[i]) return true
34887 return false
34888 }
34889 if (x.isEven()) return false
34890 i = 1
34891 while (i < lowprimes.length) {
34892 var m = lowprimes[i],
34893 j = i + 1
34894 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
34895 m = x.modInt(m)
34896 while (i < j) if (m % lowprimes[i++] == 0) return false
34897 }
34898 return x.millerRabin(t)
34899 }
34900
34901 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
34902 function bnpMillerRabin(t) {
34903 var n1 = this.subtract(BigInteger.ONE)
34904 var k = n1.getLowestSetBit()
34905 if (k <= 0) return false
34906 var r = n1.shiftRight(k)
34907 t = (t + 1) >> 1
34908 if (t > lowprimes.length) t = lowprimes.length
34909 var a = new BigInteger(null)
34910 var j, bases = []
34911 for (var i = 0; i < t; ++i) {
34912 for (;;) {
34913 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
34914 if (bases.indexOf(j) == -1) break
34915 }
34916 bases.push(j)
34917 a.fromInt(j)
34918 var y = a.modPow(r, this)
34919 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
34920 var j = 1
34921 while (j++ < k && y.compareTo(n1) != 0) {
34922 y = y.modPowInt(2, this)
34923 if (y.compareTo(BigInteger.ONE) == 0) return false
34924 }
34925 if (y.compareTo(n1) != 0) return false
34926 }
34927 }
34928 return true
34929 }
34930
34931 // protected
34932 proto.chunkSize = bnpChunkSize
34933 proto.toRadix = bnpToRadix
34934 proto.fromRadix = bnpFromRadix
34935 proto.fromNumber = bnpFromNumber
34936 proto.bitwiseTo = bnpBitwiseTo
34937 proto.changeBit = bnpChangeBit
34938 proto.addTo = bnpAddTo
34939 proto.dMultiply = bnpDMultiply
34940 proto.dAddOffset = bnpDAddOffset
34941 proto.multiplyLowerTo = bnpMultiplyLowerTo
34942 proto.multiplyUpperTo = bnpMultiplyUpperTo
34943 proto.modInt = bnpModInt
34944 proto.millerRabin = bnpMillerRabin
34945
34946 // public
34947 proto.clone = bnClone
34948 proto.intValue = bnIntValue
34949 proto.byteValue = bnByteValue
34950 proto.shortValue = bnShortValue
34951 proto.signum = bnSigNum
34952 proto.toByteArray = bnToByteArray
34953 proto.equals = bnEquals
34954 proto.min = bnMin
34955 proto.max = bnMax
34956 proto.and = bnAnd
34957 proto.or = bnOr
34958 proto.xor = bnXor
34959 proto.andNot = bnAndNot
34960 proto.not = bnNot
34961 proto.shiftLeft = bnShiftLeft
34962 proto.shiftRight = bnShiftRight
34963 proto.getLowestSetBit = bnGetLowestSetBit
34964 proto.bitCount = bnBitCount
34965 proto.testBit = bnTestBit
34966 proto.setBit = bnSetBit
34967 proto.clearBit = bnClearBit
34968 proto.flipBit = bnFlipBit
34969 proto.add = bnAdd
34970 proto.subtract = bnSubtract
34971 proto.multiply = bnMultiply
34972 proto.divide = bnDivide
34973 proto.remainder = bnRemainder
34974 proto.divideAndRemainder = bnDivideAndRemainder
34975 proto.modPow = bnModPow
34976 proto.modInverse = bnModInverse
34977 proto.pow = bnPow
34978 proto.gcd = bnGCD
34979 proto.isProbablePrime = bnIsProbablePrime
34980
34981 // JSBN-specific extension
34982 proto.square = bnSquare
34983
34984 // constants
34985 BigInteger.ZERO = nbv(0)
34986 BigInteger.ONE = nbv(1)
34987 BigInteger.valueOf = nbv
34988
34989 module.exports = BigInteger
34990
34991 },{"../package.json":40}],38:[function(require,module,exports){
34992 (function (Buffer){
34993 // FIXME: Kind of a weird way to throw exceptions, consider removing
34994 var assert = require('assert')
34995 var BigInteger = require('./bigi')
34996
34997 /**
34998 * Turns a byte array into a big integer.
34999 *
35000 * This function will interpret a byte array as a big integer in big
35001 * endian notation.
35002 */
35003 BigInteger.fromByteArrayUnsigned = function(byteArray) {
35004 // BigInteger expects a DER integer conformant byte array
35005 if (byteArray[0] & 0x80) {
35006 return new BigInteger([0].concat(byteArray))
35007 }
35008
35009 return new BigInteger(byteArray)
35010 }
35011
35012 /**
35013 * Returns a byte array representation of the big integer.
35014 *
35015 * This returns the absolute of the contained value in big endian
35016 * form. A value of zero results in an empty array.
35017 */
35018 BigInteger.prototype.toByteArrayUnsigned = function() {
35019 var byteArray = this.toByteArray()
35020 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
35021 }
35022
35023 BigInteger.fromDERInteger = function(byteArray) {
35024 return new BigInteger(byteArray)
35025 }
35026
35027 /*
35028 * Converts BigInteger to a DER integer representation.
35029 *
35030 * The format for this value uses the most significant bit as a sign
35031 * bit. If the most significant bit is already set and the integer is
35032 * positive, a 0x00 is prepended.
35033 *
35034 * Examples:
35035 *
35036 * 0 => 0x00
35037 * 1 => 0x01
35038 * -1 => 0xff
35039 * 127 => 0x7f
35040 * -127 => 0x81
35041 * 128 => 0x0080
35042 * -128 => 0x80
35043 * 255 => 0x00ff
35044 * -255 => 0xff01
35045 * 16300 => 0x3fac
35046 * -16300 => 0xc054
35047 * 62300 => 0x00f35c
35048 * -62300 => 0xff0ca4
35049 */
35050 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
35051
35052 BigInteger.fromBuffer = function(buffer) {
35053 // BigInteger expects a DER integer conformant byte array
35054 if (buffer[0] & 0x80) {
35055 var byteArray = Array.prototype.slice.call(buffer)
35056
35057 return new BigInteger([0].concat(byteArray))
35058 }
35059
35060 return new BigInteger(buffer)
35061 }
35062
35063 BigInteger.fromHex = function(hex) {
35064 if (hex === '') return BigInteger.ZERO
35065
35066 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
35067 assert.equal(hex.length % 2, 0, 'Incomplete hex')
35068 return new BigInteger(hex, 16)
35069 }
35070
35071 BigInteger.prototype.toBuffer = function(size) {
35072 var byteArray = this.toByteArrayUnsigned()
35073 var zeros = []
35074
35075 var padding = size - byteArray.length
35076 while (zeros.length < padding) zeros.push(0)
35077
35078 return new Buffer(zeros.concat(byteArray))
35079 }
35080
35081 BigInteger.prototype.toHex = function(size) {
35082 return this.toBuffer(size).toString('hex')
35083 }
35084
35085 }).call(this,require("buffer").Buffer)
35086 },{"./bigi":37,"assert":1,"buffer":5}],39:[function(require,module,exports){
35087 var BigInteger = require('./bigi')
35088
35089 //addons
35090 require('./convert')
35091
35092 module.exports = BigInteger
35093 },{"./bigi":37,"./convert":38}],40:[function(require,module,exports){
35094 module.exports={
35095 "_args": [
35096 [
35097 "bigi@^1.4.0",
35098 "/home/ian/git/bitcoin/bitcoinjs-lib-browser/node_modules/bitcoinjs-lib"
35099 ]
35100 ],
35101 "_from": "bigi@>=1.4.0 <2.0.0",
35102 "_id": "bigi@1.4.2",
35103 "_inCache": true,
35104 "_installable": true,
35105 "_location": "/bigi",
35106 "_nodeVersion": "6.1.0",
35107 "_npmOperationalInternal": {
35108 "host": "packages-12-west.internal.npmjs.com",
35109 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
35110 },
35111 "_npmUser": {
35112 "email": "jprichardson@gmail.com",
35113 "name": "jprichardson"
35114 },
35115 "_npmVersion": "3.8.6",
35116 "_phantomChildren": {},
35117 "_requested": {
35118 "name": "bigi",
35119 "raw": "bigi@^1.4.0",
35120 "rawSpec": "^1.4.0",
35121 "scope": null,
35122 "spec": ">=1.4.0 <2.0.0",
35123 "type": "range"
35124 },
35125 "_requiredBy": [
35126 "/bitcoinjs-lib",
35127 "/ecurve"
35128 ],
35129 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
35130 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35131 "_shrinkwrap": null,
35132 "_spec": "bigi@^1.4.0",
35133 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser/node_modules/bitcoinjs-lib",
35134 "bugs": {
35135 "url": "https://github.com/cryptocoinjs/bigi/issues"
35136 },
35137 "dependencies": {},
35138 "description": "Big integers.",
35139 "devDependencies": {
35140 "coveralls": "^2.11.2",
35141 "istanbul": "^0.3.5",
35142 "jshint": "^2.5.1",
35143 "mocha": "^2.1.0",
35144 "mochify": "^2.1.0"
35145 },
35146 "directories": {},
35147 "dist": {
35148 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35149 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
35150 },
35151 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
35152 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
35153 "keywords": [
35154 "cryptography",
35155 "math",
35156 "bitcoin",
35157 "arbitrary",
35158 "precision",
35159 "arithmetic",
35160 "big",
35161 "integer",
35162 "int",
35163 "number",
35164 "biginteger",
35165 "bigint",
35166 "bignumber",
35167 "decimal",
35168 "float"
35169 ],
35170 "main": "./lib/index.js",
35171 "maintainers": [
35172 {
35173 "email": "boydb@midnightdesign.ws",
35174 "name": "midnightlightning"
35175 },
35176 {
35177 "email": "sidazhang89@gmail.com",
35178 "name": "sidazhang"
35179 },
35180 {
35181 "email": "npm@shesek.info",
35182 "name": "nadav"
35183 },
35184 {
35185 "email": "jprichardson@gmail.com",
35186 "name": "jprichardson"
35187 }
35188 ],
35189 "name": "bigi",
35190 "optionalDependencies": {},
35191 "readme": "ERROR: No README data found!",
35192 "repository": {
35193 "type": "git",
35194 "url": "git+https://github.com/cryptocoinjs/bigi.git"
35195 },
35196 "scripts": {
35197 "browser-test": "mochify --wd -R spec",
35198 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
35199 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
35200 "jshint": "jshint --config jshint.json lib/*.js ; true",
35201 "test": "_mocha -- test/*.js",
35202 "unit": "mocha"
35203 },
35204 "testling": {
35205 "browsers": [
35206 "ie/9..latest",
35207 "firefox/latest",
35208 "chrome/latest",
35209 "safari/6.0..latest",
35210 "iphone/6.0..latest",
35211 "android-browser/4.2..latest"
35212 ],
35213 "files": "test/*.js",
35214 "harness": "mocha"
35215 },
35216 "version": "1.4.2"
35217 }
35218
35219 },{}],41:[function(require,module,exports){
35220 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
35221 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35222 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
35223
35224 var Buffer = require('safe-buffer').Buffer
35225
35226 function check (buffer) {
35227 if (buffer.length < 8) return false
35228 if (buffer.length > 72) return false
35229 if (buffer[0] !== 0x30) return false
35230 if (buffer[1] !== buffer.length - 2) return false
35231 if (buffer[2] !== 0x02) return false
35232
35233 var lenR = buffer[3]
35234 if (lenR === 0) return false
35235 if (5 + lenR >= buffer.length) return false
35236 if (buffer[4 + lenR] !== 0x02) return false
35237
35238 var lenS = buffer[5 + lenR]
35239 if (lenS === 0) return false
35240 if ((6 + lenR + lenS) !== buffer.length) return false
35241
35242 if (buffer[4] & 0x80) return false
35243 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
35244
35245 if (buffer[lenR + 6] & 0x80) return false
35246 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
35247 return true
35248 }
35249
35250 function decode (buffer) {
35251 if (buffer.length < 8) throw new Error('DER sequence length is too short')
35252 if (buffer.length > 72) throw new Error('DER sequence length is too long')
35253 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
35254 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
35255 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
35256
35257 var lenR = buffer[3]
35258 if (lenR === 0) throw new Error('R length is zero')
35259 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
35260 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
35261
35262 var lenS = buffer[5 + lenR]
35263 if (lenS === 0) throw new Error('S length is zero')
35264 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
35265
35266 if (buffer[4] & 0x80) throw new Error('R value is negative')
35267 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
35268
35269 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
35270 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
35271
35272 // non-BIP66 - extract R, S values
35273 return {
35274 r: buffer.slice(4, 4 + lenR),
35275 s: buffer.slice(6 + lenR)
35276 }
35277 }
35278
35279 /*
35280 * Expects r and s to be positive DER integers.
35281 *
35282 * The DER format uses the most significant bit as a sign bit (& 0x80).
35283 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
35284 *
35285 * Examples:
35286 *
35287 * 0 => 0x00
35288 * 1 => 0x01
35289 * -1 => 0xff
35290 * 127 => 0x7f
35291 * -127 => 0x81
35292 * 128 => 0x0080
35293 * -128 => 0x80
35294 * 255 => 0x00ff
35295 * -255 => 0xff01
35296 * 16300 => 0x3fac
35297 * -16300 => 0xc054
35298 * 62300 => 0x00f35c
35299 * -62300 => 0xff0ca4
35300 */
35301 function encode (r, s) {
35302 var lenR = r.length
35303 var lenS = s.length
35304 if (lenR === 0) throw new Error('R length is zero')
35305 if (lenS === 0) throw new Error('S length is zero')
35306 if (lenR > 33) throw new Error('R length is too long')
35307 if (lenS > 33) throw new Error('S length is too long')
35308 if (r[0] & 0x80) throw new Error('R value is negative')
35309 if (s[0] & 0x80) throw new Error('S value is negative')
35310 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
35311 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
35312
35313 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
35314
35315 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35316 signature[0] = 0x30
35317 signature[1] = signature.length - 2
35318 signature[2] = 0x02
35319 signature[3] = r.length
35320 r.copy(signature, 4)
35321 signature[4 + lenR] = 0x02
35322 signature[5 + lenR] = s.length
35323 s.copy(signature, 6 + lenR)
35324
35325 return signature
35326 }
35327
35328 module.exports = {
35329 check: check,
35330 decode: decode,
35331 encode: encode
35332 }
35333
35334 },{"safe-buffer":101}],42:[function(require,module,exports){
35335 module.exports={
35336 "OP_FALSE": 0,
35337 "OP_0": 0,
35338 "OP_PUSHDATA1": 76,
35339 "OP_PUSHDATA2": 77,
35340 "OP_PUSHDATA4": 78,
35341 "OP_1NEGATE": 79,
35342 "OP_RESERVED": 80,
35343 "OP_TRUE": 81,
35344 "OP_1": 81,
35345 "OP_2": 82,
35346 "OP_3": 83,
35347 "OP_4": 84,
35348 "OP_5": 85,
35349 "OP_6": 86,
35350 "OP_7": 87,
35351 "OP_8": 88,
35352 "OP_9": 89,
35353 "OP_10": 90,
35354 "OP_11": 91,
35355 "OP_12": 92,
35356 "OP_13": 93,
35357 "OP_14": 94,
35358 "OP_15": 95,
35359 "OP_16": 96,
35360
35361 "OP_NOP": 97,
35362 "OP_VER": 98,
35363 "OP_IF": 99,
35364 "OP_NOTIF": 100,
35365 "OP_VERIF": 101,
35366 "OP_VERNOTIF": 102,
35367 "OP_ELSE": 103,
35368 "OP_ENDIF": 104,
35369 "OP_VERIFY": 105,
35370 "OP_RETURN": 106,
35371
35372 "OP_TOALTSTACK": 107,
35373 "OP_FROMALTSTACK": 108,
35374 "OP_2DROP": 109,
35375 "OP_2DUP": 110,
35376 "OP_3DUP": 111,
35377 "OP_2OVER": 112,
35378 "OP_2ROT": 113,
35379 "OP_2SWAP": 114,
35380 "OP_IFDUP": 115,
35381 "OP_DEPTH": 116,
35382 "OP_DROP": 117,
35383 "OP_DUP": 118,
35384 "OP_NIP": 119,
35385 "OP_OVER": 120,
35386 "OP_PICK": 121,
35387 "OP_ROLL": 122,
35388 "OP_ROT": 123,
35389 "OP_SWAP": 124,
35390 "OP_TUCK": 125,
35391
35392 "OP_CAT": 126,
35393 "OP_SUBSTR": 127,
35394 "OP_LEFT": 128,
35395 "OP_RIGHT": 129,
35396 "OP_SIZE": 130,
35397
35398 "OP_INVERT": 131,
35399 "OP_AND": 132,
35400 "OP_OR": 133,
35401 "OP_XOR": 134,
35402 "OP_EQUAL": 135,
35403 "OP_EQUALVERIFY": 136,
35404 "OP_RESERVED1": 137,
35405 "OP_RESERVED2": 138,
35406
35407 "OP_1ADD": 139,
35408 "OP_1SUB": 140,
35409 "OP_2MUL": 141,
35410 "OP_2DIV": 142,
35411 "OP_NEGATE": 143,
35412 "OP_ABS": 144,
35413 "OP_NOT": 145,
35414 "OP_0NOTEQUAL": 146,
35415 "OP_ADD": 147,
35416 "OP_SUB": 148,
35417 "OP_MUL": 149,
35418 "OP_DIV": 150,
35419 "OP_MOD": 151,
35420 "OP_LSHIFT": 152,
35421 "OP_RSHIFT": 153,
35422
35423 "OP_BOOLAND": 154,
35424 "OP_BOOLOR": 155,
35425 "OP_NUMEQUAL": 156,
35426 "OP_NUMEQUALVERIFY": 157,
35427 "OP_NUMNOTEQUAL": 158,
35428 "OP_LESSTHAN": 159,
35429 "OP_GREATERTHAN": 160,
35430 "OP_LESSTHANOREQUAL": 161,
35431 "OP_GREATERTHANOREQUAL": 162,
35432 "OP_MIN": 163,
35433 "OP_MAX": 164,
35434
35435 "OP_WITHIN": 165,
35436
35437 "OP_RIPEMD160": 166,
35438 "OP_SHA1": 167,
35439 "OP_SHA256": 168,
35440 "OP_HASH160": 169,
35441 "OP_HASH256": 170,
35442 "OP_CODESEPARATOR": 171,
35443 "OP_CHECKSIG": 172,
35444 "OP_CHECKSIGVERIFY": 173,
35445 "OP_CHECKMULTISIG": 174,
35446 "OP_CHECKMULTISIGVERIFY": 175,
35447
35448 "OP_NOP1": 176,
35449
35450 "OP_NOP2": 177,
35451 "OP_CHECKLOCKTIMEVERIFY": 177,
35452
35453 "OP_NOP3": 178,
35454 "OP_CHECKSEQUENCEVERIFY": 178,
35455
35456 "OP_NOP4": 179,
35457 "OP_NOP5": 180,
35458 "OP_NOP6": 181,
35459 "OP_NOP7": 182,
35460 "OP_NOP8": 183,
35461 "OP_NOP9": 184,
35462 "OP_NOP10": 185,
35463
35464 "OP_PUBKEYHASH": 253,
35465 "OP_PUBKEY": 254,
35466 "OP_INVALIDOPCODE": 255
35467 }
35468
35469 },{}],43:[function(require,module,exports){
35470 var OPS = require('./index.json')
35471
35472 var map = {}
35473 for (var op in OPS) {
35474 var code = OPS[op]
35475 map[code] = op
35476 }
35477
35478 module.exports = map
35479
35480 },{"./index.json":42}],44:[function(require,module,exports){
35481 var Buffer = require('safe-buffer').Buffer
35482 var bech32 = require('bech32')
35483 var bs58check = require('bs58check')
35484 var bscript = require('./script')
35485 var btemplates = require('./templates')
35486 var networks = require('./networks')
35487 var typeforce = require('typeforce')
35488 var types = require('./types')
35489
35490 function fromBase58Check (address) {
35491 var payload = bs58check.decode(address)
35492
35493 // TODO: 4.0.0, move to "toOutputScript"
35494 if (payload.length < 21) throw new TypeError(address + ' is too short')
35495 if (payload.length > 21) throw new TypeError(address + ' is too long')
35496
35497 var version = payload.readUInt8(0)
35498 var hash = payload.slice(1)
35499
35500 return { version: version, hash: hash }
35501 }
35502
35503 function fromBech32 (address) {
35504 var result = bech32.decode(address)
35505 var data = bech32.fromWords(result.words.slice(1))
35506
35507 return {
35508 version: result.words[0],
35509 prefix: result.prefix,
35510 data: Buffer.from(data)
35511 }
35512 }
35513
35514 function toBase58Check (hash, version) {
35515 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
35516
35517 var payload = Buffer.allocUnsafe(21)
35518 payload.writeUInt8(version, 0)
35519 hash.copy(payload, 1)
35520
35521 return bs58check.encode(payload)
35522 }
35523
35524 function toBech32 (data, version, prefix) {
35525 var words = bech32.toWords(data)
35526 words.unshift(version)
35527
35528 return bech32.encode(prefix, words)
35529 }
35530
35531 function fromOutputScript (outputScript, network) {
35532 network = network || networks.bitcoin
35533
35534 if (btemplates.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
35535 if (btemplates.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
35536 if (btemplates.witnessPubKeyHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 22), 0, network.bech32)
35537 if (btemplates.witnessScriptHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 34), 0, network.bech32)
35538
35539 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
35540 }
35541
35542 function toOutputScript (address, network) {
35543 network = network || networks.bitcoin
35544
35545 var decode
35546 try {
35547 decode = fromBase58Check(address)
35548 } catch (e) {}
35549
35550 if (decode) {
35551 if (decode.version === network.pubKeyHash) return btemplates.pubKeyHash.output.encode(decode.hash)
35552 if (decode.version === network.scriptHash) return btemplates.scriptHash.output.encode(decode.hash)
35553 } else {
35554 try {
35555 decode = fromBech32(address)
35556 } catch (e) {}
35557
35558 if (decode) {
35559 if (decode.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix')
35560 if (decode.version === 0) {
35561 if (decode.data.length === 20) return btemplates.witnessPubKeyHash.output.encode(decode.data)
35562 if (decode.data.length === 32) return btemplates.witnessScriptHash.output.encode(decode.data)
35563 }
35564 }
35565 }
35566
35567 throw new Error(address + ' has no matching Script')
35568 }
35569
35570 module.exports = {
35571 fromBase58Check: fromBase58Check,
35572 fromBech32: fromBech32,
35573 fromOutputScript: fromOutputScript,
35574 toBase58Check: toBase58Check,
35575 toBech32: toBech32,
35576 toOutputScript: toOutputScript
35577 }
35578
35579 },{"./networks":53,"./script":54,"./templates":56,"./types":80,"bech32":36,"bs58check":83,"safe-buffer":101,"typeforce":112}],45:[function(require,module,exports){
35580 var Buffer = require('safe-buffer').Buffer
35581 var bcrypto = require('./crypto')
35582 var fastMerkleRoot = require('merkle-lib/fastRoot')
35583 var typeforce = require('typeforce')
35584 var types = require('./types')
35585 var varuint = require('varuint-bitcoin')
35586
35587 var Transaction = require('./transaction')
35588
35589 function Block () {
35590 this.version = 1
35591 this.prevHash = null
35592 this.merkleRoot = null
35593 this.timestamp = 0
35594 this.bits = 0
35595 this.nonce = 0
35596 }
35597
35598 Block.fromBuffer = function (buffer) {
35599 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
35600
35601 var offset = 0
35602 function readSlice (n) {
35603 offset += n
35604 return buffer.slice(offset - n, offset)
35605 }
35606
35607 function readUInt32 () {
35608 var i = buffer.readUInt32LE(offset)
35609 offset += 4
35610 return i
35611 }
35612
35613 function readInt32 () {
35614 var i = buffer.readInt32LE(offset)
35615 offset += 4
35616 return i
35617 }
35618
35619 var block = new Block()
35620 block.version = readInt32()
35621 block.prevHash = readSlice(32)
35622 block.merkleRoot = readSlice(32)
35623 block.timestamp = readUInt32()
35624 block.bits = readUInt32()
35625 block.nonce = readUInt32()
35626
35627 if (buffer.length === 80) return block
35628
35629 function readVarInt () {
35630 var vi = varuint.decode(buffer, offset)
35631 offset += varuint.decode.bytes
35632 return vi
35633 }
35634
35635 function readTransaction () {
35636 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
35637 offset += tx.byteLength()
35638 return tx
35639 }
35640
35641 var nTransactions = readVarInt()
35642 block.transactions = []
35643
35644 for (var i = 0; i < nTransactions; ++i) {
35645 var tx = readTransaction()
35646 block.transactions.push(tx)
35647 }
35648
35649 return block
35650 }
35651
35652 Block.prototype.byteLength = function (headersOnly) {
35653 if (headersOnly || !this.transactions) return 80
35654
35655 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
35656 return a + x.byteLength()
35657 }, 0)
35658 }
35659
35660 Block.fromHex = function (hex) {
35661 return Block.fromBuffer(Buffer.from(hex, 'hex'))
35662 }
35663
35664 Block.prototype.getHash = function () {
35665 return bcrypto.hash256(this.toBuffer(true))
35666 }
35667
35668 Block.prototype.getId = function () {
35669 return this.getHash().reverse().toString('hex')
35670 }
35671
35672 Block.prototype.getUTCDate = function () {
35673 var date = new Date(0) // epoch
35674 date.setUTCSeconds(this.timestamp)
35675
35676 return date
35677 }
35678
35679 // TODO: buffer, offset compatibility
35680 Block.prototype.toBuffer = function (headersOnly) {
35681 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
35682
35683 var offset = 0
35684 function writeSlice (slice) {
35685 slice.copy(buffer, offset)
35686 offset += slice.length
35687 }
35688
35689 function writeInt32 (i) {
35690 buffer.writeInt32LE(i, offset)
35691 offset += 4
35692 }
35693 function writeUInt32 (i) {
35694 buffer.writeUInt32LE(i, offset)
35695 offset += 4
35696 }
35697
35698 writeInt32(this.version)
35699 writeSlice(this.prevHash)
35700 writeSlice(this.merkleRoot)
35701 writeUInt32(this.timestamp)
35702 writeUInt32(this.bits)
35703 writeUInt32(this.nonce)
35704
35705 if (headersOnly || !this.transactions) return buffer
35706
35707 varuint.encode(this.transactions.length, buffer, offset)
35708 offset += varuint.encode.bytes
35709
35710 this.transactions.forEach(function (tx) {
35711 var txSize = tx.byteLength() // TODO: extract from toBuffer?
35712 tx.toBuffer(buffer, offset)
35713 offset += txSize
35714 })
35715
35716 return buffer
35717 }
35718
35719 Block.prototype.toHex = function (headersOnly) {
35720 return this.toBuffer(headersOnly).toString('hex')
35721 }
35722
35723 Block.calculateTarget = function (bits) {
35724 var exponent = ((bits & 0xff000000) >> 24) - 3
35725 var mantissa = bits & 0x007fffff
35726 var target = Buffer.alloc(32, 0)
35727 target.writeUInt32BE(mantissa, 28 - exponent)
35728 return target
35729 }
35730
35731 Block.calculateMerkleRoot = function (transactions) {
35732 typeforce([{ getHash: types.Function }], transactions)
35733 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
35734
35735 var hashes = transactions.map(function (transaction) {
35736 return transaction.getHash()
35737 })
35738
35739 return fastMerkleRoot(hashes, bcrypto.hash256)
35740 }
35741
35742 Block.prototype.checkMerkleRoot = function () {
35743 if (!this.transactions) return false
35744
35745 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
35746 return this.merkleRoot.compare(actualMerkleRoot) === 0
35747 }
35748
35749 Block.prototype.checkProofOfWork = function () {
35750 var hash = this.getHash().reverse()
35751 var target = Block.calculateTarget(this.bits)
35752
35753 return hash.compare(target) <= 0
35754 }
35755
35756 module.exports = Block
35757
35758 },{"./crypto":47,"./transaction":78,"./types":80,"merkle-lib/fastRoot":97,"safe-buffer":101,"typeforce":112,"varuint-bitcoin":114}],46:[function(require,module,exports){
35759 var pushdata = require('pushdata-bitcoin')
35760 var varuint = require('varuint-bitcoin')
35761
35762 // https://github.com/feross/buffer/blob/master/index.js#L1127
35763 function verifuint (value, max) {
35764 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
35765 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
35766 if (value > max) throw new Error('RangeError: value out of range')
35767 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
35768 }
35769
35770 function readUInt64LE (buffer, offset) {
35771 var a = buffer.readUInt32LE(offset)
35772 var b = buffer.readUInt32LE(offset + 4)
35773 b *= 0x100000000
35774
35775 verifuint(b + a, 0x001fffffffffffff)
35776
35777 return b + a
35778 }
35779
35780 function writeUInt64LE (buffer, value, offset) {
35781 verifuint(value, 0x001fffffffffffff)
35782
35783 buffer.writeInt32LE(value & -1, offset)
35784 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
35785 return offset + 8
35786 }
35787
35788 // TODO: remove in 4.0.0?
35789 function readVarInt (buffer, offset) {
35790 var result = varuint.decode(buffer, offset)
35791
35792 return {
35793 number: result,
35794 size: varuint.decode.bytes
35795 }
35796 }
35797
35798 // TODO: remove in 4.0.0?
35799 function writeVarInt (buffer, number, offset) {
35800 varuint.encode(number, buffer, offset)
35801 return varuint.encode.bytes
35802 }
35803
35804 module.exports = {
35805 pushDataSize: pushdata.encodingLength,
35806 readPushDataInt: pushdata.decode,
35807 readUInt64LE: readUInt64LE,
35808 readVarInt: readVarInt,
35809 varIntBuffer: varuint.encode,
35810 varIntSize: varuint.encodingLength,
35811 writePushDataInt: pushdata.encode,
35812 writeUInt64LE: writeUInt64LE,
35813 writeVarInt: writeVarInt
35814 }
35815
35816 },{"pushdata-bitcoin":98,"varuint-bitcoin":114}],47:[function(require,module,exports){
35817 var createHash = require('create-hash')
35818
35819 function ripemd160 (buffer) {
35820 return createHash('rmd160').update(buffer).digest()
35821 }
35822
35823 function sha1 (buffer) {
35824 return createHash('sha1').update(buffer).digest()
35825 }
35826
35827 function sha256 (buffer) {
35828 return createHash('sha256').update(buffer).digest()
35829 }
35830
35831 function hash160 (buffer) {
35832 return ripemd160(sha256(buffer))
35833 }
35834
35835 function hash256 (buffer) {
35836 return sha256(sha256(buffer))
35837 }
35838
35839 module.exports = {
35840 hash160: hash160,
35841 hash256: hash256,
35842 ripemd160: ripemd160,
35843 sha1: sha1,
35844 sha256: sha256
35845 }
35846
35847 },{"create-hash":85}],48:[function(require,module,exports){
35848 var Buffer = require('safe-buffer').Buffer
35849 var createHmac = require('create-hmac')
35850 var typeforce = require('typeforce')
35851 var types = require('./types')
35852
35853 var BigInteger = require('bigi')
35854 var ECSignature = require('./ecsignature')
35855
35856 var ZERO = Buffer.alloc(1, 0)
35857 var ONE = Buffer.alloc(1, 1)
35858
35859 var ecurve = require('ecurve')
35860 var secp256k1 = ecurve.getCurveByName('secp256k1')
35861
35862 // https://tools.ietf.org/html/rfc6979#section-3.2
35863 function deterministicGenerateK (hash, x, checkSig) {
35864 typeforce(types.tuple(
35865 types.Hash256bit,
35866 types.Buffer256bit,
35867 types.Function
35868 ), arguments)
35869
35870 // Step A, ignored as hash already provided
35871 // Step B
35872 // Step C
35873 var k = Buffer.alloc(32, 0)
35874 var v = Buffer.alloc(32, 1)
35875
35876 // Step D
35877 k = createHmac('sha256', k)
35878 .update(v)
35879 .update(ZERO)
35880 .update(x)
35881 .update(hash)
35882 .digest()
35883
35884 // Step E
35885 v = createHmac('sha256', k).update(v).digest()
35886
35887 // Step F
35888 k = createHmac('sha256', k)
35889 .update(v)
35890 .update(ONE)
35891 .update(x)
35892 .update(hash)
35893 .digest()
35894
35895 // Step G
35896 v = createHmac('sha256', k).update(v).digest()
35897
35898 // Step H1/H2a, ignored as tlen === qlen (256 bit)
35899 // Step H2b
35900 v = createHmac('sha256', k).update(v).digest()
35901
35902 var T = BigInteger.fromBuffer(v)
35903
35904 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
35905 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
35906 k = createHmac('sha256', k)
35907 .update(v)
35908 .update(ZERO)
35909 .digest()
35910
35911 v = createHmac('sha256', k).update(v).digest()
35912
35913 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
35914 // Step H2b again
35915 v = createHmac('sha256', k).update(v).digest()
35916 T = BigInteger.fromBuffer(v)
35917 }
35918
35919 return T
35920 }
35921
35922 var N_OVER_TWO = secp256k1.n.shiftRight(1)
35923
35924 function sign (hash, d) {
35925 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
35926
35927 var x = d.toBuffer(32)
35928 var e = BigInteger.fromBuffer(hash)
35929 var n = secp256k1.n
35930 var G = secp256k1.G
35931
35932 var r, s
35933 deterministicGenerateK(hash, x, function (k) {
35934 var Q = G.multiply(k)
35935
35936 if (secp256k1.isInfinity(Q)) return false
35937
35938 r = Q.affineX.mod(n)
35939 if (r.signum() === 0) return false
35940
35941 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
35942 if (s.signum() === 0) return false
35943
35944 return true
35945 })
35946
35947 // enforce low S values, see bip62: 'low s values in signatures'
35948 if (s.compareTo(N_OVER_TWO) > 0) {
35949 s = n.subtract(s)
35950 }
35951
35952 return new ECSignature(r, s)
35953 }
35954
35955 function verify (hash, signature, Q) {
35956 typeforce(types.tuple(
35957 types.Hash256bit,
35958 types.ECSignature,
35959 types.ECPoint
35960 ), arguments)
35961
35962 var n = secp256k1.n
35963 var G = secp256k1.G
35964
35965 var r = signature.r
35966 var s = signature.s
35967
35968 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
35969 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
35970 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
35971
35972 // 1.4.2 H = Hash(M), already done by the user
35973 // 1.4.3 e = H
35974 var e = BigInteger.fromBuffer(hash)
35975
35976 // Compute s^-1
35977 var sInv = s.modInverse(n)
35978
35979 // 1.4.4 Compute u1 = es^−1 mod n
35980 // u2 = rs^−1 mod n
35981 var u1 = e.multiply(sInv).mod(n)
35982 var u2 = r.multiply(sInv).mod(n)
35983
35984 // 1.4.5 Compute R = (xR, yR)
35985 // R = u1G + u2Q
35986 var R = G.multiplyTwo(u1, Q, u2)
35987
35988 // 1.4.5 (cont.) Enforce R is not at infinity
35989 if (secp256k1.isInfinity(R)) return false
35990
35991 // 1.4.6 Convert the field element R.x to an integer
35992 var xR = R.affineX
35993
35994 // 1.4.7 Set v = xR mod n
35995 var v = xR.mod(n)
35996
35997 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
35998 return v.equals(r)
35999 }
36000
36001 module.exports = {
36002 deterministicGenerateK: deterministicGenerateK,
36003 sign: sign,
36004 verify: verify,
36005
36006 // TODO: remove
36007 __curve: secp256k1
36008 }
36009
36010 },{"./ecsignature":50,"./types":80,"bigi":39,"create-hmac":88,"ecurve":92,"safe-buffer":101,"typeforce":112}],49:[function(require,module,exports){
36011 var baddress = require('./address')
36012 var bcrypto = require('./crypto')
36013 var ecdsa = require('./ecdsa')
36014 var randomBytes = require('randombytes')
36015 var typeforce = require('typeforce')
36016 var types = require('./types')
36017 var wif = require('wif')
36018
36019 var NETWORKS = require('./networks')
36020 var BigInteger = require('bigi')
36021
36022 var ecurve = require('ecurve')
36023 var secp256k1 = ecdsa.__curve
36024
36025 function ECPair (d, Q, options) {
36026 if (options) {
36027 typeforce({
36028 compressed: types.maybe(types.Boolean),
36029 network: types.maybe(types.Network)
36030 }, options)
36031 }
36032
36033 options = options || {}
36034
36035 if (d) {
36036 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
36037 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
36038 if (Q) throw new TypeError('Unexpected publicKey parameter')
36039
36040 this.d = d
36041 } else {
36042 typeforce(types.ECPoint, Q)
36043
36044 this.__Q = Q
36045 }
36046
36047 this.compressed = options.compressed === undefined ? true : options.compressed
36048 this.network = options.network || NETWORKS.bitcoin
36049 }
36050
36051 Object.defineProperty(ECPair.prototype, 'Q', {
36052 get: function () {
36053 if (!this.__Q && this.d) {
36054 this.__Q = secp256k1.G.multiply(this.d)
36055 }
36056
36057 return this.__Q
36058 }
36059 })
36060
36061 ECPair.fromPublicKeyBuffer = function (buffer, network) {
36062 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
36063
36064 return new ECPair(null, Q, {
36065 compressed: Q.compressed,
36066 network: network
36067 })
36068 }
36069
36070 ECPair.fromWIF = function (string, network) {
36071 var decoded = wif.decode(string)
36072 var version = decoded.version
36073
36074 // list of networks?
36075 if (types.Array(network)) {
36076 network = network.filter(function (x) {
36077 return version === x.wif
36078 }).pop()
36079
36080 if (!network) throw new Error('Unknown network version')
36081
36082 // otherwise, assume a network object (or default to bitcoin)
36083 } else {
36084 network = network || NETWORKS.bitcoin
36085
36086 if (version !== network.wif) throw new Error('Invalid network version')
36087 }
36088
36089 var d = BigInteger.fromBuffer(decoded.privateKey)
36090
36091 return new ECPair(d, null, {
36092 compressed: decoded.compressed,
36093 network: network
36094 })
36095 }
36096
36097 ECPair.makeRandom = function (options) {
36098 options = options || {}
36099
36100 var rng = options.rng || randomBytes
36101
36102 var d
36103 do {
36104 var buffer = rng(32)
36105 typeforce(types.Buffer256bit, buffer)
36106
36107 d = BigInteger.fromBuffer(buffer)
36108 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
36109
36110 return new ECPair(d, null, options)
36111 }
36112
36113 ECPair.prototype.getAddress = function () {
36114 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
36115 }
36116
36117 ECPair.prototype.getNetwork = function () {
36118 return this.network
36119 }
36120
36121 ECPair.prototype.getPublicKeyBuffer = function () {
36122 return this.Q.getEncoded(this.compressed)
36123 }
36124
36125 ECPair.prototype.sign = function (hash) {
36126 if (!this.d) throw new Error('Missing private key')
36127
36128 return ecdsa.sign(hash, this.d)
36129 }
36130
36131 ECPair.prototype.toWIF = function () {
36132 if (!this.d) throw new Error('Missing private key')
36133
36134 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
36135 }
36136
36137 ECPair.prototype.verify = function (hash, signature) {
36138 return ecdsa.verify(hash, signature, this.Q)
36139 }
36140
36141 module.exports = ECPair
36142
36143 },{"./address":44,"./crypto":47,"./ecdsa":48,"./networks":53,"./types":80,"bigi":39,"ecurve":92,"randombytes":99,"typeforce":112,"wif":115}],50:[function(require,module,exports){
36144 (function (Buffer){
36145 var bip66 = require('bip66')
36146 var typeforce = require('typeforce')
36147 var types = require('./types')
36148
36149 var BigInteger = require('bigi')
36150
36151 function ECSignature (r, s) {
36152 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
36153
36154 this.r = r
36155 this.s = s
36156 }
36157
36158 ECSignature.parseCompact = function (buffer) {
36159 typeforce(types.BufferN(65), buffer)
36160
36161 var flagByte = buffer.readUInt8(0) - 27
36162 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
36163
36164 var compressed = !!(flagByte & 4)
36165 var recoveryParam = flagByte & 3
36166 var signature = ECSignature.fromRSBuffer(buffer.slice(1))
36167
36168 return {
36169 compressed: compressed,
36170 i: recoveryParam,
36171 signature: signature
36172 }
36173 }
36174
36175 ECSignature.fromRSBuffer = function (buffer) {
36176 typeforce(types.BufferN(64), buffer)
36177
36178 var r = BigInteger.fromBuffer(buffer.slice(0, 32))
36179 var s = BigInteger.fromBuffer(buffer.slice(32, 64))
36180 return new ECSignature(r, s)
36181 }
36182
36183 ECSignature.fromDER = function (buffer) {
36184 var decode = bip66.decode(buffer)
36185 var r = BigInteger.fromDERInteger(decode.r)
36186 var s = BigInteger.fromDERInteger(decode.s)
36187
36188 return new ECSignature(r, s)
36189 }
36190
36191 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
36192 ECSignature.parseScriptSignature = function (buffer) {
36193 var hashType = buffer.readUInt8(buffer.length - 1)
36194 var hashTypeMod = hashType & ~0x80
36195
36196 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
36197
36198 return {
36199 signature: ECSignature.fromDER(buffer.slice(0, -1)),
36200 hashType: hashType
36201 }
36202 }
36203
36204 ECSignature.prototype.toCompact = function (i, compressed) {
36205 if (compressed) {
36206 i += 4
36207 }
36208
36209 i += 27
36210
36211 var buffer = Buffer.alloc(65)
36212 buffer.writeUInt8(i, 0)
36213 this.toRSBuffer(buffer, 1)
36214 return buffer
36215 }
36216
36217 ECSignature.prototype.toDER = function () {
36218 var r = Buffer.from(this.r.toDERInteger())
36219 var s = Buffer.from(this.s.toDERInteger())
36220
36221 return bip66.encode(r, s)
36222 }
36223
36224 ECSignature.prototype.toRSBuffer = function (buffer, offset) {
36225 buffer = buffer || Buffer.alloc(64)
36226 this.r.toBuffer(32).copy(buffer, offset)
36227 this.s.toBuffer(32).copy(buffer, offset + 32)
36228 return buffer
36229 }
36230
36231 ECSignature.prototype.toScriptSignature = function (hashType) {
36232 var hashTypeMod = hashType & ~0x80
36233 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
36234
36235 var hashTypeBuffer = Buffer.alloc(1)
36236 hashTypeBuffer.writeUInt8(hashType, 0)
36237
36238 return Buffer.concat([this.toDER(), hashTypeBuffer])
36239 }
36240
36241 module.exports = ECSignature
36242
36243 }).call(this,require("buffer").Buffer)
36244 },{"./types":80,"bigi":39,"bip66":41,"buffer":5,"typeforce":112}],51:[function(require,module,exports){
36245 var Buffer = require('safe-buffer').Buffer
36246 var base58check = require('bs58check')
36247 var bcrypto = require('./crypto')
36248 var createHmac = require('create-hmac')
36249 var typeforce = require('typeforce')
36250 var types = require('./types')
36251 var NETWORKS = require('./networks')
36252
36253 var BigInteger = require('bigi')
36254 var ECPair = require('./ecpair')
36255
36256 var ecurve = require('ecurve')
36257 var curve = ecurve.getCurveByName('secp256k1')
36258
36259 function HDNode (keyPair, chainCode) {
36260 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
36261
36262 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
36263
36264 this.keyPair = keyPair
36265 this.chainCode = chainCode
36266 this.depth = 0
36267 this.index = 0
36268 this.parentFingerprint = 0x00000000
36269 }
36270
36271 HDNode.HIGHEST_BIT = 0x80000000
36272 HDNode.LENGTH = 78
36273 HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
36274
36275 HDNode.fromSeedBuffer = function (seed, network) {
36276 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
36277
36278 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
36279 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
36280
36281 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
36282 var IL = I.slice(0, 32)
36283 var IR = I.slice(32)
36284
36285 // In case IL is 0 or >= n, the master key is invalid
36286 // This is handled by the ECPair constructor
36287 var pIL = BigInteger.fromBuffer(IL)
36288 var keyPair = new ECPair(pIL, null, {
36289 network: network
36290 })
36291
36292 return new HDNode(keyPair, IR)
36293 }
36294
36295 HDNode.fromSeedHex = function (hex, network) {
36296 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
36297 }
36298
36299 HDNode.fromBase58 = function (string, networks) {
36300 var buffer = base58check.decode(string)
36301 if (buffer.length !== 78) throw new Error('Invalid buffer length')
36302
36303 // 4 bytes: version bytes
36304 var version = buffer.readUInt32BE(0)
36305 var network
36306
36307 // list of networks?
36308 if (Array.isArray(networks)) {
36309 network = networks.filter(function (x) {
36310 return version === x.bip32.private ||
36311 version === x.bip32.public
36312 }).pop()
36313
36314 if (!network) throw new Error('Unknown network version')
36315
36316 // otherwise, assume a network object (or default to bitcoin)
36317 } else {
36318 network = networks || NETWORKS.bitcoin
36319 }
36320
36321 if (version !== network.bip32.private &&
36322 version !== network.bip32.public) throw new Error('Invalid network version')
36323
36324 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
36325 var depth = buffer[4]
36326
36327 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36328 var parentFingerprint = buffer.readUInt32BE(5)
36329 if (depth === 0) {
36330 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
36331 }
36332
36333 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36334 // This is encoded in MSB order. (0x00000000 if master key)
36335 var index = buffer.readUInt32BE(9)
36336 if (depth === 0 && index !== 0) throw new Error('Invalid index')
36337
36338 // 32 bytes: the chain code
36339 var chainCode = buffer.slice(13, 45)
36340 var keyPair
36341
36342 // 33 bytes: private key data (0x00 + k)
36343 if (version === network.bip32.private) {
36344 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
36345
36346 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
36347 keyPair = new ECPair(d, null, { network: network })
36348
36349 // 33 bytes: public key data (0x02 + X or 0x03 + X)
36350 } else {
36351 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
36352 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
36353
36354 // Verify that the X coordinate in the public point corresponds to a point on the curve.
36355 // If not, the extended public key is invalid.
36356 curve.validate(Q)
36357
36358 keyPair = new ECPair(null, Q, { network: network })
36359 }
36360
36361 var hd = new HDNode(keyPair, chainCode)
36362 hd.depth = depth
36363 hd.index = index
36364 hd.parentFingerprint = parentFingerprint
36365
36366 return hd
36367 }
36368
36369 HDNode.prototype.getAddress = function () {
36370 return this.keyPair.getAddress()
36371 }
36372
36373 HDNode.prototype.getIdentifier = function () {
36374 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
36375 }
36376
36377 HDNode.prototype.getFingerprint = function () {
36378 return this.getIdentifier().slice(0, 4)
36379 }
36380
36381 HDNode.prototype.getNetwork = function () {
36382 return this.keyPair.getNetwork()
36383 }
36384
36385 HDNode.prototype.getPublicKeyBuffer = function () {
36386 return this.keyPair.getPublicKeyBuffer()
36387 }
36388
36389 HDNode.prototype.neutered = function () {
36390 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
36391 network: this.keyPair.network
36392 })
36393
36394 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
36395 neutered.depth = this.depth
36396 neutered.index = this.index
36397 neutered.parentFingerprint = this.parentFingerprint
36398
36399 return neutered
36400 }
36401
36402 HDNode.prototype.sign = function (hash) {
36403 return this.keyPair.sign(hash)
36404 }
36405
36406 HDNode.prototype.verify = function (hash, signature) {
36407 return this.keyPair.verify(hash, signature)
36408 }
36409
36410 HDNode.prototype.toBase58 = function (__isPrivate) {
36411 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
36412
36413 // Version
36414 var network = this.keyPair.network
36415 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
36416 var buffer = Buffer.allocUnsafe(78)
36417
36418 // 4 bytes: version bytes
36419 buffer.writeUInt32BE(version, 0)
36420
36421 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
36422 buffer.writeUInt8(this.depth, 4)
36423
36424 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36425 buffer.writeUInt32BE(this.parentFingerprint, 5)
36426
36427 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36428 // This is encoded in big endian. (0x00000000 if master key)
36429 buffer.writeUInt32BE(this.index, 9)
36430
36431 // 32 bytes: the chain code
36432 this.chainCode.copy(buffer, 13)
36433
36434 // 33 bytes: the public key or private key data
36435 if (!this.isNeutered()) {
36436 // 0x00 + k for private keys
36437 buffer.writeUInt8(0, 45)
36438 this.keyPair.d.toBuffer(32).copy(buffer, 46)
36439
36440 // 33 bytes: the public key
36441 } else {
36442 // X9.62 encoding for public keys
36443 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
36444 }
36445
36446 return base58check.encode(buffer)
36447 }
36448
36449 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
36450 HDNode.prototype.derive = function (index) {
36451 typeforce(types.UInt32, index)
36452
36453 var isHardened = index >= HDNode.HIGHEST_BIT
36454 var data = Buffer.allocUnsafe(37)
36455
36456 // Hardened child
36457 if (isHardened) {
36458 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
36459
36460 // data = 0x00 || ser256(kpar) || ser32(index)
36461 data[0] = 0x00
36462 this.keyPair.d.toBuffer(32).copy(data, 1)
36463 data.writeUInt32BE(index, 33)
36464
36465 // Normal child
36466 } else {
36467 // data = serP(point(kpar)) || ser32(index)
36468 // = serP(Kpar) || ser32(index)
36469 this.keyPair.getPublicKeyBuffer().copy(data, 0)
36470 data.writeUInt32BE(index, 33)
36471 }
36472
36473 var I = createHmac('sha512', this.chainCode).update(data).digest()
36474 var IL = I.slice(0, 32)
36475 var IR = I.slice(32)
36476
36477 var pIL = BigInteger.fromBuffer(IL)
36478
36479 // In case parse256(IL) >= n, proceed with the next value for i
36480 if (pIL.compareTo(curve.n) >= 0) {
36481 return this.derive(index + 1)
36482 }
36483
36484 // Private parent key -> private child key
36485 var derivedKeyPair
36486 if (!this.isNeutered()) {
36487 // ki = parse256(IL) + kpar (mod n)
36488 var ki = pIL.add(this.keyPair.d).mod(curve.n)
36489
36490 // In case ki == 0, proceed with the next value for i
36491 if (ki.signum() === 0) {
36492 return this.derive(index + 1)
36493 }
36494
36495 derivedKeyPair = new ECPair(ki, null, {
36496 network: this.keyPair.network
36497 })
36498
36499 // Public parent key -> public child key
36500 } else {
36501 // Ki = point(parse256(IL)) + Kpar
36502 // = G*IL + Kpar
36503 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
36504
36505 // In case Ki is the point at infinity, proceed with the next value for i
36506 if (curve.isInfinity(Ki)) {
36507 return this.derive(index + 1)
36508 }
36509
36510 derivedKeyPair = new ECPair(null, Ki, {
36511 network: this.keyPair.network
36512 })
36513 }
36514
36515 var hd = new HDNode(derivedKeyPair, IR)
36516 hd.depth = this.depth + 1
36517 hd.index = index
36518 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
36519
36520 return hd
36521 }
36522
36523 HDNode.prototype.deriveHardened = function (index) {
36524 typeforce(types.UInt31, index)
36525
36526 // Only derives hardened private keys by default
36527 return this.derive(index + HDNode.HIGHEST_BIT)
36528 }
36529
36530 // Private === not neutered
36531 // Public === neutered
36532 HDNode.prototype.isNeutered = function () {
36533 return !(this.keyPair.d)
36534 }
36535
36536 HDNode.prototype.derivePath = function (path) {
36537 typeforce(types.BIP32Path, path)
36538
36539 var splitPath = path.split('/')
36540 if (splitPath[0] === 'm') {
36541 if (this.parentFingerprint) {
36542 throw new Error('Not a master node')
36543 }
36544
36545 splitPath = splitPath.slice(1)
36546 }
36547
36548 return splitPath.reduce(function (prevHd, indexStr) {
36549 var index
36550 if (indexStr.slice(-1) === "'") {
36551 index = parseInt(indexStr.slice(0, -1), 10)
36552 return prevHd.deriveHardened(index)
36553 } else {
36554 index = parseInt(indexStr, 10)
36555 return prevHd.derive(index)
36556 }
36557 }, this)
36558 }
36559
36560 module.exports = HDNode
36561
36562 },{"./crypto":47,"./ecpair":49,"./networks":53,"./types":80,"bigi":39,"bs58check":83,"create-hmac":88,"ecurve":92,"safe-buffer":101,"typeforce":112}],52:[function(require,module,exports){
36563 var script = require('./script')
36564
36565 var templates = require('./templates')
36566 for (var key in templates) {
36567 script[key] = templates[key]
36568 }
36569
36570 module.exports = {
36571 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
36572
36573 Block: require('./block'),
36574 ECPair: require('./ecpair'),
36575 ECSignature: require('./ecsignature'),
36576 HDNode: require('./hdnode'),
36577 Transaction: require('./transaction'),
36578 TransactionBuilder: require('./transaction_builder'),
36579
36580 address: require('./address'),
36581 crypto: require('./crypto'),
36582 networks: require('./networks'),
36583 opcodes: require('bitcoin-ops'),
36584 script: script
36585 }
36586
36587 },{"./address":44,"./block":45,"./bufferutils":46,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./hdnode":51,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./transaction_builder":79,"bitcoin-ops":42}],53:[function(require,module,exports){
36588 // https://en.bitcoin.it/wiki/List_of_address_prefixes
36589 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
36590
36591 module.exports = {
36592 bitcoin: {
36593 messagePrefix: '\x18Bitcoin Signed Message:\n',
36594 bech32: 'bc',
36595 bip32: {
36596 public: 0x0488b21e,
36597 private: 0x0488ade4
36598 },
36599 pubKeyHash: 0x00,
36600 scriptHash: 0x05,
36601 wif: 0x80
36602 },
36603 testnet: {
36604 messagePrefix: '\x18Bitcoin Signed Message:\n',
36605 bech32: 'tb',
36606 bip32: {
36607 public: 0x043587cf,
36608 private: 0x04358394
36609 },
36610 pubKeyHash: 0x6f,
36611 scriptHash: 0xc4,
36612 wif: 0xef
36613 },
36614 litecoin: {
36615 messagePrefix: '\x19Litecoin Signed Message:\n',
36616 bip32: {
36617 public: 0x019da462,
36618 private: 0x019d9cfe
36619 },
36620 pubKeyHash: 0x30,
36621 scriptHash: 0x32,
36622 wif: 0xb0
36623 }
36624 }
36625
36626 },{}],54:[function(require,module,exports){
36627 var Buffer = require('safe-buffer').Buffer
36628 var bip66 = require('bip66')
36629 var pushdata = require('pushdata-bitcoin')
36630 var typeforce = require('typeforce')
36631 var types = require('./types')
36632 var scriptNumber = require('./script_number')
36633
36634 var OPS = require('bitcoin-ops')
36635 var REVERSE_OPS = require('bitcoin-ops/map')
36636 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36637
36638 function isOPInt (value) {
36639 return types.Number(value) &&
36640 ((value === OPS.OP_0) ||
36641 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
36642 (value === OPS.OP_1NEGATE))
36643 }
36644
36645 function isPushOnlyChunk (value) {
36646 return types.Buffer(value) || isOPInt(value)
36647 }
36648
36649 function isPushOnly (value) {
36650 return types.Array(value) && value.every(isPushOnlyChunk)
36651 }
36652
36653 function asMinimalOP (buffer) {
36654 if (buffer.length === 0) return OPS.OP_0
36655 if (buffer.length !== 1) return
36656 if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]
36657 if (buffer[0] === 0x81) return OPS.OP_1NEGATE
36658 }
36659
36660 function compile (chunks) {
36661 // TODO: remove me
36662 if (Buffer.isBuffer(chunks)) return chunks
36663
36664 typeforce(types.Array, chunks)
36665
36666 var bufferSize = chunks.reduce(function (accum, chunk) {
36667 // data chunk
36668 if (Buffer.isBuffer(chunk)) {
36669 // adhere to BIP62.3, minimal push policy
36670 if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
36671 return accum + 1
36672 }
36673
36674 return accum + pushdata.encodingLength(chunk.length) + chunk.length
36675 }
36676
36677 // opcode
36678 return accum + 1
36679 }, 0.0)
36680
36681 var buffer = Buffer.allocUnsafe(bufferSize)
36682 var offset = 0
36683
36684 chunks.forEach(function (chunk) {
36685 // data chunk
36686 if (Buffer.isBuffer(chunk)) {
36687 // adhere to BIP62.3, minimal push policy
36688 var opcode = asMinimalOP(chunk)
36689 if (opcode !== undefined) {
36690 buffer.writeUInt8(opcode, offset)
36691 offset += 1
36692 return
36693 }
36694
36695 offset += pushdata.encode(buffer, chunk.length, offset)
36696 chunk.copy(buffer, offset)
36697 offset += chunk.length
36698
36699 // opcode
36700 } else {
36701 buffer.writeUInt8(chunk, offset)
36702 offset += 1
36703 }
36704 })
36705
36706 if (offset !== buffer.length) throw new Error('Could not decode chunks')
36707 return buffer
36708 }
36709
36710 function decompile (buffer) {
36711 // TODO: remove me
36712 if (types.Array(buffer)) return buffer
36713
36714 typeforce(types.Buffer, buffer)
36715
36716 var chunks = []
36717 var i = 0
36718
36719 while (i < buffer.length) {
36720 var opcode = buffer[i]
36721
36722 // data chunk
36723 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
36724 var d = pushdata.decode(buffer, i)
36725
36726 // did reading a pushDataInt fail? empty script
36727 if (d === null) return []
36728 i += d.size
36729
36730 // attempt to read too much data? empty script
36731 if (i + d.number > buffer.length) return []
36732
36733 var data = buffer.slice(i, i + d.number)
36734 i += d.number
36735
36736 // decompile minimally
36737 var op = asMinimalOP(data)
36738 if (op !== undefined) {
36739 chunks.push(op)
36740 } else {
36741 chunks.push(data)
36742 }
36743
36744 // opcode
36745 } else {
36746 chunks.push(opcode)
36747
36748 i += 1
36749 }
36750 }
36751
36752 return chunks
36753 }
36754
36755 function toASM (chunks) {
36756 if (Buffer.isBuffer(chunks)) {
36757 chunks = decompile(chunks)
36758 }
36759
36760 return chunks.map(function (chunk) {
36761 // data?
36762 if (Buffer.isBuffer(chunk)) {
36763 var op = asMinimalOP(chunk)
36764 if (op === undefined) return chunk.toString('hex')
36765 chunk = op
36766 }
36767
36768 // opcode!
36769 return REVERSE_OPS[chunk]
36770 }).join(' ')
36771 }
36772
36773 function fromASM (asm) {
36774 typeforce(types.String, asm)
36775
36776 return compile(asm.split(' ').map(function (chunkStr) {
36777 // opcode?
36778 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
36779 typeforce(types.Hex, chunkStr)
36780
36781 // data!
36782 return Buffer.from(chunkStr, 'hex')
36783 }))
36784 }
36785
36786 function toStack (chunks) {
36787 chunks = decompile(chunks)
36788 typeforce(isPushOnly, chunks)
36789
36790 return chunks.map(function (op) {
36791 if (Buffer.isBuffer(op)) return op
36792 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
36793
36794 return scriptNumber.encode(op - OP_INT_BASE)
36795 })
36796 }
36797
36798 function isCanonicalPubKey (buffer) {
36799 if (!Buffer.isBuffer(buffer)) return false
36800 if (buffer.length < 33) return false
36801
36802 switch (buffer[0]) {
36803 case 0x02:
36804 case 0x03:
36805 return buffer.length === 33
36806 case 0x04:
36807 return buffer.length === 65
36808 }
36809
36810 return false
36811 }
36812
36813 function isDefinedHashType (hashType) {
36814 var hashTypeMod = hashType & ~0x80
36815
36816 // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
36817 return hashTypeMod > 0x00 && hashTypeMod < 0x04
36818 }
36819
36820 function isCanonicalSignature (buffer) {
36821 if (!Buffer.isBuffer(buffer)) return false
36822 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
36823
36824 return bip66.check(buffer.slice(0, -1))
36825 }
36826
36827 module.exports = {
36828 compile: compile,
36829 decompile: decompile,
36830 fromASM: fromASM,
36831 toASM: toASM,
36832 toStack: toStack,
36833
36834 number: require('./script_number'),
36835
36836 isCanonicalPubKey: isCanonicalPubKey,
36837 isCanonicalSignature: isCanonicalSignature,
36838 isPushOnly: isPushOnly,
36839 isDefinedHashType: isDefinedHashType
36840 }
36841
36842 },{"./script_number":55,"./types":80,"bip66":41,"bitcoin-ops":42,"bitcoin-ops/map":43,"pushdata-bitcoin":98,"safe-buffer":101,"typeforce":112}],55:[function(require,module,exports){
36843 var Buffer = require('safe-buffer').Buffer
36844
36845 function decode (buffer, maxLength, minimal) {
36846 maxLength = maxLength || 4
36847 minimal = minimal === undefined ? true : minimal
36848
36849 var length = buffer.length
36850 if (length === 0) return 0
36851 if (length > maxLength) throw new TypeError('Script number overflow')
36852 if (minimal) {
36853 if ((buffer[length - 1] & 0x7f) === 0) {
36854 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
36855 }
36856 }
36857
36858 // 40-bit
36859 if (length === 5) {
36860 var a = buffer.readUInt32LE(0)
36861 var b = buffer.readUInt8(4)
36862
36863 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
36864 return (b * 0x100000000) + a
36865 }
36866
36867 var result = 0
36868
36869 // 32-bit / 24-bit / 16-bit / 8-bit
36870 for (var i = 0; i < length; ++i) {
36871 result |= buffer[i] << (8 * i)
36872 }
36873
36874 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
36875 return result
36876 }
36877
36878 function scriptNumSize (i) {
36879 return i > 0x7fffffff ? 5
36880 : i > 0x7fffff ? 4
36881 : i > 0x7fff ? 3
36882 : i > 0x7f ? 2
36883 : i > 0x00 ? 1
36884 : 0
36885 }
36886
36887 function encode (number) {
36888 var value = Math.abs(number)
36889 var size = scriptNumSize(value)
36890 var buffer = Buffer.allocUnsafe(size)
36891 var negative = number < 0
36892
36893 for (var i = 0; i < size; ++i) {
36894 buffer.writeUInt8(value & 0xff, i)
36895 value >>= 8
36896 }
36897
36898 if (buffer[size - 1] & 0x80) {
36899 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
36900 } else if (negative) {
36901 buffer[size - 1] |= 0x80
36902 }
36903
36904 return buffer
36905 }
36906
36907 module.exports = {
36908 decode: decode,
36909 encode: encode
36910 }
36911
36912 },{"safe-buffer":101}],56:[function(require,module,exports){
36913 var decompile = require('../script').decompile
36914 var multisig = require('./multisig')
36915 var nullData = require('./nulldata')
36916 var pubKey = require('./pubkey')
36917 var pubKeyHash = require('./pubkeyhash')
36918 var scriptHash = require('./scripthash')
36919 var witnessPubKeyHash = require('./witnesspubkeyhash')
36920 var witnessScriptHash = require('./witnessscripthash')
36921 var witnessCommitment = require('./witnesscommitment')
36922
36923 var types = {
36924 MULTISIG: 'multisig',
36925 NONSTANDARD: 'nonstandard',
36926 NULLDATA: 'nulldata',
36927 P2PK: 'pubkey',
36928 P2PKH: 'pubkeyhash',
36929 P2SH: 'scripthash',
36930 P2WPKH: 'witnesspubkeyhash',
36931 P2WSH: 'witnessscripthash',
36932 WITNESS_COMMITMENT: 'witnesscommitment'
36933 }
36934
36935 function classifyOutput (script) {
36936 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
36937 if (witnessScriptHash.output.check(script)) return types.P2WSH
36938 if (pubKeyHash.output.check(script)) return types.P2PKH
36939 if (scriptHash.output.check(script)) return types.P2SH
36940
36941 // XXX: optimization, below functions .decompile before use
36942 var chunks = decompile(script)
36943 if (multisig.output.check(chunks)) return types.MULTISIG
36944 if (pubKey.output.check(chunks)) return types.P2PK
36945 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
36946 if (nullData.output.check(chunks)) return types.NULLDATA
36947
36948 return types.NONSTANDARD
36949 }
36950
36951 function classifyInput (script, allowIncomplete) {
36952 // XXX: optimization, below functions .decompile before use
36953 var chunks = decompile(script)
36954
36955 if (pubKeyHash.input.check(chunks)) return types.P2PKH
36956 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
36957 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
36958 if (pubKey.input.check(chunks)) return types.P2PK
36959
36960 return types.NONSTANDARD
36961 }
36962
36963 function classifyWitness (script, allowIncomplete) {
36964 // XXX: optimization, below functions .decompile before use
36965 var chunks = decompile(script)
36966
36967 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
36968 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
36969
36970 return types.NONSTANDARD
36971 }
36972
36973 module.exports = {
36974 classifyInput: classifyInput,
36975 classifyOutput: classifyOutput,
36976 classifyWitness: classifyWitness,
36977 multisig: multisig,
36978 nullData: nullData,
36979 pubKey: pubKey,
36980 pubKeyHash: pubKeyHash,
36981 scriptHash: scriptHash,
36982 witnessPubKeyHash: witnessPubKeyHash,
36983 witnessScriptHash: witnessScriptHash,
36984 witnessCommitment: witnessCommitment,
36985 types: types
36986 }
36987
36988 },{"../script":54,"./multisig":57,"./nulldata":60,"./pubkey":61,"./pubkeyhash":64,"./scripthash":67,"./witnesscommitment":70,"./witnesspubkeyhash":72,"./witnessscripthash":75}],57:[function(require,module,exports){
36989 module.exports = {
36990 input: require('./input'),
36991 output: require('./output')
36992 }
36993
36994 },{"./input":58,"./output":59}],58:[function(require,module,exports){
36995 // OP_0 [signatures ...]
36996
36997 var Buffer = require('safe-buffer').Buffer
36998 var bscript = require('../../script')
36999 var p2mso = require('./output')
37000 var typeforce = require('typeforce')
37001 var OPS = require('bitcoin-ops')
37002
37003 function partialSignature (value) {
37004 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
37005 }
37006
37007 function check (script, allowIncomplete) {
37008 var chunks = bscript.decompile(script)
37009 if (chunks.length < 2) return false
37010 if (chunks[0] !== OPS.OP_0) return false
37011
37012 if (allowIncomplete) {
37013 return chunks.slice(1).every(partialSignature)
37014 }
37015
37016 return chunks.slice(1).every(bscript.isCanonicalSignature)
37017 }
37018 check.toJSON = function () { return 'multisig input' }
37019
37020 var EMPTY_BUFFER = Buffer.allocUnsafe(0)
37021
37022 function encodeStack (signatures, scriptPubKey) {
37023 typeforce([partialSignature], signatures)
37024
37025 if (scriptPubKey) {
37026 var scriptData = p2mso.decode(scriptPubKey)
37027
37028 if (signatures.length < scriptData.m) {
37029 throw new TypeError('Not enough signatures provided')
37030 }
37031
37032 if (signatures.length > scriptData.pubKeys.length) {
37033 throw new TypeError('Too many signatures provided')
37034 }
37035 }
37036
37037 return [].concat(EMPTY_BUFFER, signatures.map(function (sig) {
37038 if (sig === OPS.OP_0) {
37039 return EMPTY_BUFFER
37040 }
37041 return sig
37042 }))
37043 }
37044
37045 function encode (signatures, scriptPubKey) {
37046 return bscript.compile(encodeStack(signatures, scriptPubKey))
37047 }
37048
37049 function decodeStack (stack, allowIncomplete) {
37050 typeforce(typeforce.Array, stack)
37051 typeforce(check, stack, allowIncomplete)
37052 return stack.slice(1)
37053 }
37054
37055 function decode (buffer, allowIncomplete) {
37056 var stack = bscript.decompile(buffer)
37057 return decodeStack(stack, allowIncomplete)
37058 }
37059
37060 module.exports = {
37061 check: check,
37062 decode: decode,
37063 decodeStack: decodeStack,
37064 encode: encode,
37065 encodeStack: encodeStack
37066 }
37067
37068 },{"../../script":54,"./output":59,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112}],59:[function(require,module,exports){
37069 // m [pubKeys ...] n OP_CHECKMULTISIG
37070
37071 var bscript = require('../../script')
37072 var types = require('../../types')
37073 var typeforce = require('typeforce')
37074 var OPS = require('bitcoin-ops')
37075 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
37076
37077 function check (script, allowIncomplete) {
37078 var chunks = bscript.decompile(script)
37079
37080 if (chunks.length < 4) return false
37081 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
37082 if (!types.Number(chunks[0])) return false
37083 if (!types.Number(chunks[chunks.length - 2])) return false
37084 var m = chunks[0] - OP_INT_BASE
37085 var n = chunks[chunks.length - 2] - OP_INT_BASE
37086
37087 if (m <= 0) return false
37088 if (n > 16) return false
37089 if (m > n) return false
37090 if (n !== chunks.length - 3) return false
37091 if (allowIncomplete) return true
37092
37093 var keys = chunks.slice(1, -2)
37094 return keys.every(bscript.isCanonicalPubKey)
37095 }
37096 check.toJSON = function () { return 'multi-sig output' }
37097
37098 function encode (m, pubKeys) {
37099 typeforce({
37100 m: types.Number,
37101 pubKeys: [bscript.isCanonicalPubKey]
37102 }, {
37103 m: m,
37104 pubKeys: pubKeys
37105 })
37106
37107 var n = pubKeys.length
37108 if (n < m) throw new TypeError('Not enough pubKeys provided')
37109
37110 return bscript.compile([].concat(
37111 OP_INT_BASE + m,
37112 pubKeys,
37113 OP_INT_BASE + n,
37114 OPS.OP_CHECKMULTISIG
37115 ))
37116 }
37117
37118 function decode (buffer, allowIncomplete) {
37119 var chunks = bscript.decompile(buffer)
37120 typeforce(check, chunks, allowIncomplete)
37121
37122 return {
37123 m: chunks[0] - OP_INT_BASE,
37124 pubKeys: chunks.slice(1, -2)
37125 }
37126 }
37127
37128 module.exports = {
37129 check: check,
37130 decode: decode,
37131 encode: encode
37132 }
37133
37134 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],60:[function(require,module,exports){
37135 // OP_RETURN {data}
37136
37137 var bscript = require('../script')
37138 var types = require('../types')
37139 var typeforce = require('typeforce')
37140 var OPS = require('bitcoin-ops')
37141
37142 function check (script) {
37143 var buffer = bscript.compile(script)
37144
37145 return buffer.length > 1 &&
37146 buffer[0] === OPS.OP_RETURN
37147 }
37148 check.toJSON = function () { return 'null data output' }
37149
37150 function encode (data) {
37151 typeforce(types.Buffer, data)
37152
37153 return bscript.compile([OPS.OP_RETURN, data])
37154 }
37155
37156 function decode (buffer) {
37157 typeforce(check, buffer)
37158
37159 return buffer.slice(2)
37160 }
37161
37162 module.exports = {
37163 output: {
37164 check: check,
37165 decode: decode,
37166 encode: encode
37167 }
37168 }
37169
37170 },{"../script":54,"../types":80,"bitcoin-ops":42,"typeforce":112}],61:[function(require,module,exports){
37171 arguments[4][57][0].apply(exports,arguments)
37172 },{"./input":62,"./output":63,"dup":57}],62:[function(require,module,exports){
37173 // {signature}
37174
37175 var bscript = require('../../script')
37176 var typeforce = require('typeforce')
37177
37178 function check (script) {
37179 var chunks = bscript.decompile(script)
37180
37181 return chunks.length === 1 &&
37182 bscript.isCanonicalSignature(chunks[0])
37183 }
37184 check.toJSON = function () { return 'pubKey input' }
37185
37186 function encodeStack (signature) {
37187 typeforce(bscript.isCanonicalSignature, signature)
37188 return [signature]
37189 }
37190
37191 function encode (signature) {
37192 return bscript.compile(encodeStack(signature))
37193 }
37194
37195 function decodeStack (stack) {
37196 typeforce(typeforce.Array, stack)
37197 typeforce(check, stack)
37198 return stack[0]
37199 }
37200
37201 function decode (buffer) {
37202 var stack = bscript.decompile(buffer)
37203 return decodeStack(stack)
37204 }
37205
37206 module.exports = {
37207 check: check,
37208 decode: decode,
37209 decodeStack: decodeStack,
37210 encode: encode,
37211 encodeStack: encodeStack
37212 }
37213
37214 },{"../../script":54,"typeforce":112}],63:[function(require,module,exports){
37215 // {pubKey} OP_CHECKSIG
37216
37217 var bscript = require('../../script')
37218 var typeforce = require('typeforce')
37219 var OPS = require('bitcoin-ops')
37220
37221 function check (script) {
37222 var chunks = bscript.decompile(script)
37223
37224 return chunks.length === 2 &&
37225 bscript.isCanonicalPubKey(chunks[0]) &&
37226 chunks[1] === OPS.OP_CHECKSIG
37227 }
37228 check.toJSON = function () { return 'pubKey output' }
37229
37230 function encode (pubKey) {
37231 typeforce(bscript.isCanonicalPubKey, pubKey)
37232
37233 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
37234 }
37235
37236 function decode (buffer) {
37237 var chunks = bscript.decompile(buffer)
37238 typeforce(check, chunks)
37239
37240 return chunks[0]
37241 }
37242
37243 module.exports = {
37244 check: check,
37245 decode: decode,
37246 encode: encode
37247 }
37248
37249 },{"../../script":54,"bitcoin-ops":42,"typeforce":112}],64:[function(require,module,exports){
37250 arguments[4][57][0].apply(exports,arguments)
37251 },{"./input":65,"./output":66,"dup":57}],65:[function(require,module,exports){
37252 // {signature} {pubKey}
37253
37254 var bscript = require('../../script')
37255 var typeforce = require('typeforce')
37256
37257 function check (script) {
37258 var chunks = bscript.decompile(script)
37259
37260 return chunks.length === 2 &&
37261 bscript.isCanonicalSignature(chunks[0]) &&
37262 bscript.isCanonicalPubKey(chunks[1])
37263 }
37264 check.toJSON = function () { return 'pubKeyHash input' }
37265
37266 function encodeStack (signature, pubKey) {
37267 typeforce({
37268 signature: bscript.isCanonicalSignature,
37269 pubKey: bscript.isCanonicalPubKey
37270 }, {
37271 signature: signature,
37272 pubKey: pubKey
37273 })
37274
37275 return [signature, pubKey]
37276 }
37277
37278 function encode (signature, pubKey) {
37279 return bscript.compile(encodeStack(signature, pubKey))
37280 }
37281
37282 function decodeStack (stack) {
37283 typeforce(typeforce.Array, stack)
37284 typeforce(check, stack)
37285
37286 return {
37287 signature: stack[0],
37288 pubKey: stack[1]
37289 }
37290 }
37291
37292 function decode (buffer) {
37293 var stack = bscript.decompile(buffer)
37294 return decodeStack(stack)
37295 }
37296
37297 module.exports = {
37298 check: check,
37299 decode: decode,
37300 decodeStack: decodeStack,
37301 encode: encode,
37302 encodeStack: encodeStack
37303 }
37304
37305 },{"../../script":54,"typeforce":112}],66:[function(require,module,exports){
37306 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
37307
37308 var bscript = require('../../script')
37309 var types = require('../../types')
37310 var typeforce = require('typeforce')
37311 var OPS = require('bitcoin-ops')
37312
37313 function check (script) {
37314 var buffer = bscript.compile(script)
37315
37316 return buffer.length === 25 &&
37317 buffer[0] === OPS.OP_DUP &&
37318 buffer[1] === OPS.OP_HASH160 &&
37319 buffer[2] === 0x14 &&
37320 buffer[23] === OPS.OP_EQUALVERIFY &&
37321 buffer[24] === OPS.OP_CHECKSIG
37322 }
37323 check.toJSON = function () { return 'pubKeyHash output' }
37324
37325 function encode (pubKeyHash) {
37326 typeforce(types.Hash160bit, pubKeyHash)
37327
37328 return bscript.compile([
37329 OPS.OP_DUP,
37330 OPS.OP_HASH160,
37331 pubKeyHash,
37332 OPS.OP_EQUALVERIFY,
37333 OPS.OP_CHECKSIG
37334 ])
37335 }
37336
37337 function decode (buffer) {
37338 typeforce(check, buffer)
37339
37340 return buffer.slice(3, 23)
37341 }
37342
37343 module.exports = {
37344 check: check,
37345 decode: decode,
37346 encode: encode
37347 }
37348
37349 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],67:[function(require,module,exports){
37350 arguments[4][57][0].apply(exports,arguments)
37351 },{"./input":68,"./output":69,"dup":57}],68:[function(require,module,exports){
37352 // <scriptSig> {serialized scriptPubKey script}
37353
37354 var Buffer = require('safe-buffer').Buffer
37355 var bscript = require('../../script')
37356 var typeforce = require('typeforce')
37357
37358 var p2ms = require('../multisig/')
37359 var p2pk = require('../pubkey/')
37360 var p2pkh = require('../pubkeyhash/')
37361 var p2wpkho = require('../witnesspubkeyhash/output')
37362 var p2wsho = require('../witnessscripthash/output')
37363
37364 function check (script, allowIncomplete) {
37365 var chunks = bscript.decompile(script)
37366 if (chunks.length < 1) return false
37367
37368 var lastChunk = chunks[chunks.length - 1]
37369 if (!Buffer.isBuffer(lastChunk)) return false
37370
37371 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
37372 var redeemScriptChunks = bscript.decompile(lastChunk)
37373
37374 // is redeemScript a valid script?
37375 if (redeemScriptChunks.length === 0) return false
37376
37377 // is redeemScriptSig push only?
37378 if (!bscript.isPushOnly(scriptSigChunks)) return false
37379
37380 // is witness?
37381 if (chunks.length === 1) {
37382 return p2wsho.check(redeemScriptChunks) ||
37383 p2wpkho.check(redeemScriptChunks)
37384 }
37385
37386 // match types
37387 if (p2pkh.input.check(scriptSigChunks) &&
37388 p2pkh.output.check(redeemScriptChunks)) return true
37389
37390 if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
37391 p2ms.output.check(redeemScriptChunks)) return true
37392
37393 if (p2pk.input.check(scriptSigChunks) &&
37394 p2pk.output.check(redeemScriptChunks)) return true
37395
37396 return false
37397 }
37398 check.toJSON = function () { return 'scriptHash input' }
37399
37400 function encodeStack (redeemScriptStack, redeemScript) {
37401 var serializedScriptPubKey = bscript.compile(redeemScript)
37402
37403 return [].concat(redeemScriptStack, serializedScriptPubKey)
37404 }
37405
37406 function encode (redeemScriptSig, redeemScript) {
37407 var redeemScriptStack = bscript.decompile(redeemScriptSig)
37408
37409 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
37410 }
37411
37412 function decodeStack (stack) {
37413 typeforce(typeforce.Array, stack)
37414 typeforce(check, stack)
37415
37416 return {
37417 redeemScriptStack: stack.slice(0, -1),
37418 redeemScript: stack[stack.length - 1]
37419 }
37420 }
37421
37422 function decode (buffer) {
37423 var stack = bscript.decompile(buffer)
37424 var result = decodeStack(stack)
37425 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
37426 delete result.redeemScriptStack
37427 return result
37428 }
37429
37430 module.exports = {
37431 check: check,
37432 decode: decode,
37433 decodeStack: decodeStack,
37434 encode: encode,
37435 encodeStack: encodeStack
37436 }
37437
37438 },{"../../script":54,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"../witnesspubkeyhash/output":74,"../witnessscripthash/output":77,"safe-buffer":101,"typeforce":112}],69:[function(require,module,exports){
37439 // OP_HASH160 {scriptHash} OP_EQUAL
37440
37441 var bscript = require('../../script')
37442 var types = require('../../types')
37443 var typeforce = require('typeforce')
37444 var OPS = require('bitcoin-ops')
37445
37446 function check (script) {
37447 var buffer = bscript.compile(script)
37448
37449 return buffer.length === 23 &&
37450 buffer[0] === OPS.OP_HASH160 &&
37451 buffer[1] === 0x14 &&
37452 buffer[22] === OPS.OP_EQUAL
37453 }
37454 check.toJSON = function () { return 'scriptHash output' }
37455
37456 function encode (scriptHash) {
37457 typeforce(types.Hash160bit, scriptHash)
37458
37459 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
37460 }
37461
37462 function decode (buffer) {
37463 typeforce(check, buffer)
37464
37465 return buffer.slice(2, 22)
37466 }
37467
37468 module.exports = {
37469 check: check,
37470 decode: decode,
37471 encode: encode
37472 }
37473
37474 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],70:[function(require,module,exports){
37475 module.exports = {
37476 output: require('./output')
37477 }
37478
37479 },{"./output":71}],71:[function(require,module,exports){
37480 // OP_RETURN {aa21a9ed} {commitment}
37481
37482 var Buffer = require('safe-buffer').Buffer
37483 var bscript = require('../../script')
37484 var types = require('../../types')
37485 var typeforce = require('typeforce')
37486 var OPS = require('bitcoin-ops')
37487
37488 var HEADER = Buffer.from('aa21a9ed', 'hex')
37489
37490 function check (script) {
37491 var buffer = bscript.compile(script)
37492
37493 return buffer.length > 37 &&
37494 buffer[0] === OPS.OP_RETURN &&
37495 buffer[1] === 0x24 &&
37496 buffer.slice(2, 6).equals(HEADER)
37497 }
37498
37499 check.toJSON = function () { return 'Witness commitment output' }
37500
37501 function encode (commitment) {
37502 typeforce(types.Hash256bit, commitment)
37503
37504 var buffer = Buffer.allocUnsafe(36)
37505 HEADER.copy(buffer, 0)
37506 commitment.copy(buffer, 4)
37507
37508 return bscript.compile([OPS.OP_RETURN, buffer])
37509 }
37510
37511 function decode (buffer) {
37512 typeforce(check, buffer)
37513
37514 return bscript.decompile(buffer)[1].slice(4, 36)
37515 }
37516
37517 module.exports = {
37518 check: check,
37519 decode: decode,
37520 encode: encode
37521 }
37522
37523 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112}],72:[function(require,module,exports){
37524 arguments[4][57][0].apply(exports,arguments)
37525 },{"./input":73,"./output":74,"dup":57}],73:[function(require,module,exports){
37526 // {signature} {pubKey}
37527
37528 var bscript = require('../../script')
37529 var typeforce = require('typeforce')
37530
37531 function isCompressedCanonicalPubKey (pubKey) {
37532 return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
37533 }
37534
37535 function check (script) {
37536 var chunks = bscript.decompile(script)
37537
37538 return chunks.length === 2 &&
37539 bscript.isCanonicalSignature(chunks[0]) &&
37540 isCompressedCanonicalPubKey(chunks[1])
37541 }
37542 check.toJSON = function () { return 'witnessPubKeyHash input' }
37543
37544 function encodeStack (signature, pubKey) {
37545 typeforce({
37546 signature: bscript.isCanonicalSignature,
37547 pubKey: isCompressedCanonicalPubKey
37548 }, {
37549 signature: signature,
37550 pubKey: pubKey
37551 })
37552
37553 return [signature, pubKey]
37554 }
37555
37556 function decodeStack (stack) {
37557 typeforce(typeforce.Array, stack)
37558 typeforce(check, stack)
37559
37560 return {
37561 signature: stack[0],
37562 pubKey: stack[1]
37563 }
37564 }
37565
37566 module.exports = {
37567 check: check,
37568 decodeStack: decodeStack,
37569 encodeStack: encodeStack
37570 }
37571
37572 },{"../../script":54,"typeforce":112}],74:[function(require,module,exports){
37573 // OP_0 {pubKeyHash}
37574
37575 var bscript = require('../../script')
37576 var types = require('../../types')
37577 var typeforce = require('typeforce')
37578 var OPS = require('bitcoin-ops')
37579
37580 function check (script) {
37581 var buffer = bscript.compile(script)
37582
37583 return buffer.length === 22 &&
37584 buffer[0] === OPS.OP_0 &&
37585 buffer[1] === 0x14
37586 }
37587 check.toJSON = function () { return 'Witness pubKeyHash output' }
37588
37589 function encode (pubKeyHash) {
37590 typeforce(types.Hash160bit, pubKeyHash)
37591
37592 return bscript.compile([OPS.OP_0, pubKeyHash])
37593 }
37594
37595 function decode (buffer) {
37596 typeforce(check, buffer)
37597
37598 return buffer.slice(2)
37599 }
37600
37601 module.exports = {
37602 check: check,
37603 decode: decode,
37604 encode: encode
37605 }
37606
37607 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],75:[function(require,module,exports){
37608 arguments[4][57][0].apply(exports,arguments)
37609 },{"./input":76,"./output":77,"dup":57}],76:[function(require,module,exports){
37610 (function (Buffer){
37611 // <scriptSig> {serialized scriptPubKey script}
37612
37613 var bscript = require('../../script')
37614 var types = require('../../types')
37615 var typeforce = require('typeforce')
37616
37617 var p2ms = require('../multisig/')
37618 var p2pk = require('../pubkey/')
37619 var p2pkh = require('../pubkeyhash/')
37620
37621 function check (chunks, allowIncomplete) {
37622 typeforce(types.Array, chunks)
37623 if (chunks.length < 1) return false
37624
37625 var witnessScript = chunks[chunks.length - 1]
37626 if (!Buffer.isBuffer(witnessScript)) return false
37627
37628 var witnessScriptChunks = bscript.decompile(witnessScript)
37629
37630 // is witnessScript a valid script?
37631 if (witnessScriptChunks.length === 0) return false
37632
37633 var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
37634
37635 // match types
37636 if (p2pkh.input.check(witnessRawScriptSig) &&
37637 p2pkh.output.check(witnessScriptChunks)) return true
37638
37639 if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
37640 p2ms.output.check(witnessScriptChunks)) return true
37641
37642 if (p2pk.input.check(witnessRawScriptSig) &&
37643 p2pk.output.check(witnessScriptChunks)) return true
37644
37645 return false
37646 }
37647 check.toJSON = function () { return 'witnessScriptHash input' }
37648
37649 function encodeStack (witnessData, witnessScript) {
37650 typeforce({
37651 witnessData: [types.Buffer],
37652 witnessScript: types.Buffer
37653 }, {
37654 witnessData: witnessData,
37655 witnessScript: witnessScript
37656 })
37657
37658 return [].concat(witnessData, witnessScript)
37659 }
37660
37661 function decodeStack (stack) {
37662 typeforce(typeforce.Array, stack)
37663 typeforce(check, stack)
37664 return {
37665 witnessData: stack.slice(0, -1),
37666 witnessScript: stack[stack.length - 1]
37667 }
37668 }
37669
37670 module.exports = {
37671 check: check,
37672 decodeStack: decodeStack,
37673 encodeStack: encodeStack
37674 }
37675
37676 }).call(this,{"isBuffer":require("../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37677 },{"../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"../../script":54,"../../types":80,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"typeforce":112}],77:[function(require,module,exports){
37678 // OP_0 {scriptHash}
37679
37680 var bscript = require('../../script')
37681 var types = require('../../types')
37682 var typeforce = require('typeforce')
37683 var OPS = require('bitcoin-ops')
37684
37685 function check (script) {
37686 var buffer = bscript.compile(script)
37687
37688 return buffer.length === 34 &&
37689 buffer[0] === OPS.OP_0 &&
37690 buffer[1] === 0x20
37691 }
37692 check.toJSON = function () { return 'Witness scriptHash output' }
37693
37694 function encode (scriptHash) {
37695 typeforce(types.Hash256bit, scriptHash)
37696
37697 return bscript.compile([OPS.OP_0, scriptHash])
37698 }
37699
37700 function decode (buffer) {
37701 typeforce(check, buffer)
37702
37703 return buffer.slice(2)
37704 }
37705
37706 module.exports = {
37707 check: check,
37708 decode: decode,
37709 encode: encode
37710 }
37711
37712 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],78:[function(require,module,exports){
37713 var Buffer = require('safe-buffer').Buffer
37714 var bcrypto = require('./crypto')
37715 var bscript = require('./script')
37716 var bufferutils = require('./bufferutils')
37717 var opcodes = require('bitcoin-ops')
37718 var typeforce = require('typeforce')
37719 var types = require('./types')
37720 var varuint = require('varuint-bitcoin')
37721
37722 function varSliceSize (someScript) {
37723 var length = someScript.length
37724
37725 return varuint.encodingLength(length) + length
37726 }
37727
37728 function vectorSize (someVector) {
37729 var length = someVector.length
37730
37731 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
37732 return sum + varSliceSize(witness)
37733 }, 0)
37734 }
37735
37736 function Transaction () {
37737 this.version = 1
37738 this.locktime = 0
37739 this.ins = []
37740 this.outs = []
37741 }
37742
37743 Transaction.DEFAULT_SEQUENCE = 0xffffffff
37744 Transaction.SIGHASH_ALL = 0x01
37745 Transaction.SIGHASH_NONE = 0x02
37746 Transaction.SIGHASH_SINGLE = 0x03
37747 Transaction.SIGHASH_ANYONECANPAY = 0x80
37748 Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
37749 Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
37750
37751 var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
37752 var EMPTY_WITNESS = []
37753 var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
37754 var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
37755 var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
37756 var BLANK_OUTPUT = {
37757 script: EMPTY_SCRIPT,
37758 valueBuffer: VALUE_UINT64_MAX
37759 }
37760
37761 Transaction.fromBuffer = function (buffer, __noStrict) {
37762 var offset = 0
37763 function readSlice (n) {
37764 offset += n
37765 return buffer.slice(offset - n, offset)
37766 }
37767
37768 function readUInt32 () {
37769 var i = buffer.readUInt32LE(offset)
37770 offset += 4
37771 return i
37772 }
37773
37774 function readInt32 () {
37775 var i = buffer.readInt32LE(offset)
37776 offset += 4
37777 return i
37778 }
37779
37780 function readUInt64 () {
37781 var i = bufferutils.readUInt64LE(buffer, offset)
37782 offset += 8
37783 return i
37784 }
37785
37786 function readVarInt () {
37787 var vi = varuint.decode(buffer, offset)
37788 offset += varuint.decode.bytes
37789 return vi
37790 }
37791
37792 function readVarSlice () {
37793 return readSlice(readVarInt())
37794 }
37795
37796 function readVector () {
37797 var count = readVarInt()
37798 var vector = []
37799 for (var i = 0; i < count; i++) vector.push(readVarSlice())
37800 return vector
37801 }
37802
37803 var tx = new Transaction()
37804 tx.version = readInt32()
37805
37806 var marker = buffer.readUInt8(offset)
37807 var flag = buffer.readUInt8(offset + 1)
37808
37809 var hasWitnesses = false
37810 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
37811 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
37812 offset += 2
37813 hasWitnesses = true
37814 }
37815
37816 var vinLen = readVarInt()
37817 for (var i = 0; i < vinLen; ++i) {
37818 tx.ins.push({
37819 hash: readSlice(32),
37820 index: readUInt32(),
37821 script: readVarSlice(),
37822 sequence: readUInt32(),
37823 witness: EMPTY_WITNESS
37824 })
37825 }
37826
37827 var voutLen = readVarInt()
37828 for (i = 0; i < voutLen; ++i) {
37829 tx.outs.push({
37830 value: readUInt64(),
37831 script: readVarSlice()
37832 })
37833 }
37834
37835 if (hasWitnesses) {
37836 for (i = 0; i < vinLen; ++i) {
37837 tx.ins[i].witness = readVector()
37838 }
37839
37840 // was this pointless?
37841 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
37842 }
37843
37844 tx.locktime = readUInt32()
37845
37846 if (__noStrict) return tx
37847 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
37848
37849 return tx
37850 }
37851
37852 Transaction.fromHex = function (hex) {
37853 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
37854 }
37855
37856 Transaction.isCoinbaseHash = function (buffer) {
37857 typeforce(types.Hash256bit, buffer)
37858 for (var i = 0; i < 32; ++i) {
37859 if (buffer[i] !== 0) return false
37860 }
37861 return true
37862 }
37863
37864 Transaction.prototype.isCoinbase = function () {
37865 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
37866 }
37867
37868 Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
37869 typeforce(types.tuple(
37870 types.Hash256bit,
37871 types.UInt32,
37872 types.maybe(types.UInt32),
37873 types.maybe(types.Buffer)
37874 ), arguments)
37875
37876 if (types.Null(sequence)) {
37877 sequence = Transaction.DEFAULT_SEQUENCE
37878 }
37879
37880 // Add the input and return the input's index
37881 return (this.ins.push({
37882 hash: hash,
37883 index: index,
37884 script: scriptSig || EMPTY_SCRIPT,
37885 sequence: sequence,
37886 witness: EMPTY_WITNESS
37887 }) - 1)
37888 }
37889
37890 Transaction.prototype.addOutput = function (scriptPubKey, value) {
37891 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
37892
37893 // Add the output and return the output's index
37894 return (this.outs.push({
37895 script: scriptPubKey,
37896 value: value
37897 }) - 1)
37898 }
37899
37900 Transaction.prototype.hasWitnesses = function () {
37901 return this.ins.some(function (x) {
37902 return x.witness.length !== 0
37903 })
37904 }
37905
37906 Transaction.prototype.weight = function () {
37907 var base = this.__byteLength(false)
37908 var total = this.__byteLength(true)
37909 return base * 3 + total
37910 }
37911
37912 Transaction.prototype.virtualSize = function () {
37913 return Math.ceil(this.weight() / 4)
37914 }
37915
37916 Transaction.prototype.byteLength = function () {
37917 return this.__byteLength(true)
37918 }
37919
37920 Transaction.prototype.__byteLength = function (__allowWitness) {
37921 var hasWitnesses = __allowWitness && this.hasWitnesses()
37922
37923 return (
37924 (hasWitnesses ? 10 : 8) +
37925 varuint.encodingLength(this.ins.length) +
37926 varuint.encodingLength(this.outs.length) +
37927 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
37928 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
37929 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
37930 )
37931 }
37932
37933 Transaction.prototype.clone = function () {
37934 var newTx = new Transaction()
37935 newTx.version = this.version
37936 newTx.locktime = this.locktime
37937
37938 newTx.ins = this.ins.map(function (txIn) {
37939 return {
37940 hash: txIn.hash,
37941 index: txIn.index,
37942 script: txIn.script,
37943 sequence: txIn.sequence,
37944 witness: txIn.witness
37945 }
37946 })
37947
37948 newTx.outs = this.outs.map(function (txOut) {
37949 return {
37950 script: txOut.script,
37951 value: txOut.value
37952 }
37953 })
37954
37955 return newTx
37956 }
37957
37958 /**
37959 * Hash transaction for signing a specific input.
37960 *
37961 * Bitcoin uses a different hash for each signed transaction input.
37962 * This method copies the transaction, makes the necessary changes based on the
37963 * hashType, and then hashes the result.
37964 * This hash can then be used to sign the provided transaction input.
37965 */
37966 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
37967 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
37968
37969 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
37970 if (inIndex >= this.ins.length) return ONE
37971
37972 // ignore OP_CODESEPARATOR
37973 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
37974 return x !== opcodes.OP_CODESEPARATOR
37975 }))
37976
37977 var txTmp = this.clone()
37978
37979 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
37980 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
37981 txTmp.outs = []
37982
37983 // ignore sequence numbers (except at inIndex)
37984 txTmp.ins.forEach(function (input, i) {
37985 if (i === inIndex) return
37986
37987 input.sequence = 0
37988 })
37989
37990 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
37991 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
37992 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
37993 if (inIndex >= this.outs.length) return ONE
37994
37995 // truncate outputs after
37996 txTmp.outs.length = inIndex + 1
37997
37998 // "blank" outputs before
37999 for (var i = 0; i < inIndex; i++) {
38000 txTmp.outs[i] = BLANK_OUTPUT
38001 }
38002
38003 // ignore sequence numbers (except at inIndex)
38004 txTmp.ins.forEach(function (input, y) {
38005 if (y === inIndex) return
38006
38007 input.sequence = 0
38008 })
38009 }
38010
38011 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
38012 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
38013 txTmp.ins = [txTmp.ins[inIndex]]
38014 txTmp.ins[0].script = ourScript
38015
38016 // SIGHASH_ALL: only ignore input scripts
38017 } else {
38018 // "blank" others input scripts
38019 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
38020 txTmp.ins[inIndex].script = ourScript
38021 }
38022
38023 // serialize and hash
38024 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
38025 buffer.writeInt32LE(hashType, buffer.length - 4)
38026 txTmp.__toBuffer(buffer, 0, false)
38027
38028 return bcrypto.hash256(buffer)
38029 }
38030
38031 Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
38032 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
38033
38034 var tbuffer, toffset
38035 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
38036 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
38037 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
38038 function writeVarInt (i) {
38039 varuint.encode(i, tbuffer, toffset)
38040 toffset += varuint.encode.bytes
38041 }
38042 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38043
38044 var hashOutputs = ZERO
38045 var hashPrevouts = ZERO
38046 var hashSequence = ZERO
38047
38048 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
38049 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
38050 toffset = 0
38051
38052 this.ins.forEach(function (txIn) {
38053 writeSlice(txIn.hash)
38054 writeUInt32(txIn.index)
38055 })
38056
38057 hashPrevouts = bcrypto.hash256(tbuffer)
38058 }
38059
38060 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
38061 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38062 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38063 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
38064 toffset = 0
38065
38066 this.ins.forEach(function (txIn) {
38067 writeUInt32(txIn.sequence)
38068 })
38069
38070 hashSequence = bcrypto.hash256(tbuffer)
38071 }
38072
38073 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38074 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38075 var txOutsSize = this.outs.reduce(function (sum, output) {
38076 return sum + 8 + varSliceSize(output.script)
38077 }, 0)
38078
38079 tbuffer = Buffer.allocUnsafe(txOutsSize)
38080 toffset = 0
38081
38082 this.outs.forEach(function (out) {
38083 writeUInt64(out.value)
38084 writeVarSlice(out.script)
38085 })
38086
38087 hashOutputs = bcrypto.hash256(tbuffer)
38088 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
38089 var output = this.outs[inIndex]
38090
38091 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
38092 toffset = 0
38093 writeUInt64(output.value)
38094 writeVarSlice(output.script)
38095
38096 hashOutputs = bcrypto.hash256(tbuffer)
38097 }
38098
38099 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
38100 toffset = 0
38101
38102 var input = this.ins[inIndex]
38103 writeUInt32(this.version)
38104 writeSlice(hashPrevouts)
38105 writeSlice(hashSequence)
38106 writeSlice(input.hash)
38107 writeUInt32(input.index)
38108 writeVarSlice(prevOutScript)
38109 writeUInt64(value)
38110 writeUInt32(input.sequence)
38111 writeSlice(hashOutputs)
38112 writeUInt32(this.locktime)
38113 writeUInt32(hashType)
38114 return bcrypto.hash256(tbuffer)
38115 }
38116
38117 Transaction.prototype.getHash = function () {
38118 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
38119 }
38120
38121 Transaction.prototype.getId = function () {
38122 // transaction hash's are displayed in reverse order
38123 return this.getHash().reverse().toString('hex')
38124 }
38125
38126 Transaction.prototype.toBuffer = function (buffer, initialOffset) {
38127 return this.__toBuffer(buffer, initialOffset, true)
38128 }
38129
38130 Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
38131 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
38132
38133 var offset = initialOffset || 0
38134 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
38135 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
38136 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
38137 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
38138 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
38139 function writeVarInt (i) {
38140 varuint.encode(i, buffer, offset)
38141 offset += varuint.encode.bytes
38142 }
38143 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38144 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
38145
38146 writeInt32(this.version)
38147
38148 var hasWitnesses = __allowWitness && this.hasWitnesses()
38149
38150 if (hasWitnesses) {
38151 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
38152 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
38153 }
38154
38155 writeVarInt(this.ins.length)
38156
38157 this.ins.forEach(function (txIn) {
38158 writeSlice(txIn.hash)
38159 writeUInt32(txIn.index)
38160 writeVarSlice(txIn.script)
38161 writeUInt32(txIn.sequence)
38162 })
38163
38164 writeVarInt(this.outs.length)
38165 this.outs.forEach(function (txOut) {
38166 if (!txOut.valueBuffer) {
38167 writeUInt64(txOut.value)
38168 } else {
38169 writeSlice(txOut.valueBuffer)
38170 }
38171
38172 writeVarSlice(txOut.script)
38173 })
38174
38175 if (hasWitnesses) {
38176 this.ins.forEach(function (input) {
38177 writeVector(input.witness)
38178 })
38179 }
38180
38181 writeUInt32(this.locktime)
38182
38183 // avoid slicing unless necessary
38184 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
38185 return buffer
38186 }
38187
38188 Transaction.prototype.toHex = function () {
38189 return this.toBuffer().toString('hex')
38190 }
38191
38192 Transaction.prototype.setInputScript = function (index, scriptSig) {
38193 typeforce(types.tuple(types.Number, types.Buffer), arguments)
38194
38195 this.ins[index].script = scriptSig
38196 }
38197
38198 Transaction.prototype.setWitness = function (index, witness) {
38199 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
38200
38201 this.ins[index].witness = witness
38202 }
38203
38204 module.exports = Transaction
38205
38206 },{"./bufferutils":46,"./crypto":47,"./script":54,"./types":80,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112,"varuint-bitcoin":114}],79:[function(require,module,exports){
38207 var Buffer = require('safe-buffer').Buffer
38208 var baddress = require('./address')
38209 var bcrypto = require('./crypto')
38210 var bscript = require('./script')
38211 var btemplates = require('./templates')
38212 var networks = require('./networks')
38213 var ops = require('bitcoin-ops')
38214 var typeforce = require('typeforce')
38215 var types = require('./types')
38216 var scriptTypes = btemplates.types
38217 var SIGNABLE = [btemplates.types.P2PKH, btemplates.types.P2PK, btemplates.types.MULTISIG]
38218 var P2SH = SIGNABLE.concat([btemplates.types.P2WPKH, btemplates.types.P2WSH])
38219
38220 var ECPair = require('./ecpair')
38221 var ECSignature = require('./ecsignature')
38222 var Transaction = require('./transaction')
38223
38224 function supportedType (type) {
38225 return SIGNABLE.indexOf(type) !== -1
38226 }
38227
38228 function supportedP2SHType (type) {
38229 return P2SH.indexOf(type) !== -1
38230 }
38231
38232 function extractChunks (type, chunks, script) {
38233 var pubKeys = []
38234 var signatures = []
38235 switch (type) {
38236 case scriptTypes.P2PKH:
38237 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
38238 pubKeys = chunks.slice(1)
38239 signatures = chunks.slice(0, 1)
38240 break
38241
38242 case scriptTypes.P2PK:
38243 pubKeys[0] = script ? btemplates.pubKey.output.decode(script) : undefined
38244 signatures = chunks.slice(0, 1)
38245 break
38246
38247 case scriptTypes.MULTISIG:
38248 if (script) {
38249 var multisig = btemplates.multisig.output.decode(script)
38250 pubKeys = multisig.pubKeys
38251 }
38252
38253 signatures = chunks.slice(1).map(function (chunk) {
38254 return chunk.length === 0 ? undefined : chunk
38255 })
38256 break
38257 }
38258
38259 return {
38260 pubKeys: pubKeys,
38261 signatures: signatures
38262 }
38263 }
38264 function expandInput (scriptSig, witnessStack) {
38265 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
38266
38267 var prevOutScript
38268 var prevOutType
38269 var scriptType
38270 var script
38271 var redeemScript
38272 var witnessScript
38273 var witnessScriptType
38274 var redeemScriptType
38275 var witness = false
38276 var p2wsh = false
38277 var p2sh = false
38278 var witnessProgram
38279 var chunks
38280
38281 var scriptSigChunks = bscript.decompile(scriptSig)
38282 var sigType = btemplates.classifyInput(scriptSigChunks, true)
38283 if (sigType === scriptTypes.P2SH) {
38284 p2sh = true
38285 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
38286 redeemScriptType = btemplates.classifyOutput(redeemScript)
38287 prevOutScript = btemplates.scriptHash.output.encode(bcrypto.hash160(redeemScript))
38288 prevOutType = scriptTypes.P2SH
38289 script = redeemScript
38290 }
38291
38292 var classifyWitness = btemplates.classifyWitness(witnessStack, true)
38293 if (classifyWitness === scriptTypes.P2WSH) {
38294 witnessScript = witnessStack[witnessStack.length - 1]
38295 witnessScriptType = btemplates.classifyOutput(witnessScript)
38296 p2wsh = true
38297 witness = true
38298 if (scriptSig.length === 0) {
38299 prevOutScript = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38300 prevOutType = scriptTypes.P2WSH
38301 if (redeemScript !== undefined) {
38302 throw new Error('Redeem script given when unnecessary')
38303 }
38304 // bare witness
38305 } else {
38306 if (!redeemScript) {
38307 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
38308 }
38309 witnessProgram = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38310 if (!redeemScript.equals(witnessProgram)) {
38311 throw new Error('Redeem script didn\'t match witnessScript')
38312 }
38313 }
38314
38315 if (!supportedType(btemplates.classifyOutput(witnessScript))) {
38316 throw new Error('unsupported witness script')
38317 }
38318
38319 script = witnessScript
38320 scriptType = witnessScriptType
38321 chunks = witnessStack.slice(0, -1)
38322 } else if (classifyWitness === scriptTypes.P2WPKH) {
38323 witness = true
38324 var key = witnessStack[witnessStack.length - 1]
38325 var keyHash = bcrypto.hash160(key)
38326 if (scriptSig.length === 0) {
38327 prevOutScript = btemplates.witnessPubKeyHash.output.encode(keyHash)
38328 prevOutType = scriptTypes.P2WPKH
38329 if (typeof redeemScript !== 'undefined') {
38330 throw new Error('Redeem script given when unnecessary')
38331 }
38332 } else {
38333 if (!redeemScript) {
38334 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
38335 }
38336 witnessProgram = btemplates.witnessPubKeyHash.output.encode(keyHash)
38337 if (!redeemScript.equals(witnessProgram)) {
38338 throw new Error('Redeem script did not have the right witness program')
38339 }
38340 }
38341
38342 scriptType = scriptTypes.P2PKH
38343 chunks = witnessStack
38344 } else if (redeemScript) {
38345 if (!supportedP2SHType(redeemScriptType)) {
38346 throw new Error('Bad redeemscript!')
38347 }
38348
38349 script = redeemScript
38350 scriptType = redeemScriptType
38351 chunks = scriptSigChunks.slice(0, -1)
38352 } else {
38353 prevOutType = scriptType = btemplates.classifyInput(scriptSig)
38354 chunks = scriptSigChunks
38355 }
38356
38357 var expanded = extractChunks(scriptType, chunks, script)
38358
38359 var result = {
38360 pubKeys: expanded.pubKeys,
38361 signatures: expanded.signatures,
38362 prevOutScript: prevOutScript,
38363 prevOutType: prevOutType,
38364 signType: scriptType,
38365 signScript: script,
38366 witness: Boolean(witness)
38367 }
38368
38369 if (p2sh) {
38370 result.redeemScript = redeemScript
38371 result.redeemScriptType = redeemScriptType
38372 }
38373
38374 if (p2wsh) {
38375 result.witnessScript = witnessScript
38376 result.witnessScriptType = witnessScriptType
38377 }
38378
38379 return result
38380 }
38381
38382 // could be done in expandInput, but requires the original Transaction for hashForSignature
38383 function fixMultisigOrder (input, transaction, vin) {
38384 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
38385 if (input.pubKeys.length === input.signatures.length) return
38386
38387 var unmatched = input.signatures.concat()
38388
38389 input.signatures = input.pubKeys.map(function (pubKey) {
38390 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
38391 var match
38392
38393 // check for a signature
38394 unmatched.some(function (signature, i) {
38395 // skip if undefined || OP_0
38396 if (!signature) return false
38397
38398 // TODO: avoid O(n) hashForSignature
38399 var parsed = ECSignature.parseScriptSignature(signature)
38400 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
38401
38402 // skip if signature does not match pubKey
38403 if (!keyPair.verify(hash, parsed.signature)) return false
38404
38405 // remove matched signature from unmatched
38406 unmatched[i] = undefined
38407 match = signature
38408
38409 return true
38410 })
38411
38412 return match
38413 })
38414 }
38415
38416 function expandOutput (script, scriptType, ourPubKey) {
38417 typeforce(types.Buffer, script)
38418
38419 var scriptChunks = bscript.decompile(script)
38420 if (!scriptType) {
38421 scriptType = btemplates.classifyOutput(script)
38422 }
38423
38424 var pubKeys = []
38425
38426 switch (scriptType) {
38427 // does our hash160(pubKey) match the output scripts?
38428 case scriptTypes.P2PKH:
38429 if (!ourPubKey) break
38430
38431 var pkh1 = scriptChunks[2]
38432 var pkh2 = bcrypto.hash160(ourPubKey)
38433 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
38434 break
38435
38436 // does our hash160(pubKey) match the output scripts?
38437 case scriptTypes.P2WPKH:
38438 if (!ourPubKey) break
38439
38440 var wpkh1 = scriptChunks[1]
38441 var wpkh2 = bcrypto.hash160(ourPubKey)
38442 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
38443 break
38444
38445 case scriptTypes.P2PK:
38446 pubKeys = scriptChunks.slice(0, 1)
38447 break
38448
38449 case scriptTypes.MULTISIG:
38450 pubKeys = scriptChunks.slice(1, -2)
38451 break
38452
38453 default: return { scriptType: scriptType }
38454 }
38455
38456 return {
38457 pubKeys: pubKeys,
38458 scriptType: scriptType,
38459 signatures: pubKeys.map(function () { return undefined })
38460 }
38461 }
38462
38463 function checkP2SHInput (input, redeemScriptHash) {
38464 if (input.prevOutType) {
38465 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
38466
38467 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
38468 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
38469 }
38470 }
38471
38472 function checkP2WSHInput (input, witnessScriptHash) {
38473 if (input.prevOutType) {
38474 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
38475
38476 var scriptHash = bscript.decompile(input.prevOutScript)[1]
38477 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
38478 }
38479 }
38480
38481 function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
38482 var expanded
38483 var prevOutType
38484 var prevOutScript
38485
38486 var p2sh = false
38487 var p2shType
38488 var redeemScriptHash
38489
38490 var witness = false
38491 var p2wsh = false
38492 var witnessType
38493 var witnessScriptHash
38494
38495 var signType
38496 var signScript
38497
38498 if (redeemScript && witnessScript) {
38499 redeemScriptHash = bcrypto.hash160(redeemScript)
38500 witnessScriptHash = bcrypto.sha256(witnessScript)
38501 checkP2SHInput(input, redeemScriptHash)
38502
38503 if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
38504
38505 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38506 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38507
38508 prevOutType = btemplates.types.P2SH
38509 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38510 p2sh = witness = p2wsh = true
38511 p2shType = btemplates.types.P2WSH
38512 signType = witnessType = expanded.scriptType
38513 signScript = witnessScript
38514 } else if (redeemScript) {
38515 redeemScriptHash = bcrypto.hash160(redeemScript)
38516 checkP2SHInput(input, redeemScriptHash)
38517
38518 expanded = expandOutput(redeemScript, undefined, kpPubKey)
38519 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
38520
38521 prevOutType = btemplates.types.P2SH
38522 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38523 p2sh = true
38524 signType = p2shType = expanded.scriptType
38525 signScript = redeemScript
38526 witness = signType === btemplates.types.P2WPKH
38527 } else if (witnessScript) {
38528 witnessScriptHash = bcrypto.sha256(witnessScript)
38529 checkP2WSHInput(input, witnessScriptHash)
38530
38531 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38532 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38533
38534 prevOutType = btemplates.types.P2WSH
38535 prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash)
38536 witness = p2wsh = true
38537 signType = witnessType = expanded.scriptType
38538 signScript = witnessScript
38539 } else if (input.prevOutType) {
38540 // embedded scripts are not possible without a redeemScript
38541 if (input.prevOutType === scriptTypes.P2SH ||
38542 input.prevOutType === scriptTypes.P2WSH) {
38543 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
38544 }
38545
38546 prevOutType = input.prevOutType
38547 prevOutScript = input.prevOutScript
38548 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
38549 if (!expanded.pubKeys) return
38550
38551 witness = (input.prevOutType === scriptTypes.P2WPKH)
38552 signType = prevOutType
38553 signScript = prevOutScript
38554 } else {
38555 prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
38556 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
38557
38558 prevOutType = scriptTypes.P2PKH
38559 witness = false
38560 signType = prevOutType
38561 signScript = prevOutScript
38562 }
38563
38564 if (signType === scriptTypes.P2WPKH) {
38565 signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
38566 }
38567
38568 if (p2sh) {
38569 input.redeemScript = redeemScript
38570 input.redeemScriptType = p2shType
38571 }
38572
38573 if (p2wsh) {
38574 input.witnessScript = witnessScript
38575 input.witnessScriptType = witnessType
38576 }
38577
38578 input.pubKeys = expanded.pubKeys
38579 input.signatures = expanded.signatures
38580 input.signScript = signScript
38581 input.signType = signType
38582 input.prevOutScript = prevOutScript
38583 input.prevOutType = prevOutType
38584 input.witness = witness
38585 }
38586
38587 function buildStack (type, signatures, pubKeys, allowIncomplete) {
38588 if (type === scriptTypes.P2PKH) {
38589 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return btemplates.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
38590 } else if (type === scriptTypes.P2PK) {
38591 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return btemplates.pubKey.input.encodeStack(signatures[0])
38592 } else if (type === scriptTypes.MULTISIG) {
38593 if (signatures.length > 0) {
38594 signatures = signatures.map(function (signature) {
38595 return signature || ops.OP_0
38596 })
38597 if (!allowIncomplete) {
38598 // remove blank signatures
38599 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
38600 }
38601
38602 return btemplates.multisig.input.encodeStack(signatures)
38603 }
38604 } else {
38605 throw new Error('Not yet supported')
38606 }
38607
38608 if (!allowIncomplete) throw new Error('Not enough signatures provided')
38609 return []
38610 }
38611
38612 function buildInput (input, allowIncomplete) {
38613 var scriptType = input.prevOutType
38614 var sig = []
38615 var witness = []
38616
38617 if (supportedType(scriptType)) {
38618 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
38619 }
38620
38621 var p2sh = false
38622 if (scriptType === btemplates.types.P2SH) {
38623 // We can remove this error later when we have a guarantee prepareInput
38624 // rejects unsignable scripts - it MUST be signable at this point.
38625 if (!allowIncomplete && !supportedP2SHType(input.redeemScriptType)) {
38626 throw new Error('Impossible to sign this type')
38627 }
38628
38629 if (supportedType(input.redeemScriptType)) {
38630 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
38631 }
38632
38633 // If it wasn't SIGNABLE, it's witness, defer to that
38634 if (input.redeemScriptType) {
38635 p2sh = true
38636 scriptType = input.redeemScriptType
38637 }
38638 }
38639
38640 switch (scriptType) {
38641 // P2WPKH is a special case of P2PKH
38642 case btemplates.types.P2WPKH:
38643 witness = buildStack(btemplates.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
38644 break
38645
38646 case btemplates.types.P2WSH:
38647 // We can remove this check later
38648 if (!allowIncomplete && !supportedType(input.witnessScriptType)) {
38649 throw new Error('Impossible to sign this type')
38650 }
38651
38652 if (supportedType(input.witnessScriptType)) {
38653 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
38654 witness.push(input.witnessScript)
38655 scriptType = input.witnessScriptType
38656 }
38657
38658 break
38659 }
38660
38661 // append redeemScript if necessary
38662 if (p2sh) {
38663 sig.push(input.redeemScript)
38664 }
38665
38666 return {
38667 type: scriptType,
38668 script: bscript.compile(sig),
38669 witness: witness
38670 }
38671 }
38672
38673 function TransactionBuilder (network, maximumFeeRate) {
38674 this.prevTxMap = {}
38675 this.network = network || networks.bitcoin
38676
38677 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
38678 this.maximumFeeRate = maximumFeeRate || 2500
38679
38680 this.inputs = []
38681 this.tx = new Transaction()
38682 }
38683
38684 TransactionBuilder.prototype.setLockTime = function (locktime) {
38685 typeforce(types.UInt32, locktime)
38686
38687 // if any signatures exist, throw
38688 if (this.inputs.some(function (input) {
38689 if (!input.signatures) return false
38690
38691 return input.signatures.some(function (s) { return s })
38692 })) {
38693 throw new Error('No, this would invalidate signatures')
38694 }
38695
38696 this.tx.locktime = locktime
38697 }
38698
38699 TransactionBuilder.prototype.setVersion = function (version) {
38700 typeforce(types.UInt32, version)
38701
38702 // XXX: this might eventually become more complex depending on what the versions represent
38703 this.tx.version = version
38704 }
38705
38706 TransactionBuilder.fromTransaction = function (transaction, network) {
38707 var txb = new TransactionBuilder(network)
38708
38709 // Copy transaction fields
38710 txb.setVersion(transaction.version)
38711 txb.setLockTime(transaction.locktime)
38712
38713 // Copy outputs (done first to avoid signature invalidation)
38714 transaction.outs.forEach(function (txOut) {
38715 txb.addOutput(txOut.script, txOut.value)
38716 })
38717
38718 // Copy inputs
38719 transaction.ins.forEach(function (txIn) {
38720 txb.__addInputUnsafe(txIn.hash, txIn.index, {
38721 sequence: txIn.sequence,
38722 script: txIn.script,
38723 witness: txIn.witness
38724 })
38725 })
38726
38727 // fix some things not possible through the public API
38728 txb.inputs.forEach(function (input, i) {
38729 fixMultisigOrder(input, transaction, i)
38730 })
38731
38732 return txb
38733 }
38734
38735 TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
38736 if (!this.__canModifyInputs()) {
38737 throw new Error('No, this would invalidate signatures')
38738 }
38739
38740 var value
38741
38742 // is it a hex string?
38743 if (typeof txHash === 'string') {
38744 // transaction hashs's are displayed in reverse order, un-reverse it
38745 txHash = Buffer.from(txHash, 'hex').reverse()
38746
38747 // is it a Transaction object?
38748 } else if (txHash instanceof Transaction) {
38749 var txOut = txHash.outs[vout]
38750 prevOutScript = txOut.script
38751 value = txOut.value
38752
38753 txHash = txHash.getHash()
38754 }
38755
38756 return this.__addInputUnsafe(txHash, vout, {
38757 sequence: sequence,
38758 prevOutScript: prevOutScript,
38759 value: value
38760 })
38761 }
38762
38763 TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
38764 if (Transaction.isCoinbaseHash(txHash)) {
38765 throw new Error('coinbase inputs not supported')
38766 }
38767
38768 var prevTxOut = txHash.toString('hex') + ':' + vout
38769 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
38770
38771 var input = {}
38772
38773 // derive what we can from the scriptSig
38774 if (options.script !== undefined) {
38775 input = expandInput(options.script, options.witness || [])
38776 }
38777
38778 // if an input value was given, retain it
38779 if (options.value !== undefined) {
38780 input.value = options.value
38781 }
38782
38783 // derive what we can from the previous transactions output script
38784 if (!input.prevOutScript && options.prevOutScript) {
38785 var prevOutType
38786
38787 if (!input.pubKeys && !input.signatures) {
38788 var expanded = expandOutput(options.prevOutScript)
38789
38790 if (expanded.pubKeys) {
38791 input.pubKeys = expanded.pubKeys
38792 input.signatures = expanded.signatures
38793 }
38794
38795 prevOutType = expanded.scriptType
38796 }
38797
38798 input.prevOutScript = options.prevOutScript
38799 input.prevOutType = prevOutType || btemplates.classifyOutput(options.prevOutScript)
38800 }
38801
38802 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
38803 this.inputs[vin] = input
38804 this.prevTxMap[prevTxOut] = vin
38805 return vin
38806 }
38807
38808 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
38809 if (!this.__canModifyOutputs()) {
38810 throw new Error('No, this would invalidate signatures')
38811 }
38812
38813 // Attempt to get a script if it's a base58 address string
38814 if (typeof scriptPubKey === 'string') {
38815 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
38816 }
38817
38818 return this.tx.addOutput(scriptPubKey, value)
38819 }
38820
38821 TransactionBuilder.prototype.build = function () {
38822 return this.__build(false)
38823 }
38824 TransactionBuilder.prototype.buildIncomplete = function () {
38825 return this.__build(true)
38826 }
38827
38828 TransactionBuilder.prototype.__build = function (allowIncomplete) {
38829 if (!allowIncomplete) {
38830 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
38831 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
38832 }
38833
38834 var tx = this.tx.clone()
38835 // Create script signatures from inputs
38836 this.inputs.forEach(function (input, i) {
38837 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
38838 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
38839 var result = buildInput(input, allowIncomplete)
38840
38841 // skip if no result
38842 if (!allowIncomplete) {
38843 if (!supportedType(result.type) && result.type !== btemplates.types.P2WPKH) {
38844 throw new Error(result.type + ' not supported')
38845 }
38846 }
38847
38848 tx.setInputScript(i, result.script)
38849 tx.setWitness(i, result.witness)
38850 })
38851
38852 if (!allowIncomplete) {
38853 // do not rely on this, its merely a last resort
38854 if (this.__overMaximumFees(tx.virtualSize())) {
38855 throw new Error('Transaction has absurd fees')
38856 }
38857 }
38858
38859 return tx
38860 }
38861
38862 function canSign (input) {
38863 return input.prevOutScript !== undefined &&
38864 input.signScript !== undefined &&
38865 input.pubKeys !== undefined &&
38866 input.signatures !== undefined &&
38867 input.signatures.length === input.pubKeys.length &&
38868 input.pubKeys.length > 0 &&
38869 (
38870 input.witness === false ||
38871 (input.witness === true && input.value !== undefined)
38872 )
38873 }
38874
38875 TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
38876 // TODO: remove keyPair.network matching in 4.0.0
38877 if (keyPair.network && keyPair.network !== this.network) throw new TypeError('Inconsistent network')
38878 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
38879 hashType = hashType || Transaction.SIGHASH_ALL
38880
38881 var input = this.inputs[vin]
38882
38883 // if redeemScript was previously provided, enforce consistency
38884 if (input.redeemScript !== undefined &&
38885 redeemScript &&
38886 !input.redeemScript.equals(redeemScript)) {
38887 throw new Error('Inconsistent redeemScript')
38888 }
38889
38890 var kpPubKey = keyPair.publicKey || keyPair.getPublicKeyBuffer()
38891 if (!canSign(input)) {
38892 if (witnessValue !== undefined) {
38893 if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
38894 typeforce(types.Satoshi, witnessValue)
38895 input.value = witnessValue
38896 }
38897
38898 if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
38899 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
38900 }
38901
38902 // ready to sign
38903 var signatureHash
38904 if (input.witness) {
38905 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, input.value, hashType)
38906 } else {
38907 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
38908 }
38909
38910 // enforce in order signing of public keys
38911 var signed = input.pubKeys.some(function (pubKey, i) {
38912 if (!kpPubKey.equals(pubKey)) return false
38913 if (input.signatures[i]) throw new Error('Signature already exists')
38914 if (kpPubKey.length !== 33 &&
38915 input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH')
38916
38917 var signature = keyPair.sign(signatureHash)
38918 if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature)
38919
38920 input.signatures[i] = signature.toScriptSignature(hashType)
38921 return true
38922 })
38923
38924 if (!signed) throw new Error('Key pair cannot sign for this input')
38925 }
38926
38927 function signatureHashType (buffer) {
38928 return buffer.readUInt8(buffer.length - 1)
38929 }
38930
38931 TransactionBuilder.prototype.__canModifyInputs = function () {
38932 return this.inputs.every(function (input) {
38933 // any signatures?
38934 if (input.signatures === undefined) return true
38935
38936 return input.signatures.every(function (signature) {
38937 if (!signature) return true
38938 var hashType = signatureHashType(signature)
38939
38940 // if SIGHASH_ANYONECANPAY is set, signatures would not
38941 // be invalidated by more inputs
38942 return hashType & Transaction.SIGHASH_ANYONECANPAY
38943 })
38944 })
38945 }
38946
38947 TransactionBuilder.prototype.__canModifyOutputs = function () {
38948 var nInputs = this.tx.ins.length
38949 var nOutputs = this.tx.outs.length
38950
38951 return this.inputs.every(function (input) {
38952 if (input.signatures === undefined) return true
38953
38954 return input.signatures.every(function (signature) {
38955 if (!signature) return true
38956 var hashType = signatureHashType(signature)
38957
38958 var hashTypeMod = hashType & 0x1f
38959 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
38960 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
38961 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
38962 // some signatures would be invalidated by the addition
38963 // of more outputs
38964 return nInputs <= nOutputs
38965 }
38966 })
38967 })
38968 }
38969
38970 TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
38971 // not all inputs will have .value defined
38972 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
38973
38974 // but all outputs do, and if we have any input value
38975 // we can immediately determine if the outputs are too small
38976 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
38977 var fee = incoming - outgoing
38978 var feeRate = fee / bytes
38979
38980 return feeRate > this.maximumFeeRate
38981 }
38982
38983 module.exports = TransactionBuilder
38984
38985 },{"./address":44,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./types":80,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112}],80:[function(require,module,exports){
38986 var typeforce = require('typeforce')
38987
38988 var UINT31_MAX = Math.pow(2, 31) - 1
38989 function UInt31 (value) {
38990 return typeforce.UInt32(value) && value <= UINT31_MAX
38991 }
38992
38993 function BIP32Path (value) {
38994 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
38995 }
38996 BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
38997
38998 var SATOSHI_MAX = 21 * 1e14
38999 function Satoshi (value) {
39000 return typeforce.UInt53(value) && value <= SATOSHI_MAX
39001 }
39002
39003 // external dependent types
39004 var BigInt = typeforce.quacksLike('BigInteger')
39005 var ECPoint = typeforce.quacksLike('Point')
39006
39007 // exposed, external API
39008 var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
39009 var Network = typeforce.compile({
39010 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
39011 bip32: {
39012 public: typeforce.UInt32,
39013 private: typeforce.UInt32
39014 },
39015 pubKeyHash: typeforce.UInt8,
39016 scriptHash: typeforce.UInt8,
39017 wif: typeforce.UInt8
39018 })
39019
39020 // extend typeforce types with ours
39021 var types = {
39022 BigInt: BigInt,
39023 BIP32Path: BIP32Path,
39024 Buffer256bit: typeforce.BufferN(32),
39025 ECPoint: ECPoint,
39026 ECSignature: ECSignature,
39027 Hash160bit: typeforce.BufferN(20),
39028 Hash256bit: typeforce.BufferN(32),
39029 Network: Network,
39030 Satoshi: Satoshi,
39031 UInt31: UInt31
39032 }
39033
39034 for (var typeName in typeforce) {
39035 types[typeName] = typeforce[typeName]
39036 }
39037
39038 module.exports = types
39039
39040 },{"typeforce":112}],81:[function(require,module,exports){
39041 var basex = require('base-x')
39042 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
39043
39044 module.exports = basex(ALPHABET)
39045
39046 },{"base-x":35}],82:[function(require,module,exports){
39047 'use strict'
39048
39049 var base58 = require('bs58')
39050 var Buffer = require('safe-buffer').Buffer
39051
39052 module.exports = function (checksumFn) {
39053 // Encode a buffer as a base58-check encoded string
39054 function encode (payload) {
39055 var checksum = checksumFn(payload)
39056
39057 return base58.encode(Buffer.concat([
39058 payload,
39059 checksum
39060 ], payload.length + 4))
39061 }
39062
39063 function decodeRaw (buffer) {
39064 var payload = buffer.slice(0, -4)
39065 var checksum = buffer.slice(-4)
39066 var newChecksum = checksumFn(payload)
39067
39068 if (checksum[0] ^ newChecksum[0] |
39069 checksum[1] ^ newChecksum[1] |
39070 checksum[2] ^ newChecksum[2] |
39071 checksum[3] ^ newChecksum[3]) return
39072
39073 return payload
39074 }
39075
39076 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
39077 function decodeUnsafe (string) {
39078 var buffer = base58.decodeUnsafe(string)
39079 if (!buffer) return
39080
39081 return decodeRaw(buffer)
39082 }
39083
39084 function decode (string) {
39085 var buffer = base58.decode(string)
39086 var payload = decodeRaw(buffer, checksumFn)
39087 if (!payload) throw new Error('Invalid checksum')
39088 return payload
39089 }
39090
39091 return {
39092 encode: encode,
39093 decode: decode,
39094 decodeUnsafe: decodeUnsafe
39095 }
39096 }
39097
39098 },{"bs58":81,"safe-buffer":101}],83:[function(require,module,exports){
39099 'use strict'
39100
39101 var createHash = require('create-hash')
39102 var bs58checkBase = require('./base')
39103
39104 // SHA256(SHA256(buffer))
39105 function sha256x2 (buffer) {
39106 var tmp = createHash('sha256').update(buffer).digest()
39107 return createHash('sha256').update(tmp).digest()
39108 }
39109
39110 module.exports = bs58checkBase(sha256x2)
39111
39112 },{"./base":82,"create-hash":85}],84:[function(require,module,exports){
39113 var Buffer = require('safe-buffer').Buffer
39114 var Transform = require('stream').Transform
39115 var StringDecoder = require('string_decoder').StringDecoder
39116 var inherits = require('inherits')
39117
39118 function CipherBase (hashMode) {
39119 Transform.call(this)
39120 this.hashMode = typeof hashMode === 'string'
39121 if (this.hashMode) {
39122 this[hashMode] = this._finalOrDigest
39123 } else {
39124 this.final = this._finalOrDigest
39125 }
39126 if (this._final) {
39127 this.__final = this._final
39128 this._final = null
39129 }
39130 this._decoder = null
39131 this._encoding = null
39132 }
39133 inherits(CipherBase, Transform)
39134
39135 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
39136 if (typeof data === 'string') {
39137 data = Buffer.from(data, inputEnc)
39138 }
39139
39140 var outData = this._update(data)
39141 if (this.hashMode) return this
39142
39143 if (outputEnc) {
39144 outData = this._toString(outData, outputEnc)
39145 }
39146
39147 return outData
39148 }
39149
39150 CipherBase.prototype.setAutoPadding = function () {}
39151 CipherBase.prototype.getAuthTag = function () {
39152 throw new Error('trying to get auth tag in unsupported state')
39153 }
39154
39155 CipherBase.prototype.setAuthTag = function () {
39156 throw new Error('trying to set auth tag in unsupported state')
39157 }
39158
39159 CipherBase.prototype.setAAD = function () {
39160 throw new Error('trying to set aad in unsupported state')
39161 }
39162
39163 CipherBase.prototype._transform = function (data, _, next) {
39164 var err
39165 try {
39166 if (this.hashMode) {
39167 this._update(data)
39168 } else {
39169 this.push(this._update(data))
39170 }
39171 } catch (e) {
39172 err = e
39173 } finally {
39174 next(err)
39175 }
39176 }
39177 CipherBase.prototype._flush = function (done) {
39178 var err
39179 try {
39180 this.push(this.__final())
39181 } catch (e) {
39182 err = e
39183 }
39184
39185 done(err)
39186 }
39187 CipherBase.prototype._finalOrDigest = function (outputEnc) {
39188 var outData = this.__final() || Buffer.alloc(0)
39189 if (outputEnc) {
39190 outData = this._toString(outData, outputEnc, true)
39191 }
39192 return outData
39193 }
39194
39195 CipherBase.prototype._toString = function (value, enc, fin) {
39196 if (!this._decoder) {
39197 this._decoder = new StringDecoder(enc)
39198 this._encoding = enc
39199 }
39200
39201 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
39202
39203 var out = this._decoder.write(value)
39204 if (fin) {
39205 out += this._decoder.end()
39206 }
39207
39208 return out
39209 }
39210
39211 module.exports = CipherBase
39212
39213 },{"inherits":96,"safe-buffer":101,"stream":28,"string_decoder":29}],85:[function(require,module,exports){
39214 (function (Buffer){
39215 'use strict'
39216 var inherits = require('inherits')
39217 var md5 = require('./md5')
39218 var RIPEMD160 = require('ripemd160')
39219 var sha = require('sha.js')
39220
39221 var Base = require('cipher-base')
39222
39223 function HashNoConstructor (hash) {
39224 Base.call(this, 'digest')
39225
39226 this._hash = hash
39227 this.buffers = []
39228 }
39229
39230 inherits(HashNoConstructor, Base)
39231
39232 HashNoConstructor.prototype._update = function (data) {
39233 this.buffers.push(data)
39234 }
39235
39236 HashNoConstructor.prototype._final = function () {
39237 var buf = Buffer.concat(this.buffers)
39238 var r = this._hash(buf)
39239 this.buffers = null
39240
39241 return r
39242 }
39243
39244 function Hash (hash) {
39245 Base.call(this, 'digest')
39246
39247 this._hash = hash
39248 }
39249
39250 inherits(Hash, Base)
39251
39252 Hash.prototype._update = function (data) {
39253 this._hash.update(data)
39254 }
39255
39256 Hash.prototype._final = function () {
39257 return this._hash.digest()
39258 }
39259
39260 module.exports = function createHash (alg) {
39261 alg = alg.toLowerCase()
39262 if (alg === 'md5') return new HashNoConstructor(md5)
39263 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
39264
39265 return new Hash(sha(alg))
39266 }
39267
39268 }).call(this,require("buffer").Buffer)
39269 },{"./md5":87,"buffer":5,"cipher-base":84,"inherits":96,"ripemd160":100,"sha.js":103}],86:[function(require,module,exports){
39270 (function (Buffer){
39271 'use strict'
39272 var intSize = 4
39273 var zeroBuffer = new Buffer(intSize)
39274 zeroBuffer.fill(0)
39275
39276 var charSize = 8
39277 var hashSize = 16
39278
39279 function toArray (buf) {
39280 if ((buf.length % intSize) !== 0) {
39281 var len = buf.length + (intSize - (buf.length % intSize))
39282 buf = Buffer.concat([buf, zeroBuffer], len)
39283 }
39284
39285 var arr = new Array(buf.length >>> 2)
39286 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
39287 arr[j] = buf.readInt32LE(i)
39288 }
39289
39290 return arr
39291 }
39292
39293 module.exports = function hash (buf, fn) {
39294 var arr = fn(toArray(buf), buf.length * charSize)
39295 buf = new Buffer(hashSize)
39296 for (var i = 0; i < arr.length; i++) {
39297 buf.writeInt32LE(arr[i], i << 2, true)
39298 }
39299 return buf
39300 }
39301
39302 }).call(this,require("buffer").Buffer)
39303 },{"buffer":5}],87:[function(require,module,exports){
39304 'use strict'
39305 /*
39306 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
39307 * Digest Algorithm, as defined in RFC 1321.
39308 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
39309 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
39310 * Distributed under the BSD License
39311 * See http://pajhome.org.uk/crypt/md5 for more info.
39312 */
39313
39314 var makeHash = require('./make-hash')
39315
39316 /*
39317 * Calculate the MD5 of an array of little-endian words, and a bit length
39318 */
39319 function core_md5 (x, len) {
39320 /* append padding */
39321 x[len >> 5] |= 0x80 << ((len) % 32)
39322 x[(((len + 64) >>> 9) << 4) + 14] = len
39323
39324 var a = 1732584193
39325 var b = -271733879
39326 var c = -1732584194
39327 var d = 271733878
39328
39329 for (var i = 0; i < x.length; i += 16) {
39330 var olda = a
39331 var oldb = b
39332 var oldc = c
39333 var oldd = d
39334
39335 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
39336 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
39337 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
39338 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
39339 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
39340 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
39341 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
39342 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
39343 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
39344 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
39345 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
39346 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
39347 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
39348 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
39349 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
39350 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
39351
39352 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
39353 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
39354 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
39355 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
39356 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
39357 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
39358 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
39359 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
39360 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
39361 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
39362 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
39363 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
39364 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
39365 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
39366 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
39367 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
39368
39369 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
39370 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
39371 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
39372 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
39373 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
39374 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
39375 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
39376 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
39377 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
39378 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
39379 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
39380 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
39381 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
39382 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
39383 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
39384 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
39385
39386 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
39387 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
39388 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
39389 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
39390 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
39391 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
39392 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
39393 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
39394 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
39395 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
39396 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
39397 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
39398 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
39399 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
39400 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
39401 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
39402
39403 a = safe_add(a, olda)
39404 b = safe_add(b, oldb)
39405 c = safe_add(c, oldc)
39406 d = safe_add(d, oldd)
39407 }
39408
39409 return [a, b, c, d]
39410 }
39411
39412 /*
39413 * These functions implement the four basic operations the algorithm uses.
39414 */
39415 function md5_cmn (q, a, b, x, s, t) {
39416 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
39417 }
39418
39419 function md5_ff (a, b, c, d, x, s, t) {
39420 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
39421 }
39422
39423 function md5_gg (a, b, c, d, x, s, t) {
39424 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
39425 }
39426
39427 function md5_hh (a, b, c, d, x, s, t) {
39428 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
39429 }
39430
39431 function md5_ii (a, b, c, d, x, s, t) {
39432 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
39433 }
39434
39435 /*
39436 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
39437 * to work around bugs in some JS interpreters.
39438 */
39439 function safe_add (x, y) {
39440 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
39441 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
39442 return (msw << 16) | (lsw & 0xFFFF)
39443 }
39444
39445 /*
39446 * Bitwise rotate a 32-bit number to the left.
39447 */
39448 function bit_rol (num, cnt) {
39449 return (num << cnt) | (num >>> (32 - cnt))
39450 }
39451
39452 module.exports = function md5 (buf) {
39453 return makeHash(buf, core_md5)
39454 }
39455
39456 },{"./make-hash":86}],88:[function(require,module,exports){
39457 'use strict'
39458 var inherits = require('inherits')
39459 var Legacy = require('./legacy')
39460 var Base = require('cipher-base')
39461 var Buffer = require('safe-buffer').Buffer
39462 var md5 = require('create-hash/md5')
39463 var RIPEMD160 = require('ripemd160')
39464
39465 var sha = require('sha.js')
39466
39467 var ZEROS = Buffer.alloc(128)
39468
39469 function Hmac (alg, key) {
39470 Base.call(this, 'digest')
39471 if (typeof key === 'string') {
39472 key = Buffer.from(key)
39473 }
39474
39475 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
39476
39477 this._alg = alg
39478 this._key = key
39479 if (key.length > blocksize) {
39480 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
39481 key = hash.update(key).digest()
39482 } else if (key.length < blocksize) {
39483 key = Buffer.concat([key, ZEROS], blocksize)
39484 }
39485
39486 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
39487 var opad = this._opad = Buffer.allocUnsafe(blocksize)
39488
39489 for (var i = 0; i < blocksize; i++) {
39490 ipad[i] = key[i] ^ 0x36
39491 opad[i] = key[i] ^ 0x5C
39492 }
39493 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
39494 this._hash.update(ipad)
39495 }
39496
39497 inherits(Hmac, Base)
39498
39499 Hmac.prototype._update = function (data) {
39500 this._hash.update(data)
39501 }
39502
39503 Hmac.prototype._final = function () {
39504 var h = this._hash.digest()
39505 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
39506 return hash.update(this._opad).update(h).digest()
39507 }
39508
39509 module.exports = function createHmac (alg, key) {
39510 alg = alg.toLowerCase()
39511 if (alg === 'rmd160' || alg === 'ripemd160') {
39512 return new Hmac('rmd160', key)
39513 }
39514 if (alg === 'md5') {
39515 return new Legacy(md5, key)
39516 }
39517 return new Hmac(alg, key)
39518 }
39519
39520 },{"./legacy":89,"cipher-base":84,"create-hash/md5":87,"inherits":96,"ripemd160":100,"safe-buffer":101,"sha.js":103}],89:[function(require,module,exports){
39521 'use strict'
39522 var inherits = require('inherits')
39523 var Buffer = require('safe-buffer').Buffer
39524
39525 var Base = require('cipher-base')
39526
39527 var ZEROS = Buffer.alloc(128)
39528 var blocksize = 64
39529
39530 function Hmac (alg, key) {
39531 Base.call(this, 'digest')
39532 if (typeof key === 'string') {
39533 key = Buffer.from(key)
39534 }
39535
39536 this._alg = alg
39537 this._key = key
39538
39539 if (key.length > blocksize) {
39540 key = alg(key)
39541 } else if (key.length < blocksize) {
39542 key = Buffer.concat([key, ZEROS], blocksize)
39543 }
39544
39545 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
39546 var opad = this._opad = Buffer.allocUnsafe(blocksize)
39547
39548 for (var i = 0; i < blocksize; i++) {
39549 ipad[i] = key[i] ^ 0x36
39550 opad[i] = key[i] ^ 0x5C
39551 }
39552
39553 this._hash = [ipad]
39554 }
39555
39556 inherits(Hmac, Base)
39557
39558 Hmac.prototype._update = function (data) {
39559 this._hash.push(data)
39560 }
39561
39562 Hmac.prototype._final = function () {
39563 var h = this._alg(Buffer.concat(this._hash))
39564 return this._alg(Buffer.concat([this._opad, h]))
39565 }
39566 module.exports = Hmac
39567
39568 },{"cipher-base":84,"inherits":96,"safe-buffer":101}],90:[function(require,module,exports){
39569 var assert = require('assert')
39570 var BigInteger = require('bigi')
39571
39572 var Point = require('./point')
39573
39574 function Curve (p, a, b, Gx, Gy, n, h) {
39575 this.p = p
39576 this.a = a
39577 this.b = b
39578 this.G = Point.fromAffine(this, Gx, Gy)
39579 this.n = n
39580 this.h = h
39581
39582 this.infinity = new Point(this, null, null, BigInteger.ZERO)
39583
39584 // result caching
39585 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
39586
39587 // determine size of p in bytes
39588 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
39589 }
39590
39591 Curve.prototype.pointFromX = function (isOdd, x) {
39592 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
39593 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
39594
39595 var y = beta
39596 if (beta.isEven() ^ !isOdd) {
39597 y = this.p.subtract(y) // -y % p
39598 }
39599
39600 return Point.fromAffine(this, x, y)
39601 }
39602
39603 Curve.prototype.isInfinity = function (Q) {
39604 if (Q === this.infinity) return true
39605
39606 return Q.z.signum() === 0 && Q.y.signum() !== 0
39607 }
39608
39609 Curve.prototype.isOnCurve = function (Q) {
39610 if (this.isInfinity(Q)) return true
39611
39612 var x = Q.affineX
39613 var y = Q.affineY
39614 var a = this.a
39615 var b = this.b
39616 var p = this.p
39617
39618 // Check that xQ and yQ are integers in the interval [0, p - 1]
39619 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
39620 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
39621
39622 // and check that y^2 = x^3 + ax + b (mod p)
39623 var lhs = y.square().mod(p)
39624 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
39625 return lhs.equals(rhs)
39626 }
39627
39628 /**
39629 * Validate an elliptic curve point.
39630 *
39631 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
39632 */
39633 Curve.prototype.validate = function (Q) {
39634 // Check Q != O
39635 assert(!this.isInfinity(Q), 'Point is at infinity')
39636 assert(this.isOnCurve(Q), 'Point is not on the curve')
39637
39638 // Check nQ = O (where Q is a scalar multiple of G)
39639 var nQ = Q.multiply(this.n)
39640 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
39641
39642 return true
39643 }
39644
39645 module.exports = Curve
39646
39647 },{"./point":94,"assert":1,"bigi":39}],91:[function(require,module,exports){
39648 module.exports={
39649 "secp128r1": {
39650 "p": "fffffffdffffffffffffffffffffffff",
39651 "a": "fffffffdfffffffffffffffffffffffc",
39652 "b": "e87579c11079f43dd824993c2cee5ed3",
39653 "n": "fffffffe0000000075a30d1b9038a115",
39654 "h": "01",
39655 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
39656 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
39657 },
39658 "secp160k1": {
39659 "p": "fffffffffffffffffffffffffffffffeffffac73",
39660 "a": "00",
39661 "b": "07",
39662 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
39663 "h": "01",
39664 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
39665 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
39666 },
39667 "secp160r1": {
39668 "p": "ffffffffffffffffffffffffffffffff7fffffff",
39669 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
39670 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
39671 "n": "0100000000000000000001f4c8f927aed3ca752257",
39672 "h": "01",
39673 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
39674 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
39675 },
39676 "secp192k1": {
39677 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
39678 "a": "00",
39679 "b": "03",
39680 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
39681 "h": "01",
39682 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
39683 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
39684 },
39685 "secp192r1": {
39686 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
39687 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
39688 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
39689 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
39690 "h": "01",
39691 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
39692 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
39693 },
39694 "secp256k1": {
39695 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
39696 "a": "00",
39697 "b": "07",
39698 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
39699 "h": "01",
39700 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
39701 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
39702 },
39703 "secp256r1": {
39704 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
39705 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
39706 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
39707 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
39708 "h": "01",
39709 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
39710 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
39711 }
39712 }
39713
39714 },{}],92:[function(require,module,exports){
39715 var Point = require('./point')
39716 var Curve = require('./curve')
39717
39718 var getCurveByName = require('./names')
39719
39720 module.exports = {
39721 Curve: Curve,
39722 Point: Point,
39723 getCurveByName: getCurveByName
39724 }
39725
39726 },{"./curve":90,"./names":93,"./point":94}],93:[function(require,module,exports){
39727 var BigInteger = require('bigi')
39728
39729 var curves = require('./curves.json')
39730 var Curve = require('./curve')
39731
39732 function getCurveByName (name) {
39733 var curve = curves[name]
39734 if (!curve) return null
39735
39736 var p = new BigInteger(curve.p, 16)
39737 var a = new BigInteger(curve.a, 16)
39738 var b = new BigInteger(curve.b, 16)
39739 var n = new BigInteger(curve.n, 16)
39740 var h = new BigInteger(curve.h, 16)
39741 var Gx = new BigInteger(curve.Gx, 16)
39742 var Gy = new BigInteger(curve.Gy, 16)
39743
39744 return new Curve(p, a, b, Gx, Gy, n, h)
39745 }
39746
39747 module.exports = getCurveByName
39748
39749 },{"./curve":90,"./curves.json":91,"bigi":39}],94:[function(require,module,exports){
39750 var assert = require('assert')
39751 var Buffer = require('safe-buffer').Buffer
39752 var BigInteger = require('bigi')
39753
39754 var THREE = BigInteger.valueOf(3)
39755
39756 function Point (curve, x, y, z) {
39757 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
39758
39759 this.curve = curve
39760 this.x = x
39761 this.y = y
39762 this.z = z
39763 this._zInv = null
39764
39765 this.compressed = true
39766 }
39767
39768 Object.defineProperty(Point.prototype, 'zInv', {
39769 get: function () {
39770 if (this._zInv === null) {
39771 this._zInv = this.z.modInverse(this.curve.p)
39772 }
39773
39774 return this._zInv
39775 }
39776 })
39777
39778 Object.defineProperty(Point.prototype, 'affineX', {
39779 get: function () {
39780 return this.x.multiply(this.zInv).mod(this.curve.p)
39781 }
39782 })
39783
39784 Object.defineProperty(Point.prototype, 'affineY', {
39785 get: function () {
39786 return this.y.multiply(this.zInv).mod(this.curve.p)
39787 }
39788 })
39789
39790 Point.fromAffine = function (curve, x, y) {
39791 return new Point(curve, x, y, BigInteger.ONE)
39792 }
39793
39794 Point.prototype.equals = function (other) {
39795 if (other === this) return true
39796 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
39797 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
39798
39799 // u = Y2 * Z1 - Y1 * Z2
39800 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
39801
39802 if (u.signum() !== 0) return false
39803
39804 // v = X2 * Z1 - X1 * Z2
39805 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
39806
39807 return v.signum() === 0
39808 }
39809
39810 Point.prototype.negate = function () {
39811 var y = this.curve.p.subtract(this.y)
39812
39813 return new Point(this.curve, this.x, y, this.z)
39814 }
39815
39816 Point.prototype.add = function (b) {
39817 if (this.curve.isInfinity(this)) return b
39818 if (this.curve.isInfinity(b)) return this
39819
39820 var x1 = this.x
39821 var y1 = this.y
39822 var x2 = b.x
39823 var y2 = b.y
39824
39825 // u = Y2 * Z1 - Y1 * Z2
39826 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
39827 // v = X2 * Z1 - X1 * Z2
39828 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
39829
39830 if (v.signum() === 0) {
39831 if (u.signum() === 0) {
39832 return this.twice() // this == b, so double
39833 }
39834
39835 return this.curve.infinity // this = -b, so infinity
39836 }
39837
39838 var v2 = v.square()
39839 var v3 = v2.multiply(v)
39840 var x1v2 = x1.multiply(v2)
39841 var zu2 = u.square().multiply(this.z)
39842
39843 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
39844 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
39845 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
39846 var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)
39847 // z3 = v^3 * z1 * z2
39848 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
39849
39850 return new Point(this.curve, x3, y3, z3)
39851 }
39852
39853 Point.prototype.twice = function () {
39854 if (this.curve.isInfinity(this)) return this
39855 if (this.y.signum() === 0) return this.curve.infinity
39856
39857 var x1 = this.x
39858 var y1 = this.y
39859
39860 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
39861 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
39862 var a = this.curve.a
39863
39864 // w = 3 * x1^2 + a * z1^2
39865 var w = x1.square().multiply(THREE)
39866
39867 if (a.signum() !== 0) {
39868 w = w.add(this.z.square().multiply(a))
39869 }
39870
39871 w = w.mod(this.curve.p)
39872 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
39873 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
39874 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
39875 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
39876 // z3 = 8 * (y1 * z1)^3
39877 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
39878
39879 return new Point(this.curve, x3, y3, z3)
39880 }
39881
39882 // Simple NAF (Non-Adjacent Form) multiplication algorithm
39883 // TODO: modularize the multiplication algorithm
39884 Point.prototype.multiply = function (k) {
39885 if (this.curve.isInfinity(this)) return this
39886 if (k.signum() === 0) return this.curve.infinity
39887
39888 var e = k
39889 var h = e.multiply(THREE)
39890
39891 var neg = this.negate()
39892 var R = this
39893
39894 for (var i = h.bitLength() - 2; i > 0; --i) {
39895 var hBit = h.testBit(i)
39896 var eBit = e.testBit(i)
39897
39898 R = R.twice()
39899
39900 if (hBit !== eBit) {
39901 R = R.add(hBit ? this : neg)
39902 }
39903 }
39904
39905 return R
39906 }
39907
39908 // Compute this*j + x*k (simultaneous multiplication)
39909 Point.prototype.multiplyTwo = function (j, x, k) {
39910 var i = Math.max(j.bitLength(), k.bitLength()) - 1
39911 var R = this.curve.infinity
39912 var both = this.add(x)
39913
39914 while (i >= 0) {
39915 var jBit = j.testBit(i)
39916 var kBit = k.testBit(i)
39917
39918 R = R.twice()
39919
39920 if (jBit) {
39921 if (kBit) {
39922 R = R.add(both)
39923 } else {
39924 R = R.add(this)
39925 }
39926 } else if (kBit) {
39927 R = R.add(x)
39928 }
39929 --i
39930 }
39931
39932 return R
39933 }
39934
39935 Point.prototype.getEncoded = function (compressed) {
39936 if (compressed == null) compressed = this.compressed
39937 if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'
39938
39939 var x = this.affineX
39940 var y = this.affineY
39941 var byteLength = this.curve.pLength
39942 var buffer
39943
39944 // 0x02/0x03 | X
39945 if (compressed) {
39946 buffer = Buffer.allocUnsafe(1 + byteLength)
39947 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
39948
39949 // 0x04 | X | Y
39950 } else {
39951 buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)
39952 buffer.writeUInt8(0x04, 0)
39953
39954 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
39955 }
39956
39957 x.toBuffer(byteLength).copy(buffer, 1)
39958
39959 return buffer
39960 }
39961
39962 Point.decodeFrom = function (curve, buffer) {
39963 var type = buffer.readUInt8(0)
39964 var compressed = (type !== 4)
39965
39966 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
39967 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
39968
39969 var Q
39970 if (compressed) {
39971 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
39972 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
39973
39974 var isOdd = (type === 0x03)
39975 Q = curve.pointFromX(isOdd, x)
39976 } else {
39977 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
39978
39979 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
39980 Q = Point.fromAffine(curve, x, y)
39981 }
39982
39983 Q.compressed = compressed
39984 return Q
39985 }
39986
39987 Point.prototype.toString = function () {
39988 if (this.curve.isInfinity(this)) return '(INFINITY)'
39989
39990 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
39991 }
39992
39993 module.exports = Point
39994
39995 },{"assert":1,"bigi":39,"safe-buffer":101}],95:[function(require,module,exports){
39996 (function (Buffer){
39997 'use strict'
39998 var Transform = require('stream').Transform
39999 var inherits = require('inherits')
40000
40001 function HashBase (blockSize) {
40002 Transform.call(this)
40003
40004 this._block = new Buffer(blockSize)
40005 this._blockSize = blockSize
40006 this._blockOffset = 0
40007 this._length = [0, 0, 0, 0]
40008
40009 this._finalized = false
40010 }
40011
40012 inherits(HashBase, Transform)
40013
40014 HashBase.prototype._transform = function (chunk, encoding, callback) {
40015 var error = null
40016 try {
40017 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
40018 this.update(chunk)
40019 } catch (err) {
40020 error = err
40021 }
40022
40023 callback(error)
40024 }
40025
40026 HashBase.prototype._flush = function (callback) {
40027 var error = null
40028 try {
40029 this.push(this._digest())
40030 } catch (err) {
40031 error = err
40032 }
40033
40034 callback(error)
40035 }
40036
40037 HashBase.prototype.update = function (data, encoding) {
40038 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
40039 if (this._finalized) throw new Error('Digest already called')
40040 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
40041
40042 // consume data
40043 var block = this._block
40044 var offset = 0
40045 while (this._blockOffset + data.length - offset >= this._blockSize) {
40046 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
40047 this._update()
40048 this._blockOffset = 0
40049 }
40050 while (offset < data.length) block[this._blockOffset++] = data[offset++]
40051
40052 // update length
40053 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
40054 this._length[j] += carry
40055 carry = (this._length[j] / 0x0100000000) | 0
40056 if (carry > 0) this._length[j] -= 0x0100000000 * carry
40057 }
40058
40059 return this
40060 }
40061
40062 HashBase.prototype._update = function (data) {
40063 throw new Error('_update is not implemented')
40064 }
40065
40066 HashBase.prototype.digest = function (encoding) {
40067 if (this._finalized) throw new Error('Digest already called')
40068 this._finalized = true
40069
40070 var digest = this._digest()
40071 if (encoding !== undefined) digest = digest.toString(encoding)
40072 return digest
40073 }
40074
40075 HashBase.prototype._digest = function () {
40076 throw new Error('_digest is not implemented')
40077 }
40078
40079 module.exports = HashBase
40080
40081 }).call(this,require("buffer").Buffer)
40082 },{"buffer":5,"inherits":96,"stream":28}],96:[function(require,module,exports){
40083 arguments[4][9][0].apply(exports,arguments)
40084 },{"dup":9}],97:[function(require,module,exports){
40085 (function (Buffer){
40086 // constant-space merkle root calculation algorithm
40087 module.exports = function fastRoot (values, digestFn) {
40088 if (!Array.isArray(values)) throw TypeError('Expected values Array')
40089 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
40090
40091 var length = values.length
40092 var results = values.concat()
40093
40094 while (length > 1) {
40095 var j = 0
40096
40097 for (var i = 0; i < length; i += 2, ++j) {
40098 var left = results[i]
40099 var right = i + 1 === length ? left : results[i + 1]
40100 var data = Buffer.concat([left, right])
40101
40102 results[j] = digestFn(data)
40103 }
40104
40105 length = j
40106 }
40107
40108 return results[0]
40109 }
40110
40111 }).call(this,require("buffer").Buffer)
40112 },{"buffer":5}],98:[function(require,module,exports){
40113 var OPS = require('bitcoin-ops')
40114
40115 function encodingLength (i) {
40116 return i < OPS.OP_PUSHDATA1 ? 1
40117 : i <= 0xff ? 2
40118 : i <= 0xffff ? 3
40119 : 5
40120 }
40121
40122 function encode (buffer, number, offset) {
40123 var size = encodingLength(number)
40124
40125 // ~6 bit
40126 if (size === 1) {
40127 buffer.writeUInt8(number, offset)
40128
40129 // 8 bit
40130 } else if (size === 2) {
40131 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
40132 buffer.writeUInt8(number, offset + 1)
40133
40134 // 16 bit
40135 } else if (size === 3) {
40136 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
40137 buffer.writeUInt16LE(number, offset + 1)
40138
40139 // 32 bit
40140 } else {
40141 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
40142 buffer.writeUInt32LE(number, offset + 1)
40143 }
40144
40145 return size
40146 }
40147
40148 function decode (buffer, offset) {
40149 var opcode = buffer.readUInt8(offset)
40150 var number, size
40151
40152 // ~6 bit
40153 if (opcode < OPS.OP_PUSHDATA1) {
40154 number = opcode
40155 size = 1
40156
40157 // 8 bit
40158 } else if (opcode === OPS.OP_PUSHDATA1) {
40159 if (offset + 2 > buffer.length) return null
40160 number = buffer.readUInt8(offset + 1)
40161 size = 2
40162
40163 // 16 bit
40164 } else if (opcode === OPS.OP_PUSHDATA2) {
40165 if (offset + 3 > buffer.length) return null
40166 number = buffer.readUInt16LE(offset + 1)
40167 size = 3
40168
40169 // 32 bit
40170 } else {
40171 if (offset + 5 > buffer.length) return null
40172 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
40173
40174 number = buffer.readUInt32LE(offset + 1)
40175 size = 5
40176 }
40177
40178 return {
40179 opcode: opcode,
40180 number: number,
40181 size: size
40182 }
40183 }
40184
40185 module.exports = {
40186 encodingLength: encodingLength,
40187 encode: encode,
40188 decode: decode
40189 }
40190
40191 },{"bitcoin-ops":42}],99:[function(require,module,exports){
40192 (function (process,global){
40193 'use strict'
40194
40195 function oldBrowser () {
40196 throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11')
40197 }
40198
40199 var Buffer = require('safe-buffer').Buffer
40200 var crypto = global.crypto || global.msCrypto
40201
40202 if (crypto && crypto.getRandomValues) {
40203 module.exports = randomBytes
40204 } else {
40205 module.exports = oldBrowser
40206 }
40207
40208 function randomBytes (size, cb) {
40209 // phantomjs needs to throw
40210 if (size > 65536) throw new Error('requested too many random bytes')
40211 // in case browserify isn't using the Uint8Array version
40212 var rawBytes = new global.Uint8Array(size)
40213
40214 // This will not work in older browsers.
40215 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
40216 if (size > 0) { // getRandomValues fails on IE if size == 0
40217 crypto.getRandomValues(rawBytes)
40218 }
40219
40220 // XXX: phantomjs doesn't like a buffer being passed here
40221 var bytes = Buffer.from(rawBytes.buffer)
40222
40223 if (typeof cb === 'function') {
40224 return process.nextTick(function () {
40225 cb(null, bytes)
40226 })
40227 }
40228
40229 return bytes
40230 }
40231
40232 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
40233 },{"_process":13,"safe-buffer":101}],100:[function(require,module,exports){
40234 (function (Buffer){
40235 'use strict'
40236 var inherits = require('inherits')
40237 var HashBase = require('hash-base')
40238
40239 function RIPEMD160 () {
40240 HashBase.call(this, 64)
40241
40242 // state
40243 this._a = 0x67452301
40244 this._b = 0xefcdab89
40245 this._c = 0x98badcfe
40246 this._d = 0x10325476
40247 this._e = 0xc3d2e1f0
40248 }
40249
40250 inherits(RIPEMD160, HashBase)
40251
40252 RIPEMD160.prototype._update = function () {
40253 var m = new Array(16)
40254 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
40255
40256 var al = this._a
40257 var bl = this._b
40258 var cl = this._c
40259 var dl = this._d
40260 var el = this._e
40261
40262 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
40263 // K = 0x00000000
40264 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
40265 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
40266 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
40267 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
40268 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
40269 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
40270 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
40271 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
40272 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
40273 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
40274 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
40275 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
40276 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
40277 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
40278 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
40279 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
40280 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
40281
40282 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
40283 // K = 0x5a827999
40284 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
40285 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
40286 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
40287 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
40288 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
40289 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
40290 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
40291 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
40292 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
40293 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
40294 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
40295 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
40296 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
40297 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
40298 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
40299 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
40300 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
40301
40302 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
40303 // K = 0x6ed9eba1
40304 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
40305 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
40306 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
40307 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
40308 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
40309 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
40310 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
40311 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
40312 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
40313 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
40314 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
40315 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
40316 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
40317 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
40318 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
40319 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
40320 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
40321
40322 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
40323 // K = 0x8f1bbcdc
40324 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
40325 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
40326 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
40327 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
40328 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
40329 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
40330 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
40331 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
40332 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
40333 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
40334 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
40335 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
40336 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
40337 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
40338 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
40339 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
40340 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
40341
40342 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
40343 // K = 0xa953fd4e
40344 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
40345 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
40346 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
40347 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
40348 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
40349 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
40350 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
40351 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
40352 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
40353 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
40354 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
40355 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
40356 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
40357 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
40358 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
40359 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
40360 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
40361
40362 var ar = this._a
40363 var br = this._b
40364 var cr = this._c
40365 var dr = this._d
40366 var er = this._e
40367
40368 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
40369 // K' = 0x50a28be6
40370 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
40371 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
40372 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
40373 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
40374 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
40375 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
40376 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
40377 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
40378 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
40379 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
40380 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
40381 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
40382 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
40383 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
40384 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
40385 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
40386 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
40387
40388 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
40389 // K' = 0x5c4dd124
40390 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
40391 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
40392 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
40393 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
40394 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
40395 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
40396 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
40397 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
40398 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
40399 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
40400 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
40401 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
40402 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
40403 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
40404 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
40405 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
40406 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
40407
40408 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
40409 // K' = 0x6d703ef3
40410 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
40411 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
40412 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
40413 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
40414 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
40415 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
40416 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
40417 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
40418 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
40419 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
40420 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
40421 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
40422 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
40423 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
40424 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
40425 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
40426 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
40427
40428 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
40429 // K' = 0x7a6d76e9
40430 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
40431 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
40432 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
40433 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
40434 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
40435 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
40436 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
40437 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
40438 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
40439 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
40440 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
40441 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
40442 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
40443 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
40444 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
40445 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
40446 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
40447
40448 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
40449 // K' = 0x00000000
40450 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
40451 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
40452 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
40453 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
40454 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
40455 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
40456 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
40457 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
40458 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
40459 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
40460 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
40461 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
40462 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
40463 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
40464 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
40465 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
40466 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
40467
40468 // change state
40469 var t = (this._b + cl + dr) | 0
40470 this._b = (this._c + dl + er) | 0
40471 this._c = (this._d + el + ar) | 0
40472 this._d = (this._e + al + br) | 0
40473 this._e = (this._a + bl + cr) | 0
40474 this._a = t
40475 }
40476
40477 RIPEMD160.prototype._digest = function () {
40478 // create padding and handle blocks
40479 this._block[this._blockOffset++] = 0x80
40480 if (this._blockOffset > 56) {
40481 this._block.fill(0, this._blockOffset, 64)
40482 this._update()
40483 this._blockOffset = 0
40484 }
40485
40486 this._block.fill(0, this._blockOffset, 56)
40487 this._block.writeUInt32LE(this._length[0], 56)
40488 this._block.writeUInt32LE(this._length[1], 60)
40489 this._update()
40490
40491 // produce result
40492 var buffer = new Buffer(20)
40493 buffer.writeInt32LE(this._a, 0)
40494 buffer.writeInt32LE(this._b, 4)
40495 buffer.writeInt32LE(this._c, 8)
40496 buffer.writeInt32LE(this._d, 12)
40497 buffer.writeInt32LE(this._e, 16)
40498 return buffer
40499 }
40500
40501 function rotl (x, n) {
40502 return (x << n) | (x >>> (32 - n))
40503 }
40504
40505 function fn1 (a, b, c, d, e, m, k, s) {
40506 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
40507 }
40508
40509 function fn2 (a, b, c, d, e, m, k, s) {
40510 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
40511 }
40512
40513 function fn3 (a, b, c, d, e, m, k, s) {
40514 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
40515 }
40516
40517 function fn4 (a, b, c, d, e, m, k, s) {
40518 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
40519 }
40520
40521 function fn5 (a, b, c, d, e, m, k, s) {
40522 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
40523 }
40524
40525 module.exports = RIPEMD160
40526
40527 }).call(this,require("buffer").Buffer)
40528 },{"buffer":5,"hash-base":95,"inherits":96}],101:[function(require,module,exports){
40529 /* eslint-disable node/no-deprecated-api */
40530 var buffer = require('buffer')
40531 var Buffer = buffer.Buffer
40532
40533 // alternative to using Object.keys for old browsers
40534 function copyProps (src, dst) {
40535 for (var key in src) {
40536 dst[key] = src[key]
40537 }
40538 }
40539 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
40540 module.exports = buffer
40541 } else {
40542 // Copy properties from require('buffer')
40543 copyProps(buffer, exports)
40544 exports.Buffer = SafeBuffer
40545 }
40546
40547 function SafeBuffer (arg, encodingOrOffset, length) {
40548 return Buffer(arg, encodingOrOffset, length)
40549 }
40550
40551 // Copy static methods from Buffer
40552 copyProps(Buffer, SafeBuffer)
40553
40554 SafeBuffer.from = function (arg, encodingOrOffset, length) {
40555 if (typeof arg === 'number') {
40556 throw new TypeError('Argument must not be a number')
40557 }
40558 return Buffer(arg, encodingOrOffset, length)
40559 }
40560
40561 SafeBuffer.alloc = function (size, fill, encoding) {
40562 if (typeof size !== 'number') {
40563 throw new TypeError('Argument must be a number')
40564 }
40565 var buf = Buffer(size)
40566 if (fill !== undefined) {
40567 if (typeof encoding === 'string') {
40568 buf.fill(fill, encoding)
40569 } else {
40570 buf.fill(fill)
40571 }
40572 } else {
40573 buf.fill(0)
40574 }
40575 return buf
40576 }
40577
40578 SafeBuffer.allocUnsafe = function (size) {
40579 if (typeof size !== 'number') {
40580 throw new TypeError('Argument must be a number')
40581 }
40582 return Buffer(size)
40583 }
40584
40585 SafeBuffer.allocUnsafeSlow = function (size) {
40586 if (typeof size !== 'number') {
40587 throw new TypeError('Argument must be a number')
40588 }
40589 return buffer.SlowBuffer(size)
40590 }
40591
40592 },{"buffer":5}],102:[function(require,module,exports){
40593 var Buffer = require('safe-buffer').Buffer
40594
40595 // prototype class for hash functions
40596 function Hash (blockSize, finalSize) {
40597 this._block = Buffer.alloc(blockSize)
40598 this._finalSize = finalSize
40599 this._blockSize = blockSize
40600 this._len = 0
40601 }
40602
40603 Hash.prototype.update = function (data, enc) {
40604 if (typeof data === 'string') {
40605 enc = enc || 'utf8'
40606 data = Buffer.from(data, enc)
40607 }
40608
40609 var block = this._block
40610 var blockSize = this._blockSize
40611 var length = data.length
40612 var accum = this._len
40613
40614 for (var offset = 0; offset < length;) {
40615 var assigned = accum % blockSize
40616 var remainder = Math.min(length - offset, blockSize - assigned)
40617
40618 for (var i = 0; i < remainder; i++) {
40619 block[assigned + i] = data[offset + i]
40620 }
40621
40622 accum += remainder
40623 offset += remainder
40624
40625 if ((accum % blockSize) === 0) {
40626 this._update(block)
40627 }
40628 }
40629
40630 this._len += length
40631 return this
40632 }
40633
40634 Hash.prototype.digest = function (enc) {
40635 var rem = this._len % this._blockSize
40636
40637 this._block[rem] = 0x80
40638
40639 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
40640 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
40641 this._block.fill(0, rem + 1)
40642
40643 if (rem >= this._finalSize) {
40644 this._update(this._block)
40645 this._block.fill(0)
40646 }
40647
40648 var bits = this._len * 8
40649
40650 // uint32
40651 if (bits <= 0xffffffff) {
40652 this._block.writeUInt32BE(bits, this._blockSize - 4)
40653
40654 // uint64
40655 } else {
40656 var lowBits = (bits & 0xffffffff) >>> 0
40657 var highBits = (bits - lowBits) / 0x100000000
40658
40659 this._block.writeUInt32BE(highBits, this._blockSize - 8)
40660 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
40661 }
40662
40663 this._update(this._block)
40664 var hash = this._hash()
40665
40666 return enc ? hash.toString(enc) : hash
40667 }
40668
40669 Hash.prototype._update = function () {
40670 throw new Error('_update must be implemented by subclass')
40671 }
40672
40673 module.exports = Hash
40674
40675 },{"safe-buffer":101}],103:[function(require,module,exports){
40676 var exports = module.exports = function SHA (algorithm) {
40677 algorithm = algorithm.toLowerCase()
40678
40679 var Algorithm = exports[algorithm]
40680 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
40681
40682 return new Algorithm()
40683 }
40684
40685 exports.sha = require('./sha')
40686 exports.sha1 = require('./sha1')
40687 exports.sha224 = require('./sha224')
40688 exports.sha256 = require('./sha256')
40689 exports.sha384 = require('./sha384')
40690 exports.sha512 = require('./sha512')
40691
40692 },{"./sha":104,"./sha1":105,"./sha224":106,"./sha256":107,"./sha384":108,"./sha512":109}],104:[function(require,module,exports){
40693 /*
40694 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
40695 * in FIPS PUB 180-1
40696 * This source code is derived from sha1.js of the same repository.
40697 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
40698 * operation was added.
40699 */
40700
40701 var inherits = require('inherits')
40702 var Hash = require('./hash')
40703 var Buffer = require('safe-buffer').Buffer
40704
40705 var K = [
40706 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40707 ]
40708
40709 var W = new Array(80)
40710
40711 function Sha () {
40712 this.init()
40713 this._w = W
40714
40715 Hash.call(this, 64, 56)
40716 }
40717
40718 inherits(Sha, Hash)
40719
40720 Sha.prototype.init = function () {
40721 this._a = 0x67452301
40722 this._b = 0xefcdab89
40723 this._c = 0x98badcfe
40724 this._d = 0x10325476
40725 this._e = 0xc3d2e1f0
40726
40727 return this
40728 }
40729
40730 function rotl5 (num) {
40731 return (num << 5) | (num >>> 27)
40732 }
40733
40734 function rotl30 (num) {
40735 return (num << 30) | (num >>> 2)
40736 }
40737
40738 function ft (s, b, c, d) {
40739 if (s === 0) return (b & c) | ((~b) & d)
40740 if (s === 2) return (b & c) | (b & d) | (c & d)
40741 return b ^ c ^ d
40742 }
40743
40744 Sha.prototype._update = function (M) {
40745 var W = this._w
40746
40747 var a = this._a | 0
40748 var b = this._b | 0
40749 var c = this._c | 0
40750 var d = this._d | 0
40751 var e = this._e | 0
40752
40753 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40754 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
40755
40756 for (var j = 0; j < 80; ++j) {
40757 var s = ~~(j / 20)
40758 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40759
40760 e = d
40761 d = c
40762 c = rotl30(b)
40763 b = a
40764 a = t
40765 }
40766
40767 this._a = (a + this._a) | 0
40768 this._b = (b + this._b) | 0
40769 this._c = (c + this._c) | 0
40770 this._d = (d + this._d) | 0
40771 this._e = (e + this._e) | 0
40772 }
40773
40774 Sha.prototype._hash = function () {
40775 var H = Buffer.allocUnsafe(20)
40776
40777 H.writeInt32BE(this._a | 0, 0)
40778 H.writeInt32BE(this._b | 0, 4)
40779 H.writeInt32BE(this._c | 0, 8)
40780 H.writeInt32BE(this._d | 0, 12)
40781 H.writeInt32BE(this._e | 0, 16)
40782
40783 return H
40784 }
40785
40786 module.exports = Sha
40787
40788 },{"./hash":102,"inherits":96,"safe-buffer":101}],105:[function(require,module,exports){
40789 /*
40790 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
40791 * in FIPS PUB 180-1
40792 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
40793 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40794 * Distributed under the BSD License
40795 * See http://pajhome.org.uk/crypt/md5 for details.
40796 */
40797
40798 var inherits = require('inherits')
40799 var Hash = require('./hash')
40800 var Buffer = require('safe-buffer').Buffer
40801
40802 var K = [
40803 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40804 ]
40805
40806 var W = new Array(80)
40807
40808 function Sha1 () {
40809 this.init()
40810 this._w = W
40811
40812 Hash.call(this, 64, 56)
40813 }
40814
40815 inherits(Sha1, Hash)
40816
40817 Sha1.prototype.init = function () {
40818 this._a = 0x67452301
40819 this._b = 0xefcdab89
40820 this._c = 0x98badcfe
40821 this._d = 0x10325476
40822 this._e = 0xc3d2e1f0
40823
40824 return this
40825 }
40826
40827 function rotl1 (num) {
40828 return (num << 1) | (num >>> 31)
40829 }
40830
40831 function rotl5 (num) {
40832 return (num << 5) | (num >>> 27)
40833 }
40834
40835 function rotl30 (num) {
40836 return (num << 30) | (num >>> 2)
40837 }
40838
40839 function ft (s, b, c, d) {
40840 if (s === 0) return (b & c) | ((~b) & d)
40841 if (s === 2) return (b & c) | (b & d) | (c & d)
40842 return b ^ c ^ d
40843 }
40844
40845 Sha1.prototype._update = function (M) {
40846 var W = this._w
40847
40848 var a = this._a | 0
40849 var b = this._b | 0
40850 var c = this._c | 0
40851 var d = this._d | 0
40852 var e = this._e | 0
40853
40854 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40855 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
40856
40857 for (var j = 0; j < 80; ++j) {
40858 var s = ~~(j / 20)
40859 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40860
40861 e = d
40862 d = c
40863 c = rotl30(b)
40864 b = a
40865 a = t
40866 }
40867
40868 this._a = (a + this._a) | 0
40869 this._b = (b + this._b) | 0
40870 this._c = (c + this._c) | 0
40871 this._d = (d + this._d) | 0
40872 this._e = (e + this._e) | 0
40873 }
40874
40875 Sha1.prototype._hash = function () {
40876 var H = Buffer.allocUnsafe(20)
40877
40878 H.writeInt32BE(this._a | 0, 0)
40879 H.writeInt32BE(this._b | 0, 4)
40880 H.writeInt32BE(this._c | 0, 8)
40881 H.writeInt32BE(this._d | 0, 12)
40882 H.writeInt32BE(this._e | 0, 16)
40883
40884 return H
40885 }
40886
40887 module.exports = Sha1
40888
40889 },{"./hash":102,"inherits":96,"safe-buffer":101}],106:[function(require,module,exports){
40890 /**
40891 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40892 * in FIPS 180-2
40893 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40894 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40895 *
40896 */
40897
40898 var inherits = require('inherits')
40899 var Sha256 = require('./sha256')
40900 var Hash = require('./hash')
40901 var Buffer = require('safe-buffer').Buffer
40902
40903 var W = new Array(64)
40904
40905 function Sha224 () {
40906 this.init()
40907
40908 this._w = W // new Array(64)
40909
40910 Hash.call(this, 64, 56)
40911 }
40912
40913 inherits(Sha224, Sha256)
40914
40915 Sha224.prototype.init = function () {
40916 this._a = 0xc1059ed8
40917 this._b = 0x367cd507
40918 this._c = 0x3070dd17
40919 this._d = 0xf70e5939
40920 this._e = 0xffc00b31
40921 this._f = 0x68581511
40922 this._g = 0x64f98fa7
40923 this._h = 0xbefa4fa4
40924
40925 return this
40926 }
40927
40928 Sha224.prototype._hash = function () {
40929 var H = Buffer.allocUnsafe(28)
40930
40931 H.writeInt32BE(this._a, 0)
40932 H.writeInt32BE(this._b, 4)
40933 H.writeInt32BE(this._c, 8)
40934 H.writeInt32BE(this._d, 12)
40935 H.writeInt32BE(this._e, 16)
40936 H.writeInt32BE(this._f, 20)
40937 H.writeInt32BE(this._g, 24)
40938
40939 return H
40940 }
40941
40942 module.exports = Sha224
40943
40944 },{"./hash":102,"./sha256":107,"inherits":96,"safe-buffer":101}],107:[function(require,module,exports){
40945 /**
40946 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40947 * in FIPS 180-2
40948 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40949 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40950 *
40951 */
40952
40953 var inherits = require('inherits')
40954 var Hash = require('./hash')
40955 var Buffer = require('safe-buffer').Buffer
40956
40957 var K = [
40958 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
40959 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
40960 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
40961 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
40962 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
40963 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
40964 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
40965 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
40966 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
40967 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
40968 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
40969 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
40970 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
40971 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
40972 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
40973 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
40974 ]
40975
40976 var W = new Array(64)
40977
40978 function Sha256 () {
40979 this.init()
40980
40981 this._w = W // new Array(64)
40982
40983 Hash.call(this, 64, 56)
40984 }
40985
40986 inherits(Sha256, Hash)
40987
40988 Sha256.prototype.init = function () {
40989 this._a = 0x6a09e667
40990 this._b = 0xbb67ae85
40991 this._c = 0x3c6ef372
40992 this._d = 0xa54ff53a
40993 this._e = 0x510e527f
40994 this._f = 0x9b05688c
40995 this._g = 0x1f83d9ab
40996 this._h = 0x5be0cd19
40997
40998 return this
40999 }
41000
41001 function ch (x, y, z) {
41002 return z ^ (x & (y ^ z))
41003 }
41004
41005 function maj (x, y, z) {
41006 return (x & y) | (z & (x | y))
41007 }
41008
41009 function sigma0 (x) {
41010 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
41011 }
41012
41013 function sigma1 (x) {
41014 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
41015 }
41016
41017 function gamma0 (x) {
41018 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
41019 }
41020
41021 function gamma1 (x) {
41022 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
41023 }
41024
41025 Sha256.prototype._update = function (M) {
41026 var W = this._w
41027
41028 var a = this._a | 0
41029 var b = this._b | 0
41030 var c = this._c | 0
41031 var d = this._d | 0
41032 var e = this._e | 0
41033 var f = this._f | 0
41034 var g = this._g | 0
41035 var h = this._h | 0
41036
41037 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
41038 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
41039
41040 for (var j = 0; j < 64; ++j) {
41041 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
41042 var T2 = (sigma0(a) + maj(a, b, c)) | 0
41043
41044 h = g
41045 g = f
41046 f = e
41047 e = (d + T1) | 0
41048 d = c
41049 c = b
41050 b = a
41051 a = (T1 + T2) | 0
41052 }
41053
41054 this._a = (a + this._a) | 0
41055 this._b = (b + this._b) | 0
41056 this._c = (c + this._c) | 0
41057 this._d = (d + this._d) | 0
41058 this._e = (e + this._e) | 0
41059 this._f = (f + this._f) | 0
41060 this._g = (g + this._g) | 0
41061 this._h = (h + this._h) | 0
41062 }
41063
41064 Sha256.prototype._hash = function () {
41065 var H = Buffer.allocUnsafe(32)
41066
41067 H.writeInt32BE(this._a, 0)
41068 H.writeInt32BE(this._b, 4)
41069 H.writeInt32BE(this._c, 8)
41070 H.writeInt32BE(this._d, 12)
41071 H.writeInt32BE(this._e, 16)
41072 H.writeInt32BE(this._f, 20)
41073 H.writeInt32BE(this._g, 24)
41074 H.writeInt32BE(this._h, 28)
41075
41076 return H
41077 }
41078
41079 module.exports = Sha256
41080
41081 },{"./hash":102,"inherits":96,"safe-buffer":101}],108:[function(require,module,exports){
41082 var inherits = require('inherits')
41083 var SHA512 = require('./sha512')
41084 var Hash = require('./hash')
41085 var Buffer = require('safe-buffer').Buffer
41086
41087 var W = new Array(160)
41088
41089 function Sha384 () {
41090 this.init()
41091 this._w = W
41092
41093 Hash.call(this, 128, 112)
41094 }
41095
41096 inherits(Sha384, SHA512)
41097
41098 Sha384.prototype.init = function () {
41099 this._ah = 0xcbbb9d5d
41100 this._bh = 0x629a292a
41101 this._ch = 0x9159015a
41102 this._dh = 0x152fecd8
41103 this._eh = 0x67332667
41104 this._fh = 0x8eb44a87
41105 this._gh = 0xdb0c2e0d
41106 this._hh = 0x47b5481d
41107
41108 this._al = 0xc1059ed8
41109 this._bl = 0x367cd507
41110 this._cl = 0x3070dd17
41111 this._dl = 0xf70e5939
41112 this._el = 0xffc00b31
41113 this._fl = 0x68581511
41114 this._gl = 0x64f98fa7
41115 this._hl = 0xbefa4fa4
41116
41117 return this
41118 }
41119
41120 Sha384.prototype._hash = function () {
41121 var H = Buffer.allocUnsafe(48)
41122
41123 function writeInt64BE (h, l, offset) {
41124 H.writeInt32BE(h, offset)
41125 H.writeInt32BE(l, offset + 4)
41126 }
41127
41128 writeInt64BE(this._ah, this._al, 0)
41129 writeInt64BE(this._bh, this._bl, 8)
41130 writeInt64BE(this._ch, this._cl, 16)
41131 writeInt64BE(this._dh, this._dl, 24)
41132 writeInt64BE(this._eh, this._el, 32)
41133 writeInt64BE(this._fh, this._fl, 40)
41134
41135 return H
41136 }
41137
41138 module.exports = Sha384
41139
41140 },{"./hash":102,"./sha512":109,"inherits":96,"safe-buffer":101}],109:[function(require,module,exports){
41141 var inherits = require('inherits')
41142 var Hash = require('./hash')
41143 var Buffer = require('safe-buffer').Buffer
41144
41145 var K = [
41146 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
41147 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
41148 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
41149 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
41150 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
41151 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
41152 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
41153 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
41154 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
41155 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
41156 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
41157 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
41158 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
41159 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
41160 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
41161 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
41162 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
41163 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
41164 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
41165 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
41166 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
41167 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
41168 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
41169 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
41170 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
41171 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
41172 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
41173 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
41174 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
41175 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
41176 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
41177 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
41178 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
41179 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41180 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
41181 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41182 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
41183 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41184 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
41185 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
41186 ]
41187
41188 var W = new Array(160)
41189
41190 function Sha512 () {
41191 this.init()
41192 this._w = W
41193
41194 Hash.call(this, 128, 112)
41195 }
41196
41197 inherits(Sha512, Hash)
41198
41199 Sha512.prototype.init = function () {
41200 this._ah = 0x6a09e667
41201 this._bh = 0xbb67ae85
41202 this._ch = 0x3c6ef372
41203 this._dh = 0xa54ff53a
41204 this._eh = 0x510e527f
41205 this._fh = 0x9b05688c
41206 this._gh = 0x1f83d9ab
41207 this._hh = 0x5be0cd19
41208
41209 this._al = 0xf3bcc908
41210 this._bl = 0x84caa73b
41211 this._cl = 0xfe94f82b
41212 this._dl = 0x5f1d36f1
41213 this._el = 0xade682d1
41214 this._fl = 0x2b3e6c1f
41215 this._gl = 0xfb41bd6b
41216 this._hl = 0x137e2179
41217
41218 return this
41219 }
41220
41221 function Ch (x, y, z) {
41222 return z ^ (x & (y ^ z))
41223 }
41224
41225 function maj (x, y, z) {
41226 return (x & y) | (z & (x | y))
41227 }
41228
41229 function sigma0 (x, xl) {
41230 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
41231 }
41232
41233 function sigma1 (x, xl) {
41234 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
41235 }
41236
41237 function Gamma0 (x, xl) {
41238 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
41239 }
41240
41241 function Gamma0l (x, xl) {
41242 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
41243 }
41244
41245 function Gamma1 (x, xl) {
41246 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
41247 }
41248
41249 function Gamma1l (x, xl) {
41250 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
41251 }
41252
41253 function getCarry (a, b) {
41254 return (a >>> 0) < (b >>> 0) ? 1 : 0
41255 }
41256
41257 Sha512.prototype._update = function (M) {
41258 var W = this._w
41259
41260 var ah = this._ah | 0
41261 var bh = this._bh | 0
41262 var ch = this._ch | 0
41263 var dh = this._dh | 0
41264 var eh = this._eh | 0
41265 var fh = this._fh | 0
41266 var gh = this._gh | 0
41267 var hh = this._hh | 0
41268
41269 var al = this._al | 0
41270 var bl = this._bl | 0
41271 var cl = this._cl | 0
41272 var dl = this._dl | 0
41273 var el = this._el | 0
41274 var fl = this._fl | 0
41275 var gl = this._gl | 0
41276 var hl = this._hl | 0
41277
41278 for (var i = 0; i < 32; i += 2) {
41279 W[i] = M.readInt32BE(i * 4)
41280 W[i + 1] = M.readInt32BE(i * 4 + 4)
41281 }
41282 for (; i < 160; i += 2) {
41283 var xh = W[i - 15 * 2]
41284 var xl = W[i - 15 * 2 + 1]
41285 var gamma0 = Gamma0(xh, xl)
41286 var gamma0l = Gamma0l(xl, xh)
41287
41288 xh = W[i - 2 * 2]
41289 xl = W[i - 2 * 2 + 1]
41290 var gamma1 = Gamma1(xh, xl)
41291 var gamma1l = Gamma1l(xl, xh)
41292
41293 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
41294 var Wi7h = W[i - 7 * 2]
41295 var Wi7l = W[i - 7 * 2 + 1]
41296
41297 var Wi16h = W[i - 16 * 2]
41298 var Wi16l = W[i - 16 * 2 + 1]
41299
41300 var Wil = (gamma0l + Wi7l) | 0
41301 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
41302 Wil = (Wil + gamma1l) | 0
41303 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
41304 Wil = (Wil + Wi16l) | 0
41305 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
41306
41307 W[i] = Wih
41308 W[i + 1] = Wil
41309 }
41310
41311 for (var j = 0; j < 160; j += 2) {
41312 Wih = W[j]
41313 Wil = W[j + 1]
41314
41315 var majh = maj(ah, bh, ch)
41316 var majl = maj(al, bl, cl)
41317
41318 var sigma0h = sigma0(ah, al)
41319 var sigma0l = sigma0(al, ah)
41320 var sigma1h = sigma1(eh, el)
41321 var sigma1l = sigma1(el, eh)
41322
41323 // t1 = h + sigma1 + ch + K[j] + W[j]
41324 var Kih = K[j]
41325 var Kil = K[j + 1]
41326
41327 var chh = Ch(eh, fh, gh)
41328 var chl = Ch(el, fl, gl)
41329
41330 var t1l = (hl + sigma1l) | 0
41331 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
41332 t1l = (t1l + chl) | 0
41333 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
41334 t1l = (t1l + Kil) | 0
41335 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
41336 t1l = (t1l + Wil) | 0
41337 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
41338
41339 // t2 = sigma0 + maj
41340 var t2l = (sigma0l + majl) | 0
41341 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
41342
41343 hh = gh
41344 hl = gl
41345 gh = fh
41346 gl = fl
41347 fh = eh
41348 fl = el
41349 el = (dl + t1l) | 0
41350 eh = (dh + t1h + getCarry(el, dl)) | 0
41351 dh = ch
41352 dl = cl
41353 ch = bh
41354 cl = bl
41355 bh = ah
41356 bl = al
41357 al = (t1l + t2l) | 0
41358 ah = (t1h + t2h + getCarry(al, t1l)) | 0
41359 }
41360
41361 this._al = (this._al + al) | 0
41362 this._bl = (this._bl + bl) | 0
41363 this._cl = (this._cl + cl) | 0
41364 this._dl = (this._dl + dl) | 0
41365 this._el = (this._el + el) | 0
41366 this._fl = (this._fl + fl) | 0
41367 this._gl = (this._gl + gl) | 0
41368 this._hl = (this._hl + hl) | 0
41369
41370 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
41371 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
41372 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
41373 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
41374 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
41375 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
41376 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
41377 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
41378 }
41379
41380 Sha512.prototype._hash = function () {
41381 var H = Buffer.allocUnsafe(64)
41382
41383 function writeInt64BE (h, l, offset) {
41384 H.writeInt32BE(h, offset)
41385 H.writeInt32BE(l, offset + 4)
41386 }
41387
41388 writeInt64BE(this._ah, this._al, 0)
41389 writeInt64BE(this._bh, this._bl, 8)
41390 writeInt64BE(this._ch, this._cl, 16)
41391 writeInt64BE(this._dh, this._dl, 24)
41392 writeInt64BE(this._eh, this._el, 32)
41393 writeInt64BE(this._fh, this._fl, 40)
41394 writeInt64BE(this._gh, this._gl, 48)
41395 writeInt64BE(this._hh, this._hl, 56)
41396
41397 return H
41398 }
41399
41400 module.exports = Sha512
41401
41402 },{"./hash":102,"inherits":96,"safe-buffer":101}],110:[function(require,module,exports){
41403 var native = require('./native')
41404
41405 function getTypeName (fn) {
41406 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
41407 }
41408
41409 function getValueTypeName (value) {
41410 return native.Nil(value) ? '' : getTypeName(value.constructor)
41411 }
41412
41413 function getValue (value) {
41414 if (native.Function(value)) return ''
41415 if (native.String(value)) return JSON.stringify(value)
41416 if (value && native.Object(value)) return ''
41417 return value
41418 }
41419
41420 function tfJSON (type) {
41421 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
41422 if (native.Array(type)) return 'Array'
41423 if (type && native.Object(type)) return 'Object'
41424
41425 return type !== undefined ? type : ''
41426 }
41427
41428 function tfErrorString (type, value, valueTypeName) {
41429 var valueJson = getValue(value)
41430
41431 return 'Expected ' + tfJSON(type) + ', got' +
41432 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
41433 (valueJson !== '' ? ' ' + valueJson : '')
41434 }
41435
41436 function TfTypeError (type, value, valueTypeName) {
41437 valueTypeName = valueTypeName || getValueTypeName(value)
41438 this.message = tfErrorString(type, value, valueTypeName)
41439
41440 Error.captureStackTrace(this, TfTypeError)
41441 this.__type = type
41442 this.__value = value
41443 this.__valueTypeName = valueTypeName
41444 }
41445
41446 TfTypeError.prototype = Object.create(Error.prototype)
41447 TfTypeError.prototype.constructor = TfTypeError
41448
41449 function tfPropertyErrorString (type, label, name, value, valueTypeName) {
41450 var description = '" of type '
41451 if (label === 'key') description = '" with key type '
41452
41453 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
41454 }
41455
41456 function TfPropertyTypeError (type, property, label, value, valueTypeName) {
41457 if (type) {
41458 valueTypeName = valueTypeName || getValueTypeName(value)
41459 this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
41460 } else {
41461 this.message = 'Unexpected property "' + property + '"'
41462 }
41463
41464 Error.captureStackTrace(this, TfTypeError)
41465 this.__label = label
41466 this.__property = property
41467 this.__type = type
41468 this.__value = value
41469 this.__valueTypeName = valueTypeName
41470 }
41471
41472 TfPropertyTypeError.prototype = Object.create(Error.prototype)
41473 TfPropertyTypeError.prototype.constructor = TfTypeError
41474
41475 function tfCustomError (expected, actual) {
41476 return new TfTypeError(expected, {}, actual)
41477 }
41478
41479 function tfSubError (e, property, label) {
41480 // sub child?
41481 if (e instanceof TfPropertyTypeError) {
41482 property = property + '.' + e.__property
41483
41484 e = new TfPropertyTypeError(
41485 e.__type, property, e.__label, e.__value, e.__valueTypeName
41486 )
41487
41488 // child?
41489 } else if (e instanceof TfTypeError) {
41490 e = new TfPropertyTypeError(
41491 e.__type, property, label, e.__value, e.__valueTypeName
41492 )
41493 }
41494
41495 Error.captureStackTrace(e)
41496 return e
41497 }
41498
41499 module.exports = {
41500 TfTypeError: TfTypeError,
41501 TfPropertyTypeError: TfPropertyTypeError,
41502 tfCustomError: tfCustomError,
41503 tfSubError: tfSubError,
41504 tfJSON: tfJSON,
41505 getValueTypeName: getValueTypeName
41506 }
41507
41508 },{"./native":113}],111:[function(require,module,exports){
41509 (function (Buffer){
41510 var NATIVE = require('./native')
41511 var ERRORS = require('./errors')
41512
41513 function _Buffer (value) {
41514 return Buffer.isBuffer(value)
41515 }
41516
41517 function Hex (value) {
41518 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
41519 }
41520
41521 function _LengthN (type, length) {
41522 var name = type.toJSON()
41523
41524 function Length (value) {
41525 if (!type(value)) return false
41526 if (value.length === length) return true
41527
41528 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
41529 }
41530 Length.toJSON = function () { return name }
41531
41532 return Length
41533 }
41534
41535 var _ArrayN = _LengthN.bind(null, NATIVE.Array)
41536 var _BufferN = _LengthN.bind(null, _Buffer)
41537 var _HexN = _LengthN.bind(null, Hex)
41538 var _StringN = _LengthN.bind(null, NATIVE.String)
41539
41540 var UINT53_MAX = Math.pow(2, 53) - 1
41541
41542 function Finite (value) {
41543 return typeof value === 'number' && isFinite(value)
41544 }
41545 function Int8 (value) { return ((value << 24) >> 24) === value }
41546 function Int16 (value) { return ((value << 16) >> 16) === value }
41547 function Int32 (value) { return (value | 0) === value }
41548 function UInt8 (value) { return (value & 0xff) === value }
41549 function UInt16 (value) { return (value & 0xffff) === value }
41550 function UInt32 (value) { return (value >>> 0) === value }
41551 function UInt53 (value) {
41552 return typeof value === 'number' &&
41553 value >= 0 &&
41554 value <= UINT53_MAX &&
41555 Math.floor(value) === value
41556 }
41557
41558 var types = {
41559 ArrayN: _ArrayN,
41560 Buffer: _Buffer,
41561 BufferN: _BufferN,
41562 Finite: Finite,
41563 Hex: Hex,
41564 HexN: _HexN,
41565 Int8: Int8,
41566 Int16: Int16,
41567 Int32: Int32,
41568 StringN: _StringN,
41569 UInt8: UInt8,
41570 UInt16: UInt16,
41571 UInt32: UInt32,
41572 UInt53: UInt53
41573 }
41574
41575 for (var typeName in types) {
41576 types[typeName].toJSON = function (t) {
41577 return t
41578 }.bind(null, typeName)
41579 }
41580
41581 module.exports = types
41582
41583 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
41584 },{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"./errors":110,"./native":113}],112:[function(require,module,exports){
41585 var ERRORS = require('./errors')
41586 var NATIVE = require('./native')
41587
41588 // short-hand
41589 var tfJSON = ERRORS.tfJSON
41590 var TfTypeError = ERRORS.TfTypeError
41591 var TfPropertyTypeError = ERRORS.TfPropertyTypeError
41592 var tfSubError = ERRORS.tfSubError
41593 var getValueTypeName = ERRORS.getValueTypeName
41594
41595 var TYPES = {
41596 arrayOf: function arrayOf (type) {
41597 type = compile(type)
41598
41599 function _arrayOf (array, strict) {
41600 if (!NATIVE.Array(array)) return false
41601 if (NATIVE.Nil(array)) return false
41602
41603 return array.every(function (value, i) {
41604 try {
41605 return typeforce(type, value, strict)
41606 } catch (e) {
41607 throw tfSubError(e, i)
41608 }
41609 })
41610 }
41611 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
41612
41613 return _arrayOf
41614 },
41615
41616 maybe: function maybe (type) {
41617 type = compile(type)
41618
41619 function _maybe (value, strict) {
41620 return NATIVE.Nil(value) || type(value, strict, maybe)
41621 }
41622 _maybe.toJSON = function () { return '?' + tfJSON(type) }
41623
41624 return _maybe
41625 },
41626
41627 map: function map (propertyType, propertyKeyType) {
41628 propertyType = compile(propertyType)
41629 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
41630
41631 function _map (value, strict) {
41632 if (!NATIVE.Object(value)) return false
41633 if (NATIVE.Nil(value)) return false
41634
41635 for (var propertyName in value) {
41636 try {
41637 if (propertyKeyType) {
41638 typeforce(propertyKeyType, propertyName, strict)
41639 }
41640 } catch (e) {
41641 throw tfSubError(e, propertyName, 'key')
41642 }
41643
41644 try {
41645 var propertyValue = value[propertyName]
41646 typeforce(propertyType, propertyValue, strict)
41647 } catch (e) {
41648 throw tfSubError(e, propertyName)
41649 }
41650 }
41651
41652 return true
41653 }
41654
41655 if (propertyKeyType) {
41656 _map.toJSON = function () {
41657 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
41658 }
41659 } else {
41660 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
41661 }
41662
41663 return _map
41664 },
41665
41666 object: function object (uncompiled) {
41667 var type = {}
41668
41669 for (var typePropertyName in uncompiled) {
41670 type[typePropertyName] = compile(uncompiled[typePropertyName])
41671 }
41672
41673 function _object (value, strict) {
41674 if (!NATIVE.Object(value)) return false
41675 if (NATIVE.Nil(value)) return false
41676
41677 var propertyName
41678
41679 try {
41680 for (propertyName in type) {
41681 var propertyType = type[propertyName]
41682 var propertyValue = value[propertyName]
41683
41684 typeforce(propertyType, propertyValue, strict)
41685 }
41686 } catch (e) {
41687 throw tfSubError(e, propertyName)
41688 }
41689
41690 if (strict) {
41691 for (propertyName in value) {
41692 if (type[propertyName]) continue
41693
41694 throw new TfPropertyTypeError(undefined, propertyName)
41695 }
41696 }
41697
41698 return true
41699 }
41700 _object.toJSON = function () { return tfJSON(type) }
41701
41702 return _object
41703 },
41704
41705 oneOf: function oneOf () {
41706 var types = [].slice.call(arguments).map(compile)
41707
41708 function _oneOf (value, strict) {
41709 return types.some(function (type) {
41710 try {
41711 return typeforce(type, value, strict)
41712 } catch (e) {
41713 return false
41714 }
41715 })
41716 }
41717 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
41718
41719 return _oneOf
41720 },
41721
41722 quacksLike: function quacksLike (type) {
41723 function _quacksLike (value) {
41724 return type === getValueTypeName(value)
41725 }
41726 _quacksLike.toJSON = function () { return type }
41727
41728 return _quacksLike
41729 },
41730
41731 tuple: function tuple () {
41732 var types = [].slice.call(arguments).map(compile)
41733
41734 function _tuple (values, strict) {
41735 if (NATIVE.Nil(values)) return false
41736 if (NATIVE.Nil(values.length)) return false
41737 if (strict && (values.length !== types.length)) return false
41738
41739 return types.every(function (type, i) {
41740 try {
41741 return typeforce(type, values[i], strict)
41742 } catch (e) {
41743 throw tfSubError(e, i)
41744 }
41745 })
41746 }
41747 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
41748
41749 return _tuple
41750 },
41751
41752 value: function value (expected) {
41753 function _value (actual) {
41754 return actual === expected
41755 }
41756 _value.toJSON = function () { return expected }
41757
41758 return _value
41759 }
41760 }
41761
41762 function compile (type) {
41763 if (NATIVE.String(type)) {
41764 if (type[0] === '?') return TYPES.maybe(type.slice(1))
41765
41766 return NATIVE[type] || TYPES.quacksLike(type)
41767 } else if (type && NATIVE.Object(type)) {
41768 if (NATIVE.Array(type)) return TYPES.arrayOf(type[0])
41769
41770 return TYPES.object(type)
41771 } else if (NATIVE.Function(type)) {
41772 return type
41773 }
41774
41775 return TYPES.value(type)
41776 }
41777
41778 function typeforce (type, value, strict, surrogate) {
41779 if (NATIVE.Function(type)) {
41780 if (type(value, strict)) return true
41781
41782 throw new TfTypeError(surrogate || type, value)
41783 }
41784
41785 // JIT
41786 return typeforce(compile(type), value, strict)
41787 }
41788
41789 // assign types to typeforce function
41790 for (var typeName in NATIVE) {
41791 typeforce[typeName] = NATIVE[typeName]
41792 }
41793
41794 for (typeName in TYPES) {
41795 typeforce[typeName] = TYPES[typeName]
41796 }
41797
41798 var EXTRA = require('./extra')
41799 for (typeName in EXTRA) {
41800 typeforce[typeName] = EXTRA[typeName]
41801 }
41802
41803 // async wrapper
41804 function __async (type, value, strict, callback) {
41805 // default to falsy strict if using shorthand overload
41806 if (typeof strict === 'function') return __async(type, value, false, strict)
41807
41808 try {
41809 typeforce(type, value, strict)
41810 } catch (e) {
41811 return callback(e)
41812 }
41813
41814 callback()
41815 }
41816
41817 typeforce.async = __async
41818 typeforce.compile = compile
41819 typeforce.TfTypeError = TfTypeError
41820 typeforce.TfPropertyTypeError = TfPropertyTypeError
41821
41822 module.exports = typeforce
41823
41824 },{"./errors":110,"./extra":111,"./native":113}],113:[function(require,module,exports){
41825 var types = {
41826 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
41827 Boolean: function (value) { return typeof value === 'boolean' },
41828 Function: function (value) { return typeof value === 'function' },
41829 Nil: function (value) { return value === undefined || value === null },
41830 Number: function (value) { return typeof value === 'number' },
41831 Object: function (value) { return typeof value === 'object' },
41832 String: function (value) { return typeof value === 'string' },
41833 '': function () { return true }
41834 }
41835
41836 // TODO: deprecate
41837 types.Null = types.Nil
41838
41839 for (var typeName in types) {
41840 types[typeName].toJSON = function (t) {
41841 return t
41842 }.bind(null, typeName)
41843 }
41844
41845 module.exports = types
41846
41847 },{}],114:[function(require,module,exports){
41848 'use strict'
41849 var Buffer = require('safe-buffer').Buffer
41850
41851 // Number.MAX_SAFE_INTEGER
41852 var MAX_SAFE_INTEGER = 9007199254740991
41853
41854 function checkUInt53 (n) {
41855 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
41856 }
41857
41858 function encode (number, buffer, offset) {
41859 checkUInt53(number)
41860
41861 if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(number))
41862 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
41863 if (!offset) offset = 0
41864
41865 // 8 bit
41866 if (number < 0xfd) {
41867 buffer.writeUInt8(number, offset)
41868 encode.bytes = 1
41869
41870 // 16 bit
41871 } else if (number <= 0xffff) {
41872 buffer.writeUInt8(0xfd, offset)
41873 buffer.writeUInt16LE(number, offset + 1)
41874 encode.bytes = 3
41875
41876 // 32 bit
41877 } else if (number <= 0xffffffff) {
41878 buffer.writeUInt8(0xfe, offset)
41879 buffer.writeUInt32LE(number, offset + 1)
41880 encode.bytes = 5
41881
41882 // 64 bit
41883 } else {
41884 buffer.writeUInt8(0xff, offset)
41885 buffer.writeUInt32LE(number >>> 0, offset + 1)
41886 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
41887 encode.bytes = 9
41888 }
41889
41890 return buffer
41891 }
41892
41893 function decode (buffer, offset) {
41894 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
41895 if (!offset) offset = 0
41896
41897 var first = buffer.readUInt8(offset)
41898
41899 // 8 bit
41900 if (first < 0xfd) {
41901 decode.bytes = 1
41902 return first
41903
41904 // 16 bit
41905 } else if (first === 0xfd) {
41906 decode.bytes = 3
41907 return buffer.readUInt16LE(offset + 1)
41908
41909 // 32 bit
41910 } else if (first === 0xfe) {
41911 decode.bytes = 5
41912 return buffer.readUInt32LE(offset + 1)
41913
41914 // 64 bit
41915 } else {
41916 decode.bytes = 9
41917 var lo = buffer.readUInt32LE(offset + 1)
41918 var hi = buffer.readUInt32LE(offset + 5)
41919 var number = hi * 0x0100000000 + lo
41920 checkUInt53(number)
41921
41922 return number
41923 }
41924 }
41925
41926 function encodingLength (number) {
41927 checkUInt53(number)
41928
41929 return (
41930 number < 0xfd ? 1
41931 : number <= 0xffff ? 3
41932 : number <= 0xffffffff ? 5
41933 : 9
41934 )
41935 }
41936
41937 module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
41938
41939 },{"safe-buffer":101}],115:[function(require,module,exports){
41940 (function (Buffer){
41941 var bs58check = require('bs58check')
41942
41943 function decodeRaw (buffer, version) {
41944 // check version only if defined
41945 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
41946
41947 // uncompressed
41948 if (buffer.length === 33) {
41949 return {
41950 version: buffer[0],
41951 privateKey: buffer.slice(1, 33),
41952 compressed: false
41953 }
41954 }
41955
41956 // invalid length
41957 if (buffer.length !== 34) throw new Error('Invalid WIF length')
41958
41959 // invalid compression flag
41960 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
41961
41962 return {
41963 version: buffer[0],
41964 privateKey: buffer.slice(1, 33),
41965 compressed: true
41966 }
41967 }
41968
41969 function encodeRaw (version, privateKey, compressed) {
41970 var result = new Buffer(compressed ? 34 : 33)
41971
41972 result.writeUInt8(version, 0)
41973 privateKey.copy(result, 1)
41974
41975 if (compressed) {
41976 result[33] = 0x01
41977 }
41978
41979 return result
41980 }
41981
41982 function decode (string, version) {
41983 return decodeRaw(bs58check.decode(string), version)
41984 }
41985
41986 function encode (version, privateKey, compressed) {
41987 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
41988
41989 return bs58check.encode(
41990 encodeRaw(
41991 version.version,
41992 version.privateKey,
41993 version.compressed
41994 )
41995 )
41996 }
41997
41998 module.exports = {
41999 decode: decode,
42000 decodeRaw: decodeRaw,
42001 encode: encode,
42002 encodeRaw: encodeRaw
42003 }
42004
42005 }).call(this,require("buffer").Buffer)
42006 },{"bs58check":83,"buffer":5}]},{},[34])(34)
42007 });</script>
42008 <script>bitcoinjs.bitcoin.networks.shadow = {
42009 messagePrefix: 'unused',
42010 bip32: {
42011 public: 0xEE80286A,
42012 private: 0xEE8031E8
42013 },
42014 pubKeyHash: 0x3f,
42015 scriptHash: 0x7d,
42016 wif: 0xbf
42017 };
42018
42019 bitcoinjs.bitcoin.networks.shadowtn = {
42020 messagePrefix: 'unused',
42021 bip32: {
42022 public: 0x76C0FDFB,
42023 private: 0x76C1077A
42024 },
42025 pubKeyHash: 0x7f,
42026 scriptHash: 0xc4,
42027 wif: 0xff
42028 };
42029
42030 bitcoinjs.bitcoin.networks.clam = {
42031 messagePrefix: 'unused',
42032 bip32: {
42033 public: 0xa8c26d64,
42034 private: 0xa8c17826
42035 },
42036 pubKeyHash: 0x89,
42037 scriptHash: 0x00, // TODO set this correctly
42038 wif: 0x85
42039 };
42040
42041 bitcoinjs.bitcoin.networks.crown = {
42042 messagePrefix: 'unused',
42043 bip32: {
42044 public: 0x0488b21e,
42045 private: 0x0488ade4
42046 },
42047 pubKeyHash: 0x00,
42048 scriptHash: 0x05,
42049 wif: 0x80
42050 };
42051
42052 bitcoinjs.bitcoin.networks.dash = {
42053 messagePrefix: 'unused',
42054 bip32: {
42055 public: 0x0488b21e,
42056 private: 0x0488ade4
42057 },
42058 pubKeyHash: 0x4c,
42059 scriptHash: 0x10,
42060 wif: 0xcc
42061 };
42062
42063 bitcoinjs.bitcoin.networks.maza = {
42064 messagePrefix: 'unused',
42065 bip32: {
42066 public: 0x0488b21e,
42067 private: 0x0488ade4
42068 },
42069 pubKeyHash: 0x32,
42070 scriptHash: 0x09,
42071 wif: 0xe0
42072 };
42073
42074 bitcoinjs.bitcoin.networks.dashtn = {
42075 messagePrefix: 'unused',
42076 bip32: {
42077 public: 0x043587cf,
42078 private: 0x04358394
42079 },
42080 pubKeyHash: 0x8c,
42081 scriptHash: 0x13,
42082 wif: 0xef
42083 };
42084
42085 bitcoinjs.bitcoin.networks.game = {
42086 messagePrefix: 'unused',
42087 bip32: {
42088 public: 0x0488b21e,
42089 private: 0x0488ade4
42090 },
42091 pubKeyHash: 0x26,
42092 scriptHash: 0x05,
42093 wif: 0xa6
42094 };
42095
42096 bitcoinjs.bitcoin.networks.namecoin = {
42097 messagePrefix: 'unused',
42098 bip32: {
42099 public: 0x0488b21e,
42100 private: 0x0488ade4
42101 },
42102 pubKeyHash: 0x34,
42103 scriptHash: 0x00, // TODO set this correctly
42104 wif: 0x80
42105 };
42106
42107 bitcoinjs.bitcoin.networks.peercoin = {
42108 messagePrefix: 'unused',
42109 bip32: {
42110 public: 0x0488b21e,
42111 private: 0x0488ade4
42112 },
42113 pubKeyHash: 0x37,
42114 scriptHash: 0x00, // TODO set this correctly
42115 wif: 0xb7
42116 };
42117
42118 bitcoinjs.bitcoin.networks.axe = {
42119 messagePrefix: 'unused',
42120 bip32: {
42121 public: 0x0488b21e,
42122 private: 0x0488ade4
42123 },
42124 pubKeyHash: 0x4B,
42125 scriptHash: 0xCB, // TODO set this correctly
42126 wif: 0xCB
42127 };
42128
42129 bitcoinjs.bitcoin.networks.slimcoin = {
42130 messagePrefix: 'unused',
42131 bip32: {
42132 public: 0xef6adf10,
42133 private: 0xef69ea80
42134 },
42135 pubKeyHash: 0x3f,
42136 scriptHash: 0x7d,
42137 wif: 0x46
42138 };
42139
42140 bitcoinjs.bitcoin.networks.slimcointn = {
42141 messagePrefix: 'unused',
42142 bip32: {
42143 public: 0x043587CF,
42144 private: 0x04358394
42145 },
42146 pubKeyHash: 0x6f,
42147 scriptHash: 0xc4,
42148 wif: 0x57
42149 };
42150
42151 bitcoinjs.bitcoin.networks.dogecoin = {
42152 messagePrefix: '\x19Dogecoin Signed Message:\n',
42153 bip32: {
42154 public: 0x02facafd,
42155 private: 0x02fac398
42156 },
42157 pubKeyHash: 0x1e,
42158 scriptHash: 0x16,
42159 wif: 0x9e
42160 };
42161
42162 bitcoinjs.bitcoin.networks.denarius = {
42163 messagePrefix: '\x19Denarius Signed Message:\n',
42164 bip32: {
42165 public: 0x0488b21e,
42166 private: 0x0488ade4
42167 },
42168 pubKeyHash: 0x1e,
42169 scriptHash: 0x5a,
42170 wif: 0x9e
42171 };
42172
42173 bitcoinjs.bitcoin.networks.neblio = {
42174 messagePrefix: '\x18Neblio Signed Message:\n',
42175 bip32: {
42176 public: 0x0488b21e,
42177 private: 0x0488ade4
42178 },
42179 pubKeyHash: 0x35,
42180 scriptHash: 0x70,
42181 wif: 0xb5
42182 };
42183
42184 bitcoinjs.bitcoin.networks.viacoin = {
42185 messagePrefix: '\x18Viacoin Signed Message:\n',
42186 bip32: {
42187 public: 0x0488b21e,
42188 private: 0x0488ade4
42189 },
42190 pubKeyHash: 0x47,
42191 scriptHash: 0x21,
42192 wif: 0xc7
42193 };
42194
42195 bitcoinjs.bitcoin.networks.viacointestnet = {
42196 messagePrefix: '\x18Viacoin Signed Message:\n',
42197 bip32: {
42198 public: 0x043587cf,
42199 private: 0x04358394
42200 },
42201 pubKeyHash: 0x7f,
42202 scriptHash: 0xc4,
42203 wif: 0xff
42204 };
42205
42206 bitcoinjs.bitcoin.networks.gamerscoin = {
42207 messagePrefix: '\x19Gamerscoin Signed Message:\n',
42208 bip32: {
42209 public: 0x019da462,
42210 private: 0x019d9cfe
42211 },
42212 pubKeyHash: 0x26,
42213 scriptHash: 0x05,
42214 wif: 0xA6
42215 };
42216
42217 bitcoinjs.bitcoin.networks.jumbucks = {
42218 messagePrefix: '\x19Jumbucks Signed Message:\n',
42219 bip32: {
42220 public: 0x037a689a,
42221 private: 0x037a6460
42222 },
42223 pubKeyHash: 0x2b,
42224 scriptHash: 0x05,
42225 wif: 0xab
42226 };
42227
42228 bitcoinjs.bitcoin.networks.zetacoin = {
42229 messagePrefix: '\x18Zetacoin Signed Message:\n',
42230 bip32: {
42231 public: 0x0488b21e,
42232 private: 0x0488ade4
42233 },
42234 pubKeyHash: 0x50,
42235 scriptHash: 0x09,
42236 wif: 0xe0
42237 };
42238
42239 bitcoinjs.bitcoin.networks.myriadcoin = {
42240 messagePrefix: 'unused',
42241 bip32: {
42242 public: 0x0488b21e,
42243 private: 0x0488ade4
42244 },
42245 pubKeyHash: 0x32,
42246 scriptHash: 0x00, // TODO set this correctly
42247 wif: 0xb2
42248 };
42249
42250
42251 bitcoinjs.bitcoin.networks.onixcoin = {
42252 messagePrefix: 'unused',
42253 bip32: {
42254 public: 0x049d7cb2,
42255 private: 0x049d7878
42256 },
42257 pubKeyHash: 0x4B,
42258 scriptHash: 0x05,
42259 wif: 0x80
42260 };
42261
42262 bitcoinjs.bitcoin.networks.pivx = {
42263 messagePrefix: 'unused',
42264 bip32: {
42265 public: 0x022d2533,
42266 private: 0x0221312b
42267 },
42268 pubKeyHash: 0x1e,
42269 scriptHash: 0x0d,
42270 wif: 0xd4
42271 };
42272
42273 bitcoinjs.bitcoin.networks.pivxtestnet = {
42274 messagePrefix: 'unused',
42275 bip32: {
42276 public: 0x3a8061a0,
42277 private: 0x3a805837
42278 },
42279 pubKeyHash: 0x8b,
42280 scriptHash: 0x13,
42281 wif: 0xef
42282 };
42283
42284 bitcoinjs.bitcoin.networks.fujicoin = {
42285 messagePrefix: '\x19FujiCoin Signed Message:\n',
42286 bip32: {
42287 public: 0x0488b21e,
42288 private: 0x0488ade4
42289 },
42290 pubKeyHash: 0x24,
42291 scriptHash: 0x10,
42292 wif: 0xa4
42293 };
42294
42295 bitcoinjs.bitcoin.networks.nubits = {
42296 messagePrefix: '\x18Nu Signed Message:\n',
42297 bip32: {
42298 public: 0x0488b21e,
42299 private: 0x0488ade4
42300 },
42301 pubKeyHash: 0x19,
42302 scriptHash: 0x1a,
42303 wif: 0x96,
42304 };
42305
42306 bitcoinjs.bitcoin.networks.bgold = {
42307 messagePrefix: 'unused',
42308 bip32: {
42309 public: 0x0488b21e,
42310 private: 0x0488ade4
42311 },
42312 pubKeyHash: 38,
42313 scriptHash: 23,
42314 wif: 128
42315 };
42316
42317 bitcoinjs.bitcoin.networks.bitcoinCashBitbpay = {
42318 messagePrefix: '\x18Bitcoin Signed Message:\n',
42319 bip32: {
42320 public: 0x0488b21e,
42321 private: 0x0488ade4
42322 },
42323 pubKeyHash: 0x1c,
42324 scriptHash: 0x28,
42325 wif: 0x80
42326 };
42327
42328 bitcoinjs.bitcoin.networks.monacoin = {
42329 messagePrefix: '\x18Monacoin Signed Message:\n',
42330 bip32: {
42331 public: 0x0488b21e,
42332 private: 0x0488ade4
42333 },
42334 pubKeyHash: 0x32,
42335 scriptHash: 0x37,
42336 wif: 0xb0
42337 };
42338
42339 bitcoinjs.bitcoin.networks.litecoinXprv = {
42340 messagePrefix: '\x19Litecoin Signed Message:\n',
42341 bip32: {
42342 public: 0x0488b21e,
42343 private: 0x0488ade4,
42344 },
42345 pubKeyHash: 0x30,
42346 scriptHash: 0x32,
42347 wif: 0xb0
42348 };
42349
42350 bitcoinjs.bitcoin.networks.komodo = {
42351 messagePrefix: '\x18Komodo Signed Message:\n',
42352 bip32: {
42353 public: 0x0488B21E,
42354 private: 0x0488ADE4
42355 },
42356 pubKeyHash: 0x3c,
42357 scriptHash: 0x55,
42358 wif: 0xbc
42359 };
42360
42361 bitcoinjs.bitcoin.networks.blackcoin = {
42362 messagePrefix: '\x18BlackCoin Signed Message:\n',
42363 bip32: {
42364 public: 0x02CFBEDE,
42365 private: 0x02CFBF60
42366 },
42367 pubKeyHash: 0x19,
42368 scriptHash: 0x55,
42369 wif: 0x99
42370 };
42371
42372 bitcoinjs.bitcoin.networks.beetlecoin = {
42373 messagePrefix: '\x19Beetlecoin Signed Message:\n',
42374 bip32: {
42375 public: 0x0488b21e,
42376 private: 0x0488ade4
42377 },
42378 pubKeyHash: 0x1A,
42379 scriptHash: 0x55,
42380 wif: 0x99,
42381 };
42382
42383
42384 bitcoinjs.bitcoin.networks.adcoin = {
42385 messagePrefix: '\x18AdCoin Signed Message:\n',
42386 bip32: {
42387 public: 0x0488B21E,
42388 private: 0x0488ADE4,
42389 },
42390 pubKeyHash: 0x17,
42391 scriptHash: 0x05,
42392 wif: 0xb0,
42393 };
42394
42395 bitcoinjs.bitcoin.networks.asiacoin = {
42396 messagePrefix: '\x18AsiaCoin Signed Message:\n',
42397 bip32: {
42398 public: 0x0488b21e,
42399 private: 0x0488ade4,
42400 },
42401 pubKeyHash: 0x17,
42402 scriptHash: 0x08,
42403 wif: 0x97,
42404 };
42405
42406 bitcoinjs.bitcoin.networks.auroracoin = {
42407 messagePrefix: '\x18AuroraCoin Signed Message:\n',
42408 bip32: {
42409 public: 0x0488b21e,
42410 private: 0x0488ade4,
42411 },
42412 pubKeyHash: 0x17,
42413 scriptHash: 0x05,
42414 wif: 0x97,
42415 };
42416
42417 bitcoinjs.bitcoin.networks.bata = {
42418 messagePrefix: '\x18Bata Signed Message:\n',
42419 bip32: {
42420 public: 0xA40C86FA,
42421 private: 0xA40B91BD,
42422 },
42423 pubKeyHash: 0x19,
42424 scriptHash: 0x05,
42425 wif: 0xa4,
42426 };
42427
42428 bitcoinjs.bitcoin.networks.belacoin = {
42429 messagePrefix: '\x18BelaCoin Signed Message:\n',
42430 bip32: {
42431 public: 0x0488b21e,
42432 private: 0x0488ade4,
42433 },
42434 pubKeyHash: 0x19,
42435 scriptHash: 0x05,
42436 wif: 0x99,
42437 };
42438
42439 bitcoinjs.bitcoin.networks.atom = {
42440 messagePrefix: '\x18Bitcoin Signed Message:\n',
42441 bip32: {
42442 public: 0x0488B21E,
42443 private: 0x0488ADE4,
42444 },
42445 pubKeyHash: 0x17,
42446 scriptHash: 0x0a,
42447 wif: 0x80,
42448 };
42449
42450 bitcoinjs.bitcoin.networks.bitcoinplus = {
42451 messagePrefix: '\x18BitcoinPlus Signed Message:\n',
42452 bip32: {
42453 public: 0x0488b21e,
42454 private: 0x0488ade4,
42455 },
42456 pubKeyHash: 0x19,
42457 scriptHash: 0x08,
42458 wif: 0x99,
42459 };
42460
42461 bitcoinjs.bitcoin.networks.bitcore = {
42462 messagePrefix: '\x18BitCore Signed Message:\n',
42463 bip32: {
42464 public: 0x0488B21E,
42465 private: 0x0488ADE4,
42466 },
42467 pubKeyHash: 0x00,
42468 scriptHash: 0x05,
42469 wif: 0x80,
42470 };
42471
42472 bitcoinjs.bitcoin.networks.bitsend = {
42473 messagePrefix: '\x18Bitsend Signed Message:\n',
42474 bip32: {
42475 public: 0x0488B21E,
42476 private: 0x0488ADE4,
42477 },
42478 pubKeyHash: 0x66,
42479 scriptHash: 0x05,
42480 wif: 0xcc,
42481 };
42482
42483 bitcoinjs.bitcoin.networks.britcoin = {
42484 messagePrefix: '\x18BritCoin Signed Message:\n',
42485 bip32: {
42486 public: 0x0488b21e,
42487 private: 0x0488ade4,
42488 },
42489 pubKeyHash: 0x19,
42490 scriptHash: 0x55,
42491 wif: 0x99,
42492 };
42493
42494 bitcoinjs.bitcoin.networks.canadaecoin = {
42495 messagePrefix: '\x18Canada eCoin Signed Message:\n',
42496 bip32: {
42497 public: 0x0488b21e,
42498 private: 0x0488ade4,
42499 },
42500 pubKeyHash: 0x1c,
42501 scriptHash: 0x05,
42502 wif: 0x9c,
42503 };
42504
42505 bitcoinjs.bitcoin.networks.cannacoin = {
42506 messagePrefix: '\x18Cannacoin Signed Message:\n',
42507 bip32: {
42508 public: 0x0488b21e,
42509 private: 0x0488ade4,
42510 },
42511 pubKeyHash: 0x1c,
42512 scriptHash: 0x05,
42513 wif: 0x9c,
42514 };
42515
42516 bitcoinjs.bitcoin.networks.clubcoin = {
42517 messagePrefix: '\x18ClubCoin Signed Message:\n',
42518 bip32: {
42519 public: 0x0488B21E,
42520 private: 0x0488ADE4,
42521 },
42522 pubKeyHash: 0x1c,
42523 scriptHash: 0x55,
42524 wif: 0x99,
42525 };
42526
42527 bitcoinjs.bitcoin.networks.compcoin = {
42528 messagePrefix: '\x18CompCoin Signed Message:\n',
42529 bip32: {
42530 public: 0x0488b21e,
42531 private: 0x0488ade4,
42532 },
42533 pubKeyHash: 0x1c,
42534 scriptHash: 0x55,
42535 wif: 0x9c,
42536 };
42537
42538 bitcoinjs.bitcoin.networks.crave = {
42539 messagePrefix: '\x18DarkNet Signed Message:\n',
42540 bip32: {
42541 public: 0x0488B21E,
42542 private: 0x0488ADE4,
42543 },
42544 pubKeyHash: 0x46,
42545 scriptHash: 0x55,
42546 wif: 0x99,
42547 };
42548
42549 bitcoinjs.bitcoin.networks.defcoin = {
42550 messagePrefix: '\x18defcoin Signed Message:\n',
42551 bip32: {
42552 public: 0x0488b21e,
42553 private: 0x0488ade4,
42554 },
42555 pubKeyHash: 0x1e,
42556 scriptHash: 0x05,
42557 wif: 0x9e,
42558 };
42559
42560 bitcoinjs.bitcoin.networks.diamond = {
42561 messagePrefix: '\x18Diamond Signed Message:\n',
42562 bip32: {
42563 public: 0x0488B21E,
42564 private: 0x0488ADE4,
42565 },
42566 pubKeyHash: 0x5a,
42567 scriptHash: 0x08,
42568 wif: 0xda,
42569 };
42570
42571 bitcoinjs.bitcoin.networks.digibyte = {
42572 messagePrefix: '\x18DigiByte Signed Message:\n',
42573 bip32: {
42574 public: 0x0488B21E,
42575 private: 0x0488ADE4,
42576 },
42577 pubKeyHash: 0x1e,
42578 scriptHash: 0x05,
42579 wif: 0x80,
42580 };
42581
42582 bitcoinjs.bitcoin.networks.digitalcoin = {
42583 messagePrefix: '\x18Digitalcoin Signed Message:\n',
42584 bip32: {
42585 public: 0x9e0488B2,
42586 private: 0x0488ADE4,
42587 },
42588 pubKeyHash: 0x1e,
42589 scriptHash: 0x05,
42590 wif: 0x9e,
42591 };
42592
42593 bitcoinjs.bitcoin.networks.ecoin = {
42594 messagePrefix: '\x18eCoin Signed Message:\n',
42595 bip32: {
42596 public: 0x0488b21e,
42597 private: 0x0488ade4,
42598 },
42599 pubKeyHash: 0x5c,
42600 scriptHash: 0x14,
42601 wif: 0xdc,
42602 };
42603
42604 bitcoinjs.bitcoin.networks.edrcoin = {
42605 messagePrefix: '\x18EDRcoin Signed Message:\n',
42606 bip32: {
42607 public: 0x0488b21e,
42608 private: 0x0488ade4,
42609 },
42610 pubKeyHash: 0x5d,
42611 scriptHash: 0x1c,
42612 wif: 0xdd,
42613 };
42614
42615 bitcoinjs.bitcoin.networks.egulden = {
42616 messagePrefix: '\x18Egulden Signed Message:\n',
42617 bip32: {
42618 public: 0x0488B21E,
42619 private: 0x0488ADE4,
42620 },
42621 pubKeyHash: 0x30,
42622 scriptHash: 0x05,
42623 wif: 0xb0,
42624 };
42625
42626 bitcoinjs.bitcoin.networks.einsteinium = {
42627 messagePrefix: '\x18Einsteinium Signed Message:\n',
42628 bip32: {
42629 public: 0x0488b21e,
42630 private: 0x0488ade4,
42631 },
42632 pubKeyHash: 0x21,
42633 scriptHash: 0x05,
42634 wif: 0xa1,
42635 };
42636
42637 bitcoinjs.bitcoin.networks.europecoin = {
42638 messagePrefix: '\x18Bitcoin Signed Message:\n',
42639 bip32: {
42640 public: 0x0488B21E,
42641 private: 0x0488ADE4,
42642 },
42643 pubKeyHash: 0x21,
42644 scriptHash: 0x05,
42645 wif: 0xa8,
42646 };
42647
42648 bitcoinjs.bitcoin.networks.exclusivecoin = {
42649 messagePrefix: '\x18ExclusiveCoin Signed Message:\n',
42650 bip32: {
42651 public: 0x0488B21E,
42652 private: 0x0488ADE4,
42653 },
42654 pubKeyHash: 0x21,
42655 scriptHash: 0x89,
42656 wif: 0xa1,
42657 };
42658
42659 bitcoinjs.bitcoin.networks.feathercoin = {
42660 messagePrefix: '\x18Feathercoin Signed Message:\n',
42661 bip32: {
42662 public: 0x0488BC26,
42663 private: 0x0488DAEE,
42664 },
42665 pubKeyHash: 0x0e,
42666 scriptHash: 0x05,
42667 wif: 0x8e,
42668 };
42669
42670 bitcoinjs.bitcoin.networks.firstcoin = {
42671 messagePrefix: '\x18FirstCoin Signed Message:\n',
42672 bip32: {
42673 public: 0x0488b21e,
42674 private: 0x0488ade4,
42675 },
42676 pubKeyHash: 0x23,
42677 scriptHash: 0x05,
42678 wif: 0xa3,
42679 };
42680
42681 bitcoinjs.bitcoin.networks.flashcoin = {
42682 messagePrefix: '\x18Flashcoin Signed Message:\n',
42683 bip32: {
42684 public: 0x0488b21e,
42685 private: 0x0488ade4,
42686 },
42687 pubKeyHash: 0x44,
42688 scriptHash: 0x82,
42689 wif: 0xc4,
42690 };
42691
42692 bitcoinjs.bitcoin.networks.gcr = {
42693 messagePrefix: '\x18GCR Signed Message:\n',
42694 bip32: {
42695 public: 0x0488B21E,
42696 private: 0x0488ADE4,
42697 },
42698 pubKeyHash: 0x26,
42699 scriptHash: 0x61,
42700 wif: 0x9a,
42701 };
42702
42703 bitcoinjs.bitcoin.networks.gobyte = {
42704 messagePrefix: '\x18DarkCoin Signed Message:\n',
42705 bip32: {
42706 public: 0x0488B21E,
42707 private: 0x0488ADE4,
42708 },
42709 pubKeyHash: 0x26,
42710 scriptHash: 0x0a,
42711 wif: 0xc6,
42712 };
42713
42714 bitcoinjs.bitcoin.networks.gridcoin = {
42715 messagePrefix: '\x18Gridcoin Signed Message:\n',
42716 bip32: {
42717 public: 0x0488b21e,
42718 private: 0x0488ade4,
42719 },
42720 pubKeyHash: 0x3e,
42721 scriptHash: 0x55,
42722 wif: 0xbe,
42723 };
42724
42725 bitcoinjs.bitcoin.networks.gulden = {
42726 messagePrefix: '\x18Guldencoin Signed Message:\n',
42727 bip32: {
42728 public: 0x0488B21E,
42729 private: 0x0488ADE4,
42730 },
42731 pubKeyHash: 0x26,
42732 scriptHash: 0x62,
42733 wif: 0x62,
42734 };
42735
42736 bitcoinjs.bitcoin.networks.helleniccoin = {
42737 messagePrefix: '\x18helleniccoin Signed Message:\n',
42738 bip32: {
42739 public: 0x0488b21e,
42740 private: 0x0488ade4,
42741 },
42742 pubKeyHash: 0x30,
42743 scriptHash: 0x05,
42744 wif: 0xb0,
42745 };
42746
42747 bitcoinjs.bitcoin.networks.hempcoin = {
42748 messagePrefix: '\x18Hempcoin Signed Message:\n',
42749 bip32: {
42750 public: 0x0488b21e,
42751 private: 0x0488ade4,
42752 },
42753 pubKeyHash: 0x28,
42754 scriptHash: 0x08,
42755 wif: 0xa8,
42756 };
42757
42758 bitcoinjs.bitcoin.networks.insane = {
42759 messagePrefix: '\x18INSaNe Signed Message:\n',
42760 bip32: {
42761 public: 0x0488B21E,
42762 private: 0x0488ADE4,
42763 },
42764 pubKeyHash: 0x66,
42765 scriptHash: 0x39,
42766 wif: 0x37,
42767 };
42768
42769 bitcoinjs.bitcoin.networks.iop = {
42770 messagePrefix: '\x18IoP Signed Message:\n',
42771 bip32: {
42772 public: 0x2780915F,
42773 private: 0xAE3416F6,
42774 },
42775 pubKeyHash: 0x75,
42776 scriptHash: 0xae,
42777 wif: 0x31,
42778 };
42779
42780 bitcoinjs.bitcoin.networks.ixcoin = {
42781 messagePrefix: '\x18Ixcoin Signed Message:\n',
42782 bip32: {
42783 public: 0x0488B21E,
42784 private: 0x0488ADE4,
42785 },
42786 pubKeyHash: 0x8a,
42787 scriptHash: 0x05,
42788 wif: 0x80,
42789 };
42790
42791 bitcoinjs.bitcoin.networks.landcoin = {
42792 messagePrefix: '\x18Landcoin Signed Message:\n',
42793 bip32: {
42794 public: 0x0488B21E,
42795 private: 0x0488ADE4,
42796 },
42797 pubKeyHash: 0x30,
42798 scriptHash: 0x7a,
42799 wif: 0xb0,
42800 };
42801
42802 bitcoinjs.bitcoin.networks.lbry = {
42803 messagePrefix: '\x18LBRYcrd Signed Message:\n',
42804 bip32: {
42805 public: 0x0488B21E,
42806 private: 0x0488ADE4,
42807 },
42808 pubKeyHash: 0x55,
42809 scriptHash: 0x7a,
42810 wif: 0x1c,
42811 };
42812
42813 bitcoinjs.bitcoin.networks.linx = {
42814 messagePrefix: '\x18LinX Signed Message:\n',
42815 bip32: {
42816 public: 0x0488b21e,
42817 private: 0x0488ade4,
42818 },
42819 pubKeyHash: 0x4b,
42820 scriptHash: 0x05,
42821 wif: 0xcb,
42822 };
42823
42824 bitcoinjs.bitcoin.networks.litecoincash = {
42825 messagePrefix: '\x18Litecoin Signed Message:\n',
42826 bip32: {
42827 public: 0x0488B21E,
42828 private: 0x0488ADE4,
42829 },
42830 pubKeyHash: 0x1c,
42831 scriptHash: 0x05,
42832 wif: 0xb0,
42833 };
42834
42835 bitcoinjs.bitcoin.networks.lynx = {
42836 messagePrefix: '\x18Lynx Signed Message:\n',
42837 bip32: {
42838 public: 0x0488B21E,
42839 private: 0x0488ADE4,
42840 },
42841 pubKeyHash: 0x2d,
42842 scriptHash: 0x32,
42843 wif: 0xad,
42844 };
42845
42846 bitcoinjs.bitcoin.networks.minexcoin = {
42847 messagePrefix: '\x18Bitcoin Signed Message:\n',
42848 bip32: {
42849 public: 0x0488B21E,
42850 private: 0x0488ADE4,
42851 },
42852 pubKeyHash: 0x4b,
42853 scriptHash: 0x05,
42854 wif: 0x80,
42855 };
42856
42857 bitcoinjs.bitcoin.networks.navcoin = {
42858 messagePrefix: '\x18Navcoin Signed Message:\n',
42859 bip32: {
42860 public: 0x0488B21E,
42861 private: 0x0488ADE4,
42862 },
42863 pubKeyHash: 0x35,
42864 scriptHash: 0x55,
42865 wif: 0x96,
42866 };
42867
42868 bitcoinjs.bitcoin.networks.neoscoin = {
42869 messagePrefix: '\x18NeosCoin Signed Message:\n',
42870 bip32: {
42871 public: 0x0488B21E,
42872 private: 0x0488ADE4,
42873 },
42874 pubKeyHash: 0x35,
42875 scriptHash: 0x05,
42876 wif: 0xb1,
42877 };
42878
42879 bitcoinjs.bitcoin.networks.neurocoin = {
42880 messagePrefix: '\x18PPCoin Signed Message:\n',
42881 bip32: {
42882 public: 0x0488B21E,
42883 private: 0x0488ADE4,
42884 },
42885 pubKeyHash: 0x35,
42886 scriptHash: 0x75,
42887 wif: 0xb5,
42888 };
42889
42890 bitcoinjs.bitcoin.networks.newyorkc = {
42891 messagePrefix: '\x18newyorkc Signed Message:\n',
42892 bip32: {
42893 public: 0x0488b21e,
42894 private: 0x0488ade4,
42895 },
42896 pubKeyHash: 0x3c,
42897 scriptHash: 0x16,
42898 wif: 0xbc,
42899 };
42900
42901 bitcoinjs.bitcoin.networks.novacoin = {
42902 messagePrefix: '\x18NovaCoin Signed Message:\n',
42903 bip32: {
42904 public: 0x0488b21e,
42905 private: 0x0488ade4,
42906 },
42907 pubKeyHash: 0x08,
42908 scriptHash: 0x14,
42909 wif: 0x88,
42910 };
42911
42912 bitcoinjs.bitcoin.networks.nushares = {
42913 messagePrefix: '\x18Nu Signed Message:\n',
42914 bip32: {
42915 public: 0x0488b21e,
42916 private: 0x0488ade4,
42917 },
42918 pubKeyHash: 0x3f,
42919 scriptHash: 0x40,
42920 wif: 0x95,
42921 };
42922
42923 bitcoinjs.bitcoin.networks.okcash = {
42924 messagePrefix: '\x18OKCash Signed Message:\n',
42925 bip32: {
42926 public: 0x03CC23D7,
42927 private: 0x03CC1C73,
42928 },
42929 pubKeyHash: 0x37,
42930 scriptHash: 0x1c,
42931 wif: 0x03,
42932 };
42933
42934 bitcoinjs.bitcoin.networks.omnicore = {
42935 messagePrefix: '\x18Bitcoin Signed Message:\n',
42936 bip32: {
42937 public: 0x0488B21E,
42938 private: 0x0488ADE4,
42939 },
42940 pubKeyHash: 0x00,
42941 scriptHash: 0x05,
42942 wif: 0x80,
42943 };
42944
42945 bitcoinjs.bitcoin.networks.pesobit = {
42946 messagePrefix: '\x18Pesobit Signed Message:\n',
42947 bip32: {
42948 public: 0x0488b21e,
42949 private: 0x0488ade4,
42950 },
42951 pubKeyHash: 0x37,
42952 scriptHash: 0x55,
42953 wif: 0xb7,
42954 };
42955
42956 bitcoinjs.bitcoin.networks.pinkcoin = {
42957 messagePrefix: '\x18Pinkcoin Signed Message:\n',
42958 bip32: {
42959 public: 0x0488b21e,
42960 private: 0x0488ade4,
42961 },
42962 pubKeyHash: 0x03,
42963 scriptHash: 0x1c,
42964 wif: 0x83,
42965 };
42966
42967 bitcoinjs.bitcoin.networks.poswcoin = {
42968 messagePrefix: '\x18Poswcoin Signed Message:\n',
42969 bip32: {
42970 public: 0x0488b21e,
42971 private: 0x0488ade4,
42972 },
42973 pubKeyHash: 0x37,
42974 scriptHash: 0x55,
42975 wif: 0xb7,
42976 };
42977
42978 bitcoinjs.bitcoin.networks.potcoin = {
42979 messagePrefix: '\x18Potcoin Signed Message:\n',
42980 bip32: {
42981 public: 0x0488b21e,
42982 private: 0x0488ade4,
42983 },
42984 pubKeyHash: 0x37,
42985 scriptHash: 0x05,
42986 wif: 0xb7,
42987 };
42988
42989 bitcoinjs.bitcoin.networks.putincoin = {
42990 messagePrefix: '\x18PutinCoin Signed Message:\n',
42991 bip32: {
42992 public: 0x0488b21e,
42993 private: 0x0488ade4,
42994 },
42995 pubKeyHash: 0x37,
42996 scriptHash: 0x14,
42997 wif: 0xb7,
42998 };
42999
43000 bitcoinjs.bitcoin.networks.reddcoin = {
43001 messagePrefix: '\x18Reddcoin Signed Message:\n',
43002 bip32: {
43003 public: 0x0488B21E,
43004 private: 0x0488ADE4,
43005 },
43006 pubKeyHash: 0x3d,
43007 scriptHash: 0x05,
43008 wif: 0xbd,
43009 };
43010
43011 bitcoinjs.bitcoin.networks.revolutionvr = {
43012 messagePrefix: '\x18Voxels Signed Message:\n',
43013 bip32: {
43014 public: 0x0488B21E,
43015 private: 0x0488ADE4,
43016 },
43017 pubKeyHash: 0x46,
43018 scriptHash: 0x05,
43019 wif: 0xc6,
43020 };
43021
43022 bitcoinjs.bitcoin.networks.rubycoin = {
43023 messagePrefix: '\x18Rubycoin Signed Message:\n',
43024 bip32: {
43025 public: 0x0488B21E,
43026 private: 0x0488ADE4,
43027 },
43028 pubKeyHash: 0x3c,
43029 scriptHash: 0x55,
43030 wif: 0xbc,
43031 };
43032
43033 bitcoinjs.bitcoin.networks.smileycoin = {
43034 messagePrefix: '\x18Smileycoin Signed Message:\n',
43035 bip32: {
43036 public: 0x1E562D9A,
43037 private: 0x1E5631BC,
43038 },
43039 pubKeyHash: 0x19,
43040 scriptHash: 0x05,
43041 wif: 0x05,
43042 };
43043
43044 bitcoinjs.bitcoin.networks.solarcoin = {
43045 messagePrefix: '\x18SolarCoin Signed Message:\n',
43046 bip32: {
43047 public: 0x0488b21e,
43048 private: 0x0488ade4,
43049 },
43050 pubKeyHash: 0x12,
43051 scriptHash: 0x05,
43052 wif: 0x92,
43053 };
43054
43055 bitcoinjs.bitcoin.networks.stratis = {
43056 messagePrefix: '\x18Stratis Signed Message:\n',
43057 bip32: {
43058 public: 0x0488B21E,
43059 private: 0x0488ADE4,
43060 },
43061 pubKeyHash: 0x3f,
43062 scriptHash: 0x7d,
43063 wif: 0xbf,
43064 };
43065
43066 bitcoinjs.bitcoin.networks.syscoin = {
43067 messagePrefix: '\x18Syscoin Signed Message:\n',
43068 bip32: {
43069 public: 0x0488B21E,
43070 private: 0x0488ADE4,
43071 },
43072 pubKeyHash: 0x3f,
43073 scriptHash: 0x05,
43074 wif: 0xbf,
43075 };
43076
43077
43078 bitcoinjs.bitcoin.networks.toa = {
43079 messagePrefix: '\x18TOA Signed Message:\n',
43080 bip32: {
43081 public: 0x0488b21e,
43082 private: 0x0488ade4,
43083 },
43084 pubKeyHash: 0x41,
43085 scriptHash: 0x17,
43086 wif: 0xc1,
43087 };
43088
43089 bitcoinjs.bitcoin.networks.ultimatesecurecash = {
43090 messagePrefix: '\x18UltimateSecureCash Signed Message:\n',
43091 bip32: {
43092 public: 0xEE80286A,
43093 private: 0xEE8031E8,
43094 },
43095 pubKeyHash: 0x44,
43096 scriptHash: 0x7d,
43097 wif: 0xbf,
43098 };
43099
43100 bitcoinjs.bitcoin.networks.unobtanium = {
43101 messagePrefix: '\x18Unobtanium Signed Message:\n',
43102 bip32: {
43103 public: 0x0488B21E,
43104 private: 0x0488ADE4,
43105 },
43106 pubKeyHash: 0x82,
43107 scriptHash: 0x1e,
43108 wif: 0xe0,
43109 };
43110
43111 bitcoinjs.bitcoin.networks.vcash = {
43112 messagePrefix: '\x18Vcash Signed Message:\n',
43113 bip32: {
43114 public: 0x0488b21e,
43115 private: 0x0488ade4,
43116 },
43117 pubKeyHash: 0x47,
43118 scriptHash: 0x08,
43119 wif: 0xc7,
43120 };
43121
43122 bitcoinjs.bitcoin.networks.verge = {
43123 messagePrefix: '\x18VERGE Signed Message:\n',
43124 bip32: {
43125 public: 0x0488b21e,
43126 private: 0x0488ade4,
43127 },
43128 pubKeyHash: 0x1e,
43129 scriptHash: 0x21,
43130 wif: 0x9e,
43131 };
43132
43133 bitcoinjs.bitcoin.networks.vertcoin = {
43134 messagePrefix: '\x18Vertcoin Signed Message:\n',
43135 bip32: {
43136 public: 0x0488b21e,
43137 private: 0x0488ade4,
43138 },
43139 pubKeyHash: 0x47,
43140 scriptHash: 0x05,
43141 wif: 0xc7,
43142 };
43143
43144 bitcoinjs.bitcoin.networks.vivo = {
43145 messagePrefix: '\x18DarkCoin Signed Message:\n',
43146 bip32: {
43147 public: 0x0488B21E,
43148 private: 0x0488ADE4,
43149 },
43150 pubKeyHash: 0x46,
43151 scriptHash: 0x0a,
43152 wif: 0xc6,
43153 };
43154
43155 bitcoinjs.bitcoin.networks.vpncoin = {
43156 messagePrefix: '\x18VpnCoin Signed Message:\n',
43157 bip32: {
43158 public: 0x0488b21e,
43159 private: 0x0488ade4,
43160 },
43161 pubKeyHash: 0x47,
43162 scriptHash: 0x05,
43163 wif: 0xc7,
43164 };
43165
43166 bitcoinjs.bitcoin.networks.whitecoin = {
43167 messagePrefix: '\x18Whitecoin Signed Message:\n',
43168 bip32: {
43169 public: 0x04887F1E,
43170 private: 0x048894ED,
43171 },
43172 pubKeyHash: 0x49,
43173 scriptHash: 0x57,
43174 wif: 0xc9,
43175 };
43176
43177 bitcoinjs.bitcoin.networks.wincoin = {
43178 messagePrefix: '\x18WinCoin Signed Message:\n',
43179 bip32: {
43180 public: 0x0488b21e,
43181 private: 0x0488ade4,
43182 },
43183 pubKeyHash: 0x49,
43184 scriptHash: 0x1c,
43185 wif: 0xc9,
43186 };
43187
43188 bitcoinjs.bitcoin.networks.zcoin = {
43189 messagePrefix: '\x18Zcoin Signed Message:\n',
43190 bip32: {
43191 public: 0x0488B21E,
43192 private: 0x0488ADE4,
43193 },
43194 pubKeyHash: 0x52,
43195 scriptHash: 0x07,
43196 wif: 0xd2,
43197 };
43198 </script>
43199 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoinjsBip38 = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
43200 var asn1 = exports;
43201
43202 asn1.bignum = require('bn.js');
43203
43204 asn1.define = require('./asn1/api').define;
43205 asn1.base = require('./asn1/base');
43206 asn1.constants = require('./asn1/constants');
43207 asn1.decoders = require('./asn1/decoders');
43208 asn1.encoders = require('./asn1/encoders');
43209
43210 },{"./asn1/api":2,"./asn1/base":4,"./asn1/constants":8,"./asn1/decoders":10,"./asn1/encoders":13,"bn.js":17}],2:[function(require,module,exports){
43211 var asn1 = require('../asn1');
43212 var inherits = require('inherits');
43213
43214 var api = exports;
43215
43216 api.define = function define(name, body) {
43217 return new Entity(name, body);
43218 };
43219
43220 function Entity(name, body) {
43221 this.name = name;
43222 this.body = body;
43223
43224 this.decoders = {};
43225 this.encoders = {};
43226 };
43227
43228 Entity.prototype._createNamed = function createNamed(base) {
43229 var named;
43230 try {
43231 named = require('vm').runInThisContext(
43232 '(function ' + this.name + '(entity) {\n' +
43233 ' this._initNamed(entity);\n' +
43234 '})'
43235 );
43236 } catch (e) {
43237 named = function (entity) {
43238 this._initNamed(entity);
43239 };
43240 }
43241 inherits(named, base);
43242 named.prototype._initNamed = function initnamed(entity) {
43243 base.call(this, entity);
43244 };
43245
43246 return new named(this);
43247 };
43248
43249 Entity.prototype._getDecoder = function _getDecoder(enc) {
43250 enc = enc || 'der';
43251 // Lazily create decoder
43252 if (!this.decoders.hasOwnProperty(enc))
43253 this.decoders[enc] = this._createNamed(asn1.decoders[enc]);
43254 return this.decoders[enc];
43255 };
43256
43257 Entity.prototype.decode = function decode(data, enc, options) {
43258 return this._getDecoder(enc).decode(data, options);
43259 };
43260
43261 Entity.prototype._getEncoder = function _getEncoder(enc) {
43262 enc = enc || 'der';
43263 // Lazily create encoder
43264 if (!this.encoders.hasOwnProperty(enc))
43265 this.encoders[enc] = this._createNamed(asn1.encoders[enc]);
43266 return this.encoders[enc];
43267 };
43268
43269 Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
43270 return this._getEncoder(enc).encode(data, reporter);
43271 };
43272
43273 },{"../asn1":1,"inherits":95,"vm":149}],3:[function(require,module,exports){
43274 var inherits = require('inherits');
43275 var Reporter = require('../base').Reporter;
43276 var Buffer = require('buffer').Buffer;
43277
43278 function DecoderBuffer(base, options) {
43279 Reporter.call(this, options);
43280 if (!Buffer.isBuffer(base)) {
43281 this.error('Input not Buffer');
43282 return;
43283 }
43284
43285 this.base = base;
43286 this.offset = 0;
43287 this.length = base.length;
43288 }
43289 inherits(DecoderBuffer, Reporter);
43290 exports.DecoderBuffer = DecoderBuffer;
43291
43292 DecoderBuffer.prototype.save = function save() {
43293 return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
43294 };
43295
43296 DecoderBuffer.prototype.restore = function restore(save) {
43297 // Return skipped data
43298 var res = new DecoderBuffer(this.base);
43299 res.offset = save.offset;
43300 res.length = this.offset;
43301
43302 this.offset = save.offset;
43303 Reporter.prototype.restore.call(this, save.reporter);
43304
43305 return res;
43306 };
43307
43308 DecoderBuffer.prototype.isEmpty = function isEmpty() {
43309 return this.offset === this.length;
43310 };
43311
43312 DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
43313 if (this.offset + 1 <= this.length)
43314 return this.base.readUInt8(this.offset++, true);
43315 else
43316 return this.error(fail || 'DecoderBuffer overrun');
43317 }
43318
43319 DecoderBuffer.prototype.skip = function skip(bytes, fail) {
43320 if (!(this.offset + bytes <= this.length))
43321 return this.error(fail || 'DecoderBuffer overrun');
43322
43323 var res = new DecoderBuffer(this.base);
43324
43325 // Share reporter state
43326 res._reporterState = this._reporterState;
43327
43328 res.offset = this.offset;
43329 res.length = this.offset + bytes;
43330 this.offset += bytes;
43331 return res;
43332 }
43333
43334 DecoderBuffer.prototype.raw = function raw(save) {
43335 return this.base.slice(save ? save.offset : this.offset, this.length);
43336 }
43337
43338 function EncoderBuffer(value, reporter) {
43339 if (Array.isArray(value)) {
43340 this.length = 0;
43341 this.value = value.map(function(item) {
43342 if (!(item instanceof EncoderBuffer))
43343 item = new EncoderBuffer(item, reporter);
43344 this.length += item.length;
43345 return item;
43346 }, this);
43347 } else if (typeof value === 'number') {
43348 if (!(0 <= value && value <= 0xff))
43349 return reporter.error('non-byte EncoderBuffer value');
43350 this.value = value;
43351 this.length = 1;
43352 } else if (typeof value === 'string') {
43353 this.value = value;
43354 this.length = Buffer.byteLength(value);
43355 } else if (Buffer.isBuffer(value)) {
43356 this.value = value;
43357 this.length = value.length;
43358 } else {
43359 return reporter.error('Unsupported type: ' + typeof value);
43360 }
43361 }
43362 exports.EncoderBuffer = EncoderBuffer;
43363
43364 EncoderBuffer.prototype.join = function join(out, offset) {
43365 if (!out)
43366 out = new Buffer(this.length);
43367 if (!offset)
43368 offset = 0;
43369
43370 if (this.length === 0)
43371 return out;
43372
43373 if (Array.isArray(this.value)) {
43374 this.value.forEach(function(item) {
43375 item.join(out, offset);
43376 offset += item.length;
43377 });
43378 } else {
43379 if (typeof this.value === 'number')
43380 out[offset] = this.value;
43381 else if (typeof this.value === 'string')
43382 out.write(this.value, offset);
43383 else if (Buffer.isBuffer(this.value))
43384 this.value.copy(out, offset);
43385 offset += this.length;
43386 }
43387
43388 return out;
43389 };
43390
43391 },{"../base":4,"buffer":47,"inherits":95}],4:[function(require,module,exports){
43392 var base = exports;
43393
43394 base.Reporter = require('./reporter').Reporter;
43395 base.DecoderBuffer = require('./buffer').DecoderBuffer;
43396 base.EncoderBuffer = require('./buffer').EncoderBuffer;
43397 base.Node = require('./node');
43398
43399 },{"./buffer":3,"./node":5,"./reporter":6}],5:[function(require,module,exports){
43400 var Reporter = require('../base').Reporter;
43401 var EncoderBuffer = require('../base').EncoderBuffer;
43402 var DecoderBuffer = require('../base').DecoderBuffer;
43403 var assert = require('minimalistic-assert');
43404
43405 // Supported tags
43406 var tags = [
43407 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',
43408 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',
43409 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',
43410 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'
43411 ];
43412
43413 // Public methods list
43414 var methods = [
43415 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',
43416 'any', 'contains'
43417 ].concat(tags);
43418
43419 // Overrided methods list
43420 var overrided = [
43421 '_peekTag', '_decodeTag', '_use',
43422 '_decodeStr', '_decodeObjid', '_decodeTime',
43423 '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',
43424
43425 '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',
43426 '_encodeNull', '_encodeInt', '_encodeBool'
43427 ];
43428
43429 function Node(enc, parent) {
43430 var state = {};
43431 this._baseState = state;
43432
43433 state.enc = enc;
43434
43435 state.parent = parent || null;
43436 state.children = null;
43437
43438 // State
43439 state.tag = null;
43440 state.args = null;
43441 state.reverseArgs = null;
43442 state.choice = null;
43443 state.optional = false;
43444 state.any = false;
43445 state.obj = false;
43446 state.use = null;
43447 state.useDecoder = null;
43448 state.key = null;
43449 state['default'] = null;
43450 state.explicit = null;
43451 state.implicit = null;
43452 state.contains = null;
43453
43454 // Should create new instance on each method
43455 if (!state.parent) {
43456 state.children = [];
43457 this._wrap();
43458 }
43459 }
43460 module.exports = Node;
43461
43462 var stateProps = [
43463 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',
43464 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',
43465 'implicit', 'contains'
43466 ];
43467
43468 Node.prototype.clone = function clone() {
43469 var state = this._baseState;
43470 var cstate = {};
43471 stateProps.forEach(function(prop) {
43472 cstate[prop] = state[prop];
43473 });
43474 var res = new this.constructor(cstate.parent);
43475 res._baseState = cstate;
43476 return res;
43477 };
43478
43479 Node.prototype._wrap = function wrap() {
43480 var state = this._baseState;
43481 methods.forEach(function(method) {
43482 this[method] = function _wrappedMethod() {
43483 var clone = new this.constructor(this);
43484 state.children.push(clone);
43485 return clone[method].apply(clone, arguments);
43486 };
43487 }, this);
43488 };
43489
43490 Node.prototype._init = function init(body) {
43491 var state = this._baseState;
43492
43493 assert(state.parent === null);
43494 body.call(this);
43495
43496 // Filter children
43497 state.children = state.children.filter(function(child) {
43498 return child._baseState.parent === this;
43499 }, this);
43500 assert.equal(state.children.length, 1, 'Root node can have only one child');
43501 };
43502
43503 Node.prototype._useArgs = function useArgs(args) {
43504 var state = this._baseState;
43505
43506 // Filter children and args
43507 var children = args.filter(function(arg) {
43508 return arg instanceof this.constructor;
43509 }, this);
43510 args = args.filter(function(arg) {
43511 return !(arg instanceof this.constructor);
43512 }, this);
43513
43514 if (children.length !== 0) {
43515 assert(state.children === null);
43516 state.children = children;
43517
43518 // Replace parent to maintain backward link
43519 children.forEach(function(child) {
43520 child._baseState.parent = this;
43521 }, this);
43522 }
43523 if (args.length !== 0) {
43524 assert(state.args === null);
43525 state.args = args;
43526 state.reverseArgs = args.map(function(arg) {
43527 if (typeof arg !== 'object' || arg.constructor !== Object)
43528 return arg;
43529
43530 var res = {};
43531 Object.keys(arg).forEach(function(key) {
43532 if (key == (key | 0))
43533 key |= 0;
43534 var value = arg[key];
43535 res[value] = key;
43536 });
43537 return res;
43538 });
43539 }
43540 };
43541
43542 //
43543 // Overrided methods
43544 //
43545
43546 overrided.forEach(function(method) {
43547 Node.prototype[method] = function _overrided() {
43548 var state = this._baseState;
43549 throw new Error(method + ' not implemented for encoding: ' + state.enc);
43550 };
43551 });
43552
43553 //
43554 // Public methods
43555 //
43556
43557 tags.forEach(function(tag) {
43558 Node.prototype[tag] = function _tagMethod() {
43559 var state = this._baseState;
43560 var args = Array.prototype.slice.call(arguments);
43561
43562 assert(state.tag === null);
43563 state.tag = tag;
43564
43565 this._useArgs(args);
43566
43567 return this;
43568 };
43569 });
43570
43571 Node.prototype.use = function use(item) {
43572 assert(item);
43573 var state = this._baseState;
43574
43575 assert(state.use === null);
43576 state.use = item;
43577
43578 return this;
43579 };
43580
43581 Node.prototype.optional = function optional() {
43582 var state = this._baseState;
43583
43584 state.optional = true;
43585
43586 return this;
43587 };
43588
43589 Node.prototype.def = function def(val) {
43590 var state = this._baseState;
43591
43592 assert(state['default'] === null);
43593 state['default'] = val;
43594 state.optional = true;
43595
43596 return this;
43597 };
43598
43599 Node.prototype.explicit = function explicit(num) {
43600 var state = this._baseState;
43601
43602 assert(state.explicit === null && state.implicit === null);
43603 state.explicit = num;
43604
43605 return this;
43606 };
43607
43608 Node.prototype.implicit = function implicit(num) {
43609 var state = this._baseState;
43610
43611 assert(state.explicit === null && state.implicit === null);
43612 state.implicit = num;
43613
43614 return this;
43615 };
43616
43617 Node.prototype.obj = function obj() {
43618 var state = this._baseState;
43619 var args = Array.prototype.slice.call(arguments);
43620
43621 state.obj = true;
43622
43623 if (args.length !== 0)
43624 this._useArgs(args);
43625
43626 return this;
43627 };
43628
43629 Node.prototype.key = function key(newKey) {
43630 var state = this._baseState;
43631
43632 assert(state.key === null);
43633 state.key = newKey;
43634
43635 return this;
43636 };
43637
43638 Node.prototype.any = function any() {
43639 var state = this._baseState;
43640
43641 state.any = true;
43642
43643 return this;
43644 };
43645
43646 Node.prototype.choice = function choice(obj) {
43647 var state = this._baseState;
43648
43649 assert(state.choice === null);
43650 state.choice = obj;
43651 this._useArgs(Object.keys(obj).map(function(key) {
43652 return obj[key];
43653 }));
43654
43655 return this;
43656 };
43657
43658 Node.prototype.contains = function contains(item) {
43659 var state = this._baseState;
43660
43661 assert(state.use === null);
43662 state.contains = item;
43663
43664 return this;
43665 };
43666
43667 //
43668 // Decoding
43669 //
43670
43671 Node.prototype._decode = function decode(input, options) {
43672 var state = this._baseState;
43673
43674 // Decode root node
43675 if (state.parent === null)
43676 return input.wrapResult(state.children[0]._decode(input, options));
43677
43678 var result = state['default'];
43679 var present = true;
43680
43681 var prevKey = null;
43682 if (state.key !== null)
43683 prevKey = input.enterKey(state.key);
43684
43685 // Check if tag is there
43686 if (state.optional) {
43687 var tag = null;
43688 if (state.explicit !== null)
43689 tag = state.explicit;
43690 else if (state.implicit !== null)
43691 tag = state.implicit;
43692 else if (state.tag !== null)
43693 tag = state.tag;
43694
43695 if (tag === null && !state.any) {
43696 // Trial and Error
43697 var save = input.save();
43698 try {
43699 if (state.choice === null)
43700 this._decodeGeneric(state.tag, input, options);
43701 else
43702 this._decodeChoice(input, options);
43703 present = true;
43704 } catch (e) {
43705 present = false;
43706 }
43707 input.restore(save);
43708 } else {
43709 present = this._peekTag(input, tag, state.any);
43710
43711 if (input.isError(present))
43712 return present;
43713 }
43714 }
43715
43716 // Push object on stack
43717 var prevObj;
43718 if (state.obj && present)
43719 prevObj = input.enterObject();
43720
43721 if (present) {
43722 // Unwrap explicit values
43723 if (state.explicit !== null) {
43724 var explicit = this._decodeTag(input, state.explicit);
43725 if (input.isError(explicit))
43726 return explicit;
43727 input = explicit;
43728 }
43729
43730 var start = input.offset;
43731
43732 // Unwrap implicit and normal values
43733 if (state.use === null && state.choice === null) {
43734 if (state.any)
43735 var save = input.save();
43736 var body = this._decodeTag(
43737 input,
43738 state.implicit !== null ? state.implicit : state.tag,
43739 state.any
43740 );
43741 if (input.isError(body))
43742 return body;
43743
43744 if (state.any)
43745 result = input.raw(save);
43746 else
43747 input = body;
43748 }
43749
43750 if (options && options.track && state.tag !== null)
43751 options.track(input.path(), start, input.length, 'tagged');
43752
43753 if (options && options.track && state.tag !== null)
43754 options.track(input.path(), input.offset, input.length, 'content');
43755
43756 // Select proper method for tag
43757 if (state.any)
43758 result = result;
43759 else if (state.choice === null)
43760 result = this._decodeGeneric(state.tag, input, options);
43761 else
43762 result = this._decodeChoice(input, options);
43763
43764 if (input.isError(result))
43765 return result;
43766
43767 // Decode children
43768 if (!state.any && state.choice === null && state.children !== null) {
43769 state.children.forEach(function decodeChildren(child) {
43770 // NOTE: We are ignoring errors here, to let parser continue with other
43771 // parts of encoded data
43772 child._decode(input, options);
43773 });
43774 }
43775
43776 // Decode contained/encoded by schema, only in bit or octet strings
43777 if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
43778 var data = new DecoderBuffer(result);
43779 result = this._getUse(state.contains, input._reporterState.obj)
43780 ._decode(data, options);
43781 }
43782 }
43783
43784 // Pop object
43785 if (state.obj && present)
43786 result = input.leaveObject(prevObj);
43787
43788 // Set key
43789 if (state.key !== null && (result !== null || present === true))
43790 input.leaveKey(prevKey, state.key, result);
43791 else if (prevKey !== null)
43792 input.exitKey(prevKey);
43793
43794 return result;
43795 };
43796
43797 Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
43798 var state = this._baseState;
43799
43800 if (tag === 'seq' || tag === 'set')
43801 return null;
43802 if (tag === 'seqof' || tag === 'setof')
43803 return this._decodeList(input, tag, state.args[0], options);
43804 else if (/str$/.test(tag))
43805 return this._decodeStr(input, tag, options);
43806 else if (tag === 'objid' && state.args)
43807 return this._decodeObjid(input, state.args[0], state.args[1], options);
43808 else if (tag === 'objid')
43809 return this._decodeObjid(input, null, null, options);
43810 else if (tag === 'gentime' || tag === 'utctime')
43811 return this._decodeTime(input, tag, options);
43812 else if (tag === 'null_')
43813 return this._decodeNull(input, options);
43814 else if (tag === 'bool')
43815 return this._decodeBool(input, options);
43816 else if (tag === 'objDesc')
43817 return this._decodeStr(input, tag, options);
43818 else if (tag === 'int' || tag === 'enum')
43819 return this._decodeInt(input, state.args && state.args[0], options);
43820
43821 if (state.use !== null) {
43822 return this._getUse(state.use, input._reporterState.obj)
43823 ._decode(input, options);
43824 } else {
43825 return input.error('unknown tag: ' + tag);
43826 }
43827 };
43828
43829 Node.prototype._getUse = function _getUse(entity, obj) {
43830
43831 var state = this._baseState;
43832 // Create altered use decoder if implicit is set
43833 state.useDecoder = this._use(entity, obj);
43834 assert(state.useDecoder._baseState.parent === null);
43835 state.useDecoder = state.useDecoder._baseState.children[0];
43836 if (state.implicit !== state.useDecoder._baseState.implicit) {
43837 state.useDecoder = state.useDecoder.clone();
43838 state.useDecoder._baseState.implicit = state.implicit;
43839 }
43840 return state.useDecoder;
43841 };
43842
43843 Node.prototype._decodeChoice = function decodeChoice(input, options) {
43844 var state = this._baseState;
43845 var result = null;
43846 var match = false;
43847
43848 Object.keys(state.choice).some(function(key) {
43849 var save = input.save();
43850 var node = state.choice[key];
43851 try {
43852 var value = node._decode(input, options);
43853 if (input.isError(value))
43854 return false;
43855
43856 result = { type: key, value: value };
43857 match = true;
43858 } catch (e) {
43859 input.restore(save);
43860 return false;
43861 }
43862 return true;
43863 }, this);
43864
43865 if (!match)
43866 return input.error('Choice not matched');
43867
43868 return result;
43869 };
43870
43871 //
43872 // Encoding
43873 //
43874
43875 Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
43876 return new EncoderBuffer(data, this.reporter);
43877 };
43878
43879 Node.prototype._encode = function encode(data, reporter, parent) {
43880 var state = this._baseState;
43881 if (state['default'] !== null && state['default'] === data)
43882 return;
43883
43884 var result = this._encodeValue(data, reporter, parent);
43885 if (result === undefined)
43886 return;
43887
43888 if (this._skipDefault(result, reporter, parent))
43889 return;
43890
43891 return result;
43892 };
43893
43894 Node.prototype._encodeValue = function encode(data, reporter, parent) {
43895 var state = this._baseState;
43896
43897 // Decode root node
43898 if (state.parent === null)
43899 return state.children[0]._encode(data, reporter || new Reporter());
43900
43901 var result = null;
43902
43903 // Set reporter to share it with a child class
43904 this.reporter = reporter;
43905
43906 // Check if data is there
43907 if (state.optional && data === undefined) {
43908 if (state['default'] !== null)
43909 data = state['default']
43910 else
43911 return;
43912 }
43913
43914 // Encode children first
43915 var content = null;
43916 var primitive = false;
43917 if (state.any) {
43918 // Anything that was given is translated to buffer
43919 result = this._createEncoderBuffer(data);
43920 } else if (state.choice) {
43921 result = this._encodeChoice(data, reporter);
43922 } else if (state.contains) {
43923 content = this._getUse(state.contains, parent)._encode(data, reporter);
43924 primitive = true;
43925 } else if (state.children) {
43926 content = state.children.map(function(child) {
43927 if (child._baseState.tag === 'null_')
43928 return child._encode(null, reporter, data);
43929
43930 if (child._baseState.key === null)
43931 return reporter.error('Child should have a key');
43932 var prevKey = reporter.enterKey(child._baseState.key);
43933
43934 if (typeof data !== 'object')
43935 return reporter.error('Child expected, but input is not object');
43936
43937 var res = child._encode(data[child._baseState.key], reporter, data);
43938 reporter.leaveKey(prevKey);
43939
43940 return res;
43941 }, this).filter(function(child) {
43942 return child;
43943 });
43944 content = this._createEncoderBuffer(content);
43945 } else {
43946 if (state.tag === 'seqof' || state.tag === 'setof') {
43947 // TODO(indutny): this should be thrown on DSL level
43948 if (!(state.args && state.args.length === 1))
43949 return reporter.error('Too many args for : ' + state.tag);
43950
43951 if (!Array.isArray(data))
43952 return reporter.error('seqof/setof, but data is not Array');
43953
43954 var child = this.clone();
43955 child._baseState.implicit = null;
43956 content = this._createEncoderBuffer(data.map(function(item) {
43957 var state = this._baseState;
43958
43959 return this._getUse(state.args[0], data)._encode(item, reporter);
43960 }, child));
43961 } else if (state.use !== null) {
43962 result = this._getUse(state.use, parent)._encode(data, reporter);
43963 } else {
43964 content = this._encodePrimitive(state.tag, data);
43965 primitive = true;
43966 }
43967 }
43968
43969 // Encode data itself
43970 var result;
43971 if (!state.any && state.choice === null) {
43972 var tag = state.implicit !== null ? state.implicit : state.tag;
43973 var cls = state.implicit === null ? 'universal' : 'context';
43974
43975 if (tag === null) {
43976 if (state.use === null)
43977 reporter.error('Tag could be ommited only for .use()');
43978 } else {
43979 if (state.use === null)
43980 result = this._encodeComposite(tag, primitive, cls, content);
43981 }
43982 }
43983
43984 // Wrap in explicit
43985 if (state.explicit !== null)
43986 result = this._encodeComposite(state.explicit, false, 'context', result);
43987
43988 return result;
43989 };
43990
43991 Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
43992 var state = this._baseState;
43993
43994 var node = state.choice[data.type];
43995 if (!node) {
43996 assert(
43997 false,
43998 data.type + ' not found in ' +
43999 JSON.stringify(Object.keys(state.choice)));
44000 }
44001 return node._encode(data.value, reporter);
44002 };
44003
44004 Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
44005 var state = this._baseState;
44006
44007 if (/str$/.test(tag))
44008 return this._encodeStr(data, tag);
44009 else if (tag === 'objid' && state.args)
44010 return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
44011 else if (tag === 'objid')
44012 return this._encodeObjid(data, null, null);
44013 else if (tag === 'gentime' || tag === 'utctime')
44014 return this._encodeTime(data, tag);
44015 else if (tag === 'null_')
44016 return this._encodeNull();
44017 else if (tag === 'int' || tag === 'enum')
44018 return this._encodeInt(data, state.args && state.reverseArgs[0]);
44019 else if (tag === 'bool')
44020 return this._encodeBool(data);
44021 else if (tag === 'objDesc')
44022 return this._encodeStr(data, tag);
44023 else
44024 throw new Error('Unsupported tag: ' + tag);
44025 };
44026
44027 Node.prototype._isNumstr = function isNumstr(str) {
44028 return /^[0-9 ]*$/.test(str);
44029 };
44030
44031 Node.prototype._isPrintstr = function isPrintstr(str) {
44032 return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
44033 };
44034
44035 },{"../base":4,"minimalistic-assert":99}],6:[function(require,module,exports){
44036 var inherits = require('inherits');
44037
44038 function Reporter(options) {
44039 this._reporterState = {
44040 obj: null,
44041 path: [],
44042 options: options || {},
44043 errors: []
44044 };
44045 }
44046 exports.Reporter = Reporter;
44047
44048 Reporter.prototype.isError = function isError(obj) {
44049 return obj instanceof ReporterError;
44050 };
44051
44052 Reporter.prototype.save = function save() {
44053 var state = this._reporterState;
44054
44055 return { obj: state.obj, pathLen: state.path.length };
44056 };
44057
44058 Reporter.prototype.restore = function restore(data) {
44059 var state = this._reporterState;
44060
44061 state.obj = data.obj;
44062 state.path = state.path.slice(0, data.pathLen);
44063 };
44064
44065 Reporter.prototype.enterKey = function enterKey(key) {
44066 return this._reporterState.path.push(key);
44067 };
44068
44069 Reporter.prototype.exitKey = function exitKey(index) {
44070 var state = this._reporterState;
44071
44072 state.path = state.path.slice(0, index - 1);
44073 };
44074
44075 Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
44076 var state = this._reporterState;
44077
44078 this.exitKey(index);
44079 if (state.obj !== null)
44080 state.obj[key] = value;
44081 };
44082
44083 Reporter.prototype.path = function path() {
44084 return this._reporterState.path.join('/');
44085 };
44086
44087 Reporter.prototype.enterObject = function enterObject() {
44088 var state = this._reporterState;
44089
44090 var prev = state.obj;
44091 state.obj = {};
44092 return prev;
44093 };
44094
44095 Reporter.prototype.leaveObject = function leaveObject(prev) {
44096 var state = this._reporterState;
44097
44098 var now = state.obj;
44099 state.obj = prev;
44100 return now;
44101 };
44102
44103 Reporter.prototype.error = function error(msg) {
44104 var err;
44105 var state = this._reporterState;
44106
44107 var inherited = msg instanceof ReporterError;
44108 if (inherited) {
44109 err = msg;
44110 } else {
44111 err = new ReporterError(state.path.map(function(elem) {
44112 return '[' + JSON.stringify(elem) + ']';
44113 }).join(''), msg.message || msg, msg.stack);
44114 }
44115
44116 if (!state.options.partial)
44117 throw err;
44118
44119 if (!inherited)
44120 state.errors.push(err);
44121
44122 return err;
44123 };
44124
44125 Reporter.prototype.wrapResult = function wrapResult(result) {
44126 var state = this._reporterState;
44127 if (!state.options.partial)
44128 return result;
44129
44130 return {
44131 result: this.isError(result) ? null : result,
44132 errors: state.errors
44133 };
44134 };
44135
44136 function ReporterError(path, msg) {
44137 this.path = path;
44138 this.rethrow(msg);
44139 };
44140 inherits(ReporterError, Error);
44141
44142 ReporterError.prototype.rethrow = function rethrow(msg) {
44143 this.message = msg + ' at: ' + (this.path || '(shallow)');
44144 if (Error.captureStackTrace)
44145 Error.captureStackTrace(this, ReporterError);
44146
44147 if (!this.stack) {
44148 try {
44149 // IE only adds stack when thrown
44150 throw new Error(this.message);
44151 } catch (e) {
44152 this.stack = e.stack;
44153 }
44154 }
44155 return this;
44156 };
44157
44158 },{"inherits":95}],7:[function(require,module,exports){
44159 var constants = require('../constants');
44160
44161 exports.tagClass = {
44162 0: 'universal',
44163 1: 'application',
44164 2: 'context',
44165 3: 'private'
44166 };
44167 exports.tagClassByName = constants._reverse(exports.tagClass);
44168
44169 exports.tag = {
44170 0x00: 'end',
44171 0x01: 'bool',
44172 0x02: 'int',
44173 0x03: 'bitstr',
44174 0x04: 'octstr',
44175 0x05: 'null_',
44176 0x06: 'objid',
44177 0x07: 'objDesc',
44178 0x08: 'external',
44179 0x09: 'real',
44180 0x0a: 'enum',
44181 0x0b: 'embed',
44182 0x0c: 'utf8str',
44183 0x0d: 'relativeOid',
44184 0x10: 'seq',
44185 0x11: 'set',
44186 0x12: 'numstr',
44187 0x13: 'printstr',
44188 0x14: 't61str',
44189 0x15: 'videostr',
44190 0x16: 'ia5str',
44191 0x17: 'utctime',
44192 0x18: 'gentime',
44193 0x19: 'graphstr',
44194 0x1a: 'iso646str',
44195 0x1b: 'genstr',
44196 0x1c: 'unistr',
44197 0x1d: 'charstr',
44198 0x1e: 'bmpstr'
44199 };
44200 exports.tagByName = constants._reverse(exports.tag);
44201
44202 },{"../constants":8}],8:[function(require,module,exports){
44203 var constants = exports;
44204
44205 // Helper
44206 constants._reverse = function reverse(map) {
44207 var res = {};
44208
44209 Object.keys(map).forEach(function(key) {
44210 // Convert key to integer if it is stringified
44211 if ((key | 0) == key)
44212 key = key | 0;
44213
44214 var value = map[key];
44215 res[value] = key;
44216 });
44217
44218 return res;
44219 };
44220
44221 constants.der = require('./der');
44222
44223 },{"./der":7}],9:[function(require,module,exports){
44224 var inherits = require('inherits');
44225
44226 var asn1 = require('../../asn1');
44227 var base = asn1.base;
44228 var bignum = asn1.bignum;
44229
44230 // Import DER constants
44231 var der = asn1.constants.der;
44232
44233 function DERDecoder(entity) {
44234 this.enc = 'der';
44235 this.name = entity.name;
44236 this.entity = entity;
44237
44238 // Construct base tree
44239 this.tree = new DERNode();
44240 this.tree._init(entity.body);
44241 };
44242 module.exports = DERDecoder;
44243
44244 DERDecoder.prototype.decode = function decode(data, options) {
44245 if (!(data instanceof base.DecoderBuffer))
44246 data = new base.DecoderBuffer(data, options);
44247
44248 return this.tree._decode(data, options);
44249 };
44250
44251 // Tree methods
44252
44253 function DERNode(parent) {
44254 base.Node.call(this, 'der', parent);
44255 }
44256 inherits(DERNode, base.Node);
44257
44258 DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
44259 if (buffer.isEmpty())
44260 return false;
44261
44262 var state = buffer.save();
44263 var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
44264 if (buffer.isError(decodedTag))
44265 return decodedTag;
44266
44267 buffer.restore(state);
44268
44269 return decodedTag.tag === tag || decodedTag.tagStr === tag ||
44270 (decodedTag.tagStr + 'of') === tag || any;
44271 };
44272
44273 DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
44274 var decodedTag = derDecodeTag(buffer,
44275 'Failed to decode tag of "' + tag + '"');
44276 if (buffer.isError(decodedTag))
44277 return decodedTag;
44278
44279 var len = derDecodeLen(buffer,
44280 decodedTag.primitive,
44281 'Failed to get length of "' + tag + '"');
44282
44283 // Failure
44284 if (buffer.isError(len))
44285 return len;
44286
44287 if (!any &&
44288 decodedTag.tag !== tag &&
44289 decodedTag.tagStr !== tag &&
44290 decodedTag.tagStr + 'of' !== tag) {
44291 return buffer.error('Failed to match tag: "' + tag + '"');
44292 }
44293
44294 if (decodedTag.primitive || len !== null)
44295 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
44296
44297 // Indefinite length... find END tag
44298 var state = buffer.save();
44299 var res = this._skipUntilEnd(
44300 buffer,
44301 'Failed to skip indefinite length body: "' + this.tag + '"');
44302 if (buffer.isError(res))
44303 return res;
44304
44305 len = buffer.offset - state.offset;
44306 buffer.restore(state);
44307 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
44308 };
44309
44310 DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
44311 while (true) {
44312 var tag = derDecodeTag(buffer, fail);
44313 if (buffer.isError(tag))
44314 return tag;
44315 var len = derDecodeLen(buffer, tag.primitive, fail);
44316 if (buffer.isError(len))
44317 return len;
44318
44319 var res;
44320 if (tag.primitive || len !== null)
44321 res = buffer.skip(len)
44322 else
44323 res = this._skipUntilEnd(buffer, fail);
44324
44325 // Failure
44326 if (buffer.isError(res))
44327 return res;
44328
44329 if (tag.tagStr === 'end')
44330 break;
44331 }
44332 };
44333
44334 DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,
44335 options) {
44336 var result = [];
44337 while (!buffer.isEmpty()) {
44338 var possibleEnd = this._peekTag(buffer, 'end');
44339 if (buffer.isError(possibleEnd))
44340 return possibleEnd;
44341
44342 var res = decoder.decode(buffer, 'der', options);
44343 if (buffer.isError(res) && possibleEnd)
44344 break;
44345 result.push(res);
44346 }
44347 return result;
44348 };
44349
44350 DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
44351 if (tag === 'bitstr') {
44352 var unused = buffer.readUInt8();
44353 if (buffer.isError(unused))
44354 return unused;
44355 return { unused: unused, data: buffer.raw() };
44356 } else if (tag === 'bmpstr') {
44357 var raw = buffer.raw();
44358 if (raw.length % 2 === 1)
44359 return buffer.error('Decoding of string type: bmpstr length mismatch');
44360
44361 var str = '';
44362 for (var i = 0; i < raw.length / 2; i++) {
44363 str += String.fromCharCode(raw.readUInt16BE(i * 2));
44364 }
44365 return str;
44366 } else if (tag === 'numstr') {
44367 var numstr = buffer.raw().toString('ascii');
44368 if (!this._isNumstr(numstr)) {
44369 return buffer.error('Decoding of string type: ' +
44370 'numstr unsupported characters');
44371 }
44372 return numstr;
44373 } else if (tag === 'octstr') {
44374 return buffer.raw();
44375 } else if (tag === 'objDesc') {
44376 return buffer.raw();
44377 } else if (tag === 'printstr') {
44378 var printstr = buffer.raw().toString('ascii');
44379 if (!this._isPrintstr(printstr)) {
44380 return buffer.error('Decoding of string type: ' +
44381 'printstr unsupported characters');
44382 }
44383 return printstr;
44384 } else if (/str$/.test(tag)) {
44385 return buffer.raw().toString();
44386 } else {
44387 return buffer.error('Decoding of string type: ' + tag + ' unsupported');
44388 }
44389 };
44390
44391 DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
44392 var result;
44393 var identifiers = [];
44394 var ident = 0;
44395 while (!buffer.isEmpty()) {
44396 var subident = buffer.readUInt8();
44397 ident <<= 7;
44398 ident |= subident & 0x7f;
44399 if ((subident & 0x80) === 0) {
44400 identifiers.push(ident);
44401 ident = 0;
44402 }
44403 }
44404 if (subident & 0x80)
44405 identifiers.push(ident);
44406
44407 var first = (identifiers[0] / 40) | 0;
44408 var second = identifiers[0] % 40;
44409
44410 if (relative)
44411 result = identifiers;
44412 else
44413 result = [first, second].concat(identifiers.slice(1));
44414
44415 if (values) {
44416 var tmp = values[result.join(' ')];
44417 if (tmp === undefined)
44418 tmp = values[result.join('.')];
44419 if (tmp !== undefined)
44420 result = tmp;
44421 }
44422
44423 return result;
44424 };
44425
44426 DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
44427 var str = buffer.raw().toString();
44428 if (tag === 'gentime') {
44429 var year = str.slice(0, 4) | 0;
44430 var mon = str.slice(4, 6) | 0;
44431 var day = str.slice(6, 8) | 0;
44432 var hour = str.slice(8, 10) | 0;
44433 var min = str.slice(10, 12) | 0;
44434 var sec = str.slice(12, 14) | 0;
44435 } else if (tag === 'utctime') {
44436 var year = str.slice(0, 2) | 0;
44437 var mon = str.slice(2, 4) | 0;
44438 var day = str.slice(4, 6) | 0;
44439 var hour = str.slice(6, 8) | 0;
44440 var min = str.slice(8, 10) | 0;
44441 var sec = str.slice(10, 12) | 0;
44442 if (year < 70)
44443 year = 2000 + year;
44444 else
44445 year = 1900 + year;
44446 } else {
44447 return buffer.error('Decoding ' + tag + ' time is not supported yet');
44448 }
44449
44450 return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
44451 };
44452
44453 DERNode.prototype._decodeNull = function decodeNull(buffer) {
44454 return null;
44455 };
44456
44457 DERNode.prototype._decodeBool = function decodeBool(buffer) {
44458 var res = buffer.readUInt8();
44459 if (buffer.isError(res))
44460 return res;
44461 else
44462 return res !== 0;
44463 };
44464
44465 DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
44466 // Bigint, return as it is (assume big endian)
44467 var raw = buffer.raw();
44468 var res = new bignum(raw);
44469
44470 if (values)
44471 res = values[res.toString(10)] || res;
44472
44473 return res;
44474 };
44475
44476 DERNode.prototype._use = function use(entity, obj) {
44477 if (typeof entity === 'function')
44478 entity = entity(obj);
44479 return entity._getDecoder('der').tree;
44480 };
44481
44482 // Utility methods
44483
44484 function derDecodeTag(buf, fail) {
44485 var tag = buf.readUInt8(fail);
44486 if (buf.isError(tag))
44487 return tag;
44488
44489 var cls = der.tagClass[tag >> 6];
44490 var primitive = (tag & 0x20) === 0;
44491
44492 // Multi-octet tag - load
44493 if ((tag & 0x1f) === 0x1f) {
44494 var oct = tag;
44495 tag = 0;
44496 while ((oct & 0x80) === 0x80) {
44497 oct = buf.readUInt8(fail);
44498 if (buf.isError(oct))
44499 return oct;
44500
44501 tag <<= 7;
44502 tag |= oct & 0x7f;
44503 }
44504 } else {
44505 tag &= 0x1f;
44506 }
44507 var tagStr = der.tag[tag];
44508
44509 return {
44510 cls: cls,
44511 primitive: primitive,
44512 tag: tag,
44513 tagStr: tagStr
44514 };
44515 }
44516
44517 function derDecodeLen(buf, primitive, fail) {
44518 var len = buf.readUInt8(fail);
44519 if (buf.isError(len))
44520 return len;
44521
44522 // Indefinite form
44523 if (!primitive && len === 0x80)
44524 return null;
44525
44526 // Definite form
44527 if ((len & 0x80) === 0) {
44528 // Short form
44529 return len;
44530 }
44531
44532 // Long form
44533 var num = len & 0x7f;
44534 if (num > 4)
44535 return buf.error('length octect is too long');
44536
44537 len = 0;
44538 for (var i = 0; i < num; i++) {
44539 len <<= 8;
44540 var j = buf.readUInt8(fail);
44541 if (buf.isError(j))
44542 return j;
44543 len |= j;
44544 }
44545
44546 return len;
44547 }
44548
44549 },{"../../asn1":1,"inherits":95}],10:[function(require,module,exports){
44550 var decoders = exports;
44551
44552 decoders.der = require('./der');
44553 decoders.pem = require('./pem');
44554
44555 },{"./der":9,"./pem":11}],11:[function(require,module,exports){
44556 var inherits = require('inherits');
44557 var Buffer = require('buffer').Buffer;
44558
44559 var DERDecoder = require('./der');
44560
44561 function PEMDecoder(entity) {
44562 DERDecoder.call(this, entity);
44563 this.enc = 'pem';
44564 };
44565 inherits(PEMDecoder, DERDecoder);
44566 module.exports = PEMDecoder;
44567
44568 PEMDecoder.prototype.decode = function decode(data, options) {
44569 var lines = data.toString().split(/[\r\n]+/g);
44570
44571 var label = options.label.toUpperCase();
44572
44573 var re = /^-----(BEGIN|END) ([^-]+)-----$/;
44574 var start = -1;
44575 var end = -1;
44576 for (var i = 0; i < lines.length; i++) {
44577 var match = lines[i].match(re);
44578 if (match === null)
44579 continue;
44580
44581 if (match[2] !== label)
44582 continue;
44583
44584 if (start === -1) {
44585 if (match[1] !== 'BEGIN')
44586 break;
44587 start = i;
44588 } else {
44589 if (match[1] !== 'END')
44590 break;
44591 end = i;
44592 break;
44593 }
44594 }
44595 if (start === -1 || end === -1)
44596 throw new Error('PEM section not found for: ' + label);
44597
44598 var base64 = lines.slice(start + 1, end).join('');
44599 // Remove excessive symbols
44600 base64.replace(/[^a-z0-9\+\/=]+/gi, '');
44601
44602 var input = new Buffer(base64, 'base64');
44603 return DERDecoder.prototype.decode.call(this, input, options);
44604 };
44605
44606 },{"./der":9,"buffer":47,"inherits":95}],12:[function(require,module,exports){
44607 var inherits = require('inherits');
44608 var Buffer = require('buffer').Buffer;
44609
44610 var asn1 = require('../../asn1');
44611 var base = asn1.base;
44612
44613 // Import DER constants
44614 var der = asn1.constants.der;
44615
44616 function DEREncoder(entity) {
44617 this.enc = 'der';
44618 this.name = entity.name;
44619 this.entity = entity;
44620
44621 // Construct base tree
44622 this.tree = new DERNode();
44623 this.tree._init(entity.body);
44624 };
44625 module.exports = DEREncoder;
44626
44627 DEREncoder.prototype.encode = function encode(data, reporter) {
44628 return this.tree._encode(data, reporter).join();
44629 };
44630
44631 // Tree methods
44632
44633 function DERNode(parent) {
44634 base.Node.call(this, 'der', parent);
44635 }
44636 inherits(DERNode, base.Node);
44637
44638 DERNode.prototype._encodeComposite = function encodeComposite(tag,
44639 primitive,
44640 cls,
44641 content) {
44642 var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
44643
44644 // Short form
44645 if (content.length < 0x80) {
44646 var header = new Buffer(2);
44647 header[0] = encodedTag;
44648 header[1] = content.length;
44649 return this._createEncoderBuffer([ header, content ]);
44650 }
44651
44652 // Long form
44653 // Count octets required to store length
44654 var lenOctets = 1;
44655 for (var i = content.length; i >= 0x100; i >>= 8)
44656 lenOctets++;
44657
44658 var header = new Buffer(1 + 1 + lenOctets);
44659 header[0] = encodedTag;
44660 header[1] = 0x80 | lenOctets;
44661
44662 for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
44663 header[i] = j & 0xff;
44664
44665 return this._createEncoderBuffer([ header, content ]);
44666 };
44667
44668 DERNode.prototype._encodeStr = function encodeStr(str, tag) {
44669 if (tag === 'bitstr') {
44670 return this._createEncoderBuffer([ str.unused | 0, str.data ]);
44671 } else if (tag === 'bmpstr') {
44672 var buf = new Buffer(str.length * 2);
44673 for (var i = 0; i < str.length; i++) {
44674 buf.writeUInt16BE(str.charCodeAt(i), i * 2);
44675 }
44676 return this._createEncoderBuffer(buf);
44677 } else if (tag === 'numstr') {
44678 if (!this._isNumstr(str)) {
44679 return this.reporter.error('Encoding of string type: numstr supports ' +
44680 'only digits and space');
44681 }
44682 return this._createEncoderBuffer(str);
44683 } else if (tag === 'printstr') {
44684 if (!this._isPrintstr(str)) {
44685 return this.reporter.error('Encoding of string type: printstr supports ' +
44686 'only latin upper and lower case letters, ' +
44687 'digits, space, apostrophe, left and rigth ' +
44688 'parenthesis, plus sign, comma, hyphen, ' +
44689 'dot, slash, colon, equal sign, ' +
44690 'question mark');
44691 }
44692 return this._createEncoderBuffer(str);
44693 } else if (/str$/.test(tag)) {
44694 return this._createEncoderBuffer(str);
44695 } else if (tag === 'objDesc') {
44696 return this._createEncoderBuffer(str);
44697 } else {
44698 return this.reporter.error('Encoding of string type: ' + tag +
44699 ' unsupported');
44700 }
44701 };
44702
44703 DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
44704 if (typeof id === 'string') {
44705 if (!values)
44706 return this.reporter.error('string objid given, but no values map found');
44707 if (!values.hasOwnProperty(id))
44708 return this.reporter.error('objid not found in values map');
44709 id = values[id].split(/[\s\.]+/g);
44710 for (var i = 0; i < id.length; i++)
44711 id[i] |= 0;
44712 } else if (Array.isArray(id)) {
44713 id = id.slice();
44714 for (var i = 0; i < id.length; i++)
44715 id[i] |= 0;
44716 }
44717
44718 if (!Array.isArray(id)) {
44719 return this.reporter.error('objid() should be either array or string, ' +
44720 'got: ' + JSON.stringify(id));
44721 }
44722
44723 if (!relative) {
44724 if (id[1] >= 40)
44725 return this.reporter.error('Second objid identifier OOB');
44726 id.splice(0, 2, id[0] * 40 + id[1]);
44727 }
44728
44729 // Count number of octets
44730 var size = 0;
44731 for (var i = 0; i < id.length; i++) {
44732 var ident = id[i];
44733 for (size++; ident >= 0x80; ident >>= 7)
44734 size++;
44735 }
44736
44737 var objid = new Buffer(size);
44738 var offset = objid.length - 1;
44739 for (var i = id.length - 1; i >= 0; i--) {
44740 var ident = id[i];
44741 objid[offset--] = ident & 0x7f;
44742 while ((ident >>= 7) > 0)
44743 objid[offset--] = 0x80 | (ident & 0x7f);
44744 }
44745
44746 return this._createEncoderBuffer(objid);
44747 };
44748
44749 function two(num) {
44750 if (num < 10)
44751 return '0' + num;
44752 else
44753 return num;
44754 }
44755
44756 DERNode.prototype._encodeTime = function encodeTime(time, tag) {
44757 var str;
44758 var date = new Date(time);
44759
44760 if (tag === 'gentime') {
44761 str = [
44762 two(date.getFullYear()),
44763 two(date.getUTCMonth() + 1),
44764 two(date.getUTCDate()),
44765 two(date.getUTCHours()),
44766 two(date.getUTCMinutes()),
44767 two(date.getUTCSeconds()),
44768 'Z'
44769 ].join('');
44770 } else if (tag === 'utctime') {
44771 str = [
44772 two(date.getFullYear() % 100),
44773 two(date.getUTCMonth() + 1),
44774 two(date.getUTCDate()),
44775 two(date.getUTCHours()),
44776 two(date.getUTCMinutes()),
44777 two(date.getUTCSeconds()),
44778 'Z'
44779 ].join('');
44780 } else {
44781 this.reporter.error('Encoding ' + tag + ' time is not supported yet');
44782 }
44783
44784 return this._encodeStr(str, 'octstr');
44785 };
44786
44787 DERNode.prototype._encodeNull = function encodeNull() {
44788 return this._createEncoderBuffer('');
44789 };
44790
44791 DERNode.prototype._encodeInt = function encodeInt(num, values) {
44792 if (typeof num === 'string') {
44793 if (!values)
44794 return this.reporter.error('String int or enum given, but no values map');
44795 if (!values.hasOwnProperty(num)) {
44796 return this.reporter.error('Values map doesn\'t contain: ' +
44797 JSON.stringify(num));
44798 }
44799 num = values[num];
44800 }
44801
44802 // Bignum, assume big endian
44803 if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
44804 var numArray = num.toArray();
44805 if (!num.sign && numArray[0] & 0x80) {
44806 numArray.unshift(0);
44807 }
44808 num = new Buffer(numArray);
44809 }
44810
44811 if (Buffer.isBuffer(num)) {
44812 var size = num.length;
44813 if (num.length === 0)
44814 size++;
44815
44816 var out = new Buffer(size);
44817 num.copy(out);
44818 if (num.length === 0)
44819 out[0] = 0
44820 return this._createEncoderBuffer(out);
44821 }
44822
44823 if (num < 0x80)
44824 return this._createEncoderBuffer(num);
44825
44826 if (num < 0x100)
44827 return this._createEncoderBuffer([0, num]);
44828
44829 var size = 1;
44830 for (var i = num; i >= 0x100; i >>= 8)
44831 size++;
44832
44833 var out = new Array(size);
44834 for (var i = out.length - 1; i >= 0; i--) {
44835 out[i] = num & 0xff;
44836 num >>= 8;
44837 }
44838 if(out[0] & 0x80) {
44839 out.unshift(0);
44840 }
44841
44842 return this._createEncoderBuffer(new Buffer(out));
44843 };
44844
44845 DERNode.prototype._encodeBool = function encodeBool(value) {
44846 return this._createEncoderBuffer(value ? 0xff : 0);
44847 };
44848
44849 DERNode.prototype._use = function use(entity, obj) {
44850 if (typeof entity === 'function')
44851 entity = entity(obj);
44852 return entity._getEncoder('der').tree;
44853 };
44854
44855 DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
44856 var state = this._baseState;
44857 var i;
44858 if (state['default'] === null)
44859 return false;
44860
44861 var data = dataBuffer.join();
44862 if (state.defaultBuffer === undefined)
44863 state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
44864
44865 if (data.length !== state.defaultBuffer.length)
44866 return false;
44867
44868 for (i=0; i < data.length; i++)
44869 if (data[i] !== state.defaultBuffer[i])
44870 return false;
44871
44872 return true;
44873 };
44874
44875 // Utility methods
44876
44877 function encodeTag(tag, primitive, cls, reporter) {
44878 var res;
44879
44880 if (tag === 'seqof')
44881 tag = 'seq';
44882 else if (tag === 'setof')
44883 tag = 'set';
44884
44885 if (der.tagByName.hasOwnProperty(tag))
44886 res = der.tagByName[tag];
44887 else if (typeof tag === 'number' && (tag | 0) === tag)
44888 res = tag;
44889 else
44890 return reporter.error('Unknown tag: ' + tag);
44891
44892 if (res >= 0x1f)
44893 return reporter.error('Multi-octet tag encoding unsupported');
44894
44895 if (!primitive)
44896 res |= 0x20;
44897
44898 res |= (der.tagClassByName[cls || 'universal'] << 6);
44899
44900 return res;
44901 }
44902
44903 },{"../../asn1":1,"buffer":47,"inherits":95}],13:[function(require,module,exports){
44904 var encoders = exports;
44905
44906 encoders.der = require('./der');
44907 encoders.pem = require('./pem');
44908
44909 },{"./der":12,"./pem":14}],14:[function(require,module,exports){
44910 var inherits = require('inherits');
44911
44912 var DEREncoder = require('./der');
44913
44914 function PEMEncoder(entity) {
44915 DEREncoder.call(this, entity);
44916 this.enc = 'pem';
44917 };
44918 inherits(PEMEncoder, DEREncoder);
44919 module.exports = PEMEncoder;
44920
44921 PEMEncoder.prototype.encode = function encode(data, options) {
44922 var buf = DEREncoder.prototype.encode.call(this, data);
44923
44924 var p = buf.toString('base64');
44925 var out = [ '-----BEGIN ' + options.label + '-----' ];
44926 for (var i = 0; i < p.length; i += 64)
44927 out.push(p.slice(i, i + 64));
44928 out.push('-----END ' + options.label + '-----');
44929 return out.join('\n');
44930 };
44931
44932 },{"./der":12,"inherits":95}],15:[function(require,module,exports){
44933 (function (global){
44934 'use strict';
44935
44936 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
44937 // original notice:
44938
44939 /*!
44940 * The buffer module from node.js, for the browser.
44941 *
44942 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
44943 * @license MIT
44944 */
44945 function compare(a, b) {
44946 if (a === b) {
44947 return 0;
44948 }
44949
44950 var x = a.length;
44951 var y = b.length;
44952
44953 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
44954 if (a[i] !== b[i]) {
44955 x = a[i];
44956 y = b[i];
44957 break;
44958 }
44959 }
44960
44961 if (x < y) {
44962 return -1;
44963 }
44964 if (y < x) {
44965 return 1;
44966 }
44967 return 0;
44968 }
44969 function isBuffer(b) {
44970 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
44971 return global.Buffer.isBuffer(b);
44972 }
44973 return !!(b != null && b._isBuffer);
44974 }
44975
44976 // based on node assert, original notice:
44977
44978 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
44979 //
44980 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
44981 //
44982 // Originally from narwhal.js (http://narwhaljs.org)
44983 // Copyright (c) 2009 Thomas Robinson <280north.com>
44984 //
44985 // Permission is hereby granted, free of charge, to any person obtaining a copy
44986 // of this software and associated documentation files (the 'Software'), to
44987 // deal in the Software without restriction, including without limitation the
44988 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
44989 // sell copies of the Software, and to permit persons to whom the Software is
44990 // furnished to do so, subject to the following conditions:
44991 //
44992 // The above copyright notice and this permission notice shall be included in
44993 // all copies or substantial portions of the Software.
44994 //
44995 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44996 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
44997 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
44998 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
44999 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
45000 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
45001
45002 var util = require('util/');
45003 var hasOwn = Object.prototype.hasOwnProperty;
45004 var pSlice = Array.prototype.slice;
45005 var functionsHaveNames = (function () {
45006 return function foo() {}.name === 'foo';
45007 }());
45008 function pToString (obj) {
45009 return Object.prototype.toString.call(obj);
45010 }
45011 function isView(arrbuf) {
45012 if (isBuffer(arrbuf)) {
45013 return false;
45014 }
45015 if (typeof global.ArrayBuffer !== 'function') {
45016 return false;
45017 }
45018 if (typeof ArrayBuffer.isView === 'function') {
45019 return ArrayBuffer.isView(arrbuf);
45020 }
45021 if (!arrbuf) {
45022 return false;
45023 }
45024 if (arrbuf instanceof DataView) {
45025 return true;
45026 }
45027 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
45028 return true;
45029 }
45030 return false;
45031 }
45032 // 1. The assert module provides functions that throw
45033 // AssertionError's when particular conditions are not met. The
45034 // assert module must conform to the following interface.
45035
45036 var assert = module.exports = ok;
45037
45038 // 2. The AssertionError is defined in assert.
45039 // new assert.AssertionError({ message: message,
45040 // actual: actual,
45041 // expected: expected })
45042
45043 var regex = /\s*function\s+([^\(\s]*)\s*/;
45044 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
45045 function getName(func) {
45046 if (!util.isFunction(func)) {
45047 return;
45048 }
45049 if (functionsHaveNames) {
45050 return func.name;
45051 }
45052 var str = func.toString();
45053 var match = str.match(regex);
45054 return match && match[1];
45055 }
45056 assert.AssertionError = function AssertionError(options) {
45057 this.name = 'AssertionError';
45058 this.actual = options.actual;
45059 this.expected = options.expected;
45060 this.operator = options.operator;
45061 if (options.message) {
45062 this.message = options.message;
45063 this.generatedMessage = false;
45064 } else {
45065 this.message = getMessage(this);
45066 this.generatedMessage = true;
45067 }
45068 var stackStartFunction = options.stackStartFunction || fail;
45069 if (Error.captureStackTrace) {
45070 Error.captureStackTrace(this, stackStartFunction);
45071 } else {
45072 // non v8 browsers so we can have a stacktrace
45073 var err = new Error();
45074 if (err.stack) {
45075 var out = err.stack;
45076
45077 // try to strip useless frames
45078 var fn_name = getName(stackStartFunction);
45079 var idx = out.indexOf('\n' + fn_name);
45080 if (idx >= 0) {
45081 // once we have located the function frame
45082 // we need to strip out everything before it (and its line)
45083 var next_line = out.indexOf('\n', idx + 1);
45084 out = out.substring(next_line + 1);
45085 }
45086
45087 this.stack = out;
45088 }
45089 }
45090 };
45091
45092 // assert.AssertionError instanceof Error
45093 util.inherits(assert.AssertionError, Error);
45094
45095 function truncate(s, n) {
45096 if (typeof s === 'string') {
45097 return s.length < n ? s : s.slice(0, n);
45098 } else {
45099 return s;
45100 }
45101 }
45102 function inspect(something) {
45103 if (functionsHaveNames || !util.isFunction(something)) {
45104 return util.inspect(something);
45105 }
45106 var rawname = getName(something);
45107 var name = rawname ? ': ' + rawname : '';
45108 return '[Function' + name + ']';
45109 }
45110 function getMessage(self) {
45111 return truncate(inspect(self.actual), 128) + ' ' +
45112 self.operator + ' ' +
45113 truncate(inspect(self.expected), 128);
45114 }
45115
45116 // At present only the three keys mentioned above are used and
45117 // understood by the spec. Implementations or sub modules can pass
45118 // other keys to the AssertionError's constructor - they will be
45119 // ignored.
45120
45121 // 3. All of the following functions must throw an AssertionError
45122 // when a corresponding condition is not met, with a message that
45123 // may be undefined if not provided. All assertion methods provide
45124 // both the actual and expected values to the assertion error for
45125 // display purposes.
45126
45127 function fail(actual, expected, message, operator, stackStartFunction) {
45128 throw new assert.AssertionError({
45129 message: message,
45130 actual: actual,
45131 expected: expected,
45132 operator: operator,
45133 stackStartFunction: stackStartFunction
45134 });
45135 }
45136
45137 // EXTENSION! allows for well behaved errors defined elsewhere.
45138 assert.fail = fail;
45139
45140 // 4. Pure assertion tests whether a value is truthy, as determined
45141 // by !!guard.
45142 // assert.ok(guard, message_opt);
45143 // This statement is equivalent to assert.equal(true, !!guard,
45144 // message_opt);. To test strictly for the value true, use
45145 // assert.strictEqual(true, guard, message_opt);.
45146
45147 function ok(value, message) {
45148 if (!value) fail(value, true, message, '==', assert.ok);
45149 }
45150 assert.ok = ok;
45151
45152 // 5. The equality assertion tests shallow, coercive equality with
45153 // ==.
45154 // assert.equal(actual, expected, message_opt);
45155
45156 assert.equal = function equal(actual, expected, message) {
45157 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
45158 };
45159
45160 // 6. The non-equality assertion tests for whether two objects are not equal
45161 // with != assert.notEqual(actual, expected, message_opt);
45162
45163 assert.notEqual = function notEqual(actual, expected, message) {
45164 if (actual == expected) {
45165 fail(actual, expected, message, '!=', assert.notEqual);
45166 }
45167 };
45168
45169 // 7. The equivalence assertion tests a deep equality relation.
45170 // assert.deepEqual(actual, expected, message_opt);
45171
45172 assert.deepEqual = function deepEqual(actual, expected, message) {
45173 if (!_deepEqual(actual, expected, false)) {
45174 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
45175 }
45176 };
45177
45178 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
45179 if (!_deepEqual(actual, expected, true)) {
45180 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
45181 }
45182 };
45183
45184 function _deepEqual(actual, expected, strict, memos) {
45185 // 7.1. All identical values are equivalent, as determined by ===.
45186 if (actual === expected) {
45187 return true;
45188 } else if (isBuffer(actual) && isBuffer(expected)) {
45189 return compare(actual, expected) === 0;
45190
45191 // 7.2. If the expected value is a Date object, the actual value is
45192 // equivalent if it is also a Date object that refers to the same time.
45193 } else if (util.isDate(actual) && util.isDate(expected)) {
45194 return actual.getTime() === expected.getTime();
45195
45196 // 7.3 If the expected value is a RegExp object, the actual value is
45197 // equivalent if it is also a RegExp object with the same source and
45198 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
45199 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
45200 return actual.source === expected.source &&
45201 actual.global === expected.global &&
45202 actual.multiline === expected.multiline &&
45203 actual.lastIndex === expected.lastIndex &&
45204 actual.ignoreCase === expected.ignoreCase;
45205
45206 // 7.4. Other pairs that do not both pass typeof value == 'object',
45207 // equivalence is determined by ==.
45208 } else if ((actual === null || typeof actual !== 'object') &&
45209 (expected === null || typeof expected !== 'object')) {
45210 return strict ? actual === expected : actual == expected;
45211
45212 // If both values are instances of typed arrays, wrap their underlying
45213 // ArrayBuffers in a Buffer each to increase performance
45214 // This optimization requires the arrays to have the same type as checked by
45215 // Object.prototype.toString (aka pToString). Never perform binary
45216 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
45217 // bit patterns are not identical.
45218 } else if (isView(actual) && isView(expected) &&
45219 pToString(actual) === pToString(expected) &&
45220 !(actual instanceof Float32Array ||
45221 actual instanceof Float64Array)) {
45222 return compare(new Uint8Array(actual.buffer),
45223 new Uint8Array(expected.buffer)) === 0;
45224
45225 // 7.5 For all other Object pairs, including Array objects, equivalence is
45226 // determined by having the same number of owned properties (as verified
45227 // with Object.prototype.hasOwnProperty.call), the same set of keys
45228 // (although not necessarily the same order), equivalent values for every
45229 // corresponding key, and an identical 'prototype' property. Note: this
45230 // accounts for both named and indexed properties on Arrays.
45231 } else if (isBuffer(actual) !== isBuffer(expected)) {
45232 return false;
45233 } else {
45234 memos = memos || {actual: [], expected: []};
45235
45236 var actualIndex = memos.actual.indexOf(actual);
45237 if (actualIndex !== -1) {
45238 if (actualIndex === memos.expected.indexOf(expected)) {
45239 return true;
45240 }
45241 }
45242
45243 memos.actual.push(actual);
45244 memos.expected.push(expected);
45245
45246 return objEquiv(actual, expected, strict, memos);
45247 }
45248 }
45249
45250 function isArguments(object) {
45251 return Object.prototype.toString.call(object) == '[object Arguments]';
45252 }
45253
45254 function objEquiv(a, b, strict, actualVisitedObjects) {
45255 if (a === null || a === undefined || b === null || b === undefined)
45256 return false;
45257 // if one is a primitive, the other must be same
45258 if (util.isPrimitive(a) || util.isPrimitive(b))
45259 return a === b;
45260 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
45261 return false;
45262 var aIsArgs = isArguments(a);
45263 var bIsArgs = isArguments(b);
45264 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
45265 return false;
45266 if (aIsArgs) {
45267 a = pSlice.call(a);
45268 b = pSlice.call(b);
45269 return _deepEqual(a, b, strict);
45270 }
45271 var ka = objectKeys(a);
45272 var kb = objectKeys(b);
45273 var key, i;
45274 // having the same number of owned properties (keys incorporates
45275 // hasOwnProperty)
45276 if (ka.length !== kb.length)
45277 return false;
45278 //the same set of keys (although not necessarily the same order),
45279 ka.sort();
45280 kb.sort();
45281 //~~~cheap key test
45282 for (i = ka.length - 1; i >= 0; i--) {
45283 if (ka[i] !== kb[i])
45284 return false;
45285 }
45286 //equivalent values for every corresponding key, and
45287 //~~~possibly expensive deep test
45288 for (i = ka.length - 1; i >= 0; i--) {
45289 key = ka[i];
45290 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
45291 return false;
45292 }
45293 return true;
45294 }
45295
45296 // 8. The non-equivalence assertion tests for any deep inequality.
45297 // assert.notDeepEqual(actual, expected, message_opt);
45298
45299 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
45300 if (_deepEqual(actual, expected, false)) {
45301 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
45302 }
45303 };
45304
45305 assert.notDeepStrictEqual = notDeepStrictEqual;
45306 function notDeepStrictEqual(actual, expected, message) {
45307 if (_deepEqual(actual, expected, true)) {
45308 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
45309 }
45310 }
45311
45312
45313 // 9. The strict equality assertion tests strict equality, as determined by ===.
45314 // assert.strictEqual(actual, expected, message_opt);
45315
45316 assert.strictEqual = function strictEqual(actual, expected, message) {
45317 if (actual !== expected) {
45318 fail(actual, expected, message, '===', assert.strictEqual);
45319 }
45320 };
45321
45322 // 10. The strict non-equality assertion tests for strict inequality, as
45323 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
45324
45325 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
45326 if (actual === expected) {
45327 fail(actual, expected, message, '!==', assert.notStrictEqual);
45328 }
45329 };
45330
45331 function expectedException(actual, expected) {
45332 if (!actual || !expected) {
45333 return false;
45334 }
45335
45336 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
45337 return expected.test(actual);
45338 }
45339
45340 try {
45341 if (actual instanceof expected) {
45342 return true;
45343 }
45344 } catch (e) {
45345 // Ignore. The instanceof check doesn't work for arrow functions.
45346 }
45347
45348 if (Error.isPrototypeOf(expected)) {
45349 return false;
45350 }
45351
45352 return expected.call({}, actual) === true;
45353 }
45354
45355 function _tryBlock(block) {
45356 var error;
45357 try {
45358 block();
45359 } catch (e) {
45360 error = e;
45361 }
45362 return error;
45363 }
45364
45365 function _throws(shouldThrow, block, expected, message) {
45366 var actual;
45367
45368 if (typeof block !== 'function') {
45369 throw new TypeError('"block" argument must be a function');
45370 }
45371
45372 if (typeof expected === 'string') {
45373 message = expected;
45374 expected = null;
45375 }
45376
45377 actual = _tryBlock(block);
45378
45379 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
45380 (message ? ' ' + message : '.');
45381
45382 if (shouldThrow && !actual) {
45383 fail(actual, expected, 'Missing expected exception' + message);
45384 }
45385
45386 var userProvidedMessage = typeof message === 'string';
45387 var isUnwantedException = !shouldThrow && util.isError(actual);
45388 var isUnexpectedException = !shouldThrow && actual && !expected;
45389
45390 if ((isUnwantedException &&
45391 userProvidedMessage &&
45392 expectedException(actual, expected)) ||
45393 isUnexpectedException) {
45394 fail(actual, expected, 'Got unwanted exception' + message);
45395 }
45396
45397 if ((shouldThrow && actual && expected &&
45398 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
45399 throw actual;
45400 }
45401 }
45402
45403 // 11. Expected to throw an error:
45404 // assert.throws(block, Error_opt, message_opt);
45405
45406 assert.throws = function(block, /*optional*/error, /*optional*/message) {
45407 _throws(true, block, error, message);
45408 };
45409
45410 // EXTENSION! This is annoying to write outside this module.
45411 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
45412 _throws(false, block, error, message);
45413 };
45414
45415 assert.ifError = function(err) { if (err) throw err; };
45416
45417 var objectKeys = Object.keys || function (obj) {
45418 var keys = [];
45419 for (var key in obj) {
45420 if (hasOwn.call(obj, key)) keys.push(key);
45421 }
45422 return keys;
45423 };
45424
45425 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
45426 },{"util/":148}],16:[function(require,module,exports){
45427 'use strict'
45428
45429 exports.byteLength = byteLength
45430 exports.toByteArray = toByteArray
45431 exports.fromByteArray = fromByteArray
45432
45433 var lookup = []
45434 var revLookup = []
45435 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
45436
45437 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
45438 for (var i = 0, len = code.length; i < len; ++i) {
45439 lookup[i] = code[i]
45440 revLookup[code.charCodeAt(i)] = i
45441 }
45442
45443 revLookup['-'.charCodeAt(0)] = 62
45444 revLookup['_'.charCodeAt(0)] = 63
45445
45446 function placeHoldersCount (b64) {
45447 var len = b64.length
45448 if (len % 4 > 0) {
45449 throw new Error('Invalid string. Length must be a multiple of 4')
45450 }
45451
45452 // the number of equal signs (place holders)
45453 // if there are two placeholders, than the two characters before it
45454 // represent one byte
45455 // if there is only one, then the three characters before it represent 2 bytes
45456 // this is just a cheap hack to not do indexOf twice
45457 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
45458 }
45459
45460 function byteLength (b64) {
45461 // base64 is 4/3 + up to two characters of the original data
45462 return b64.length * 3 / 4 - placeHoldersCount(b64)
45463 }
45464
45465 function toByteArray (b64) {
45466 var i, j, l, tmp, placeHolders, arr
45467 var len = b64.length
45468 placeHolders = placeHoldersCount(b64)
45469
45470 arr = new Arr(len * 3 / 4 - placeHolders)
45471
45472 // if there are placeholders, only get up to the last complete 4 chars
45473 l = placeHolders > 0 ? len - 4 : len
45474
45475 var L = 0
45476
45477 for (i = 0, j = 0; i < l; i += 4, j += 3) {
45478 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
45479 arr[L++] = (tmp >> 16) & 0xFF
45480 arr[L++] = (tmp >> 8) & 0xFF
45481 arr[L++] = tmp & 0xFF
45482 }
45483
45484 if (placeHolders === 2) {
45485 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
45486 arr[L++] = tmp & 0xFF
45487 } else if (placeHolders === 1) {
45488 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
45489 arr[L++] = (tmp >> 8) & 0xFF
45490 arr[L++] = tmp & 0xFF
45491 }
45492
45493 return arr
45494 }
45495
45496 function tripletToBase64 (num) {
45497 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
45498 }
45499
45500 function encodeChunk (uint8, start, end) {
45501 var tmp
45502 var output = []
45503 for (var i = start; i < end; i += 3) {
45504 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
45505 output.push(tripletToBase64(tmp))
45506 }
45507 return output.join('')
45508 }
45509
45510 function fromByteArray (uint8) {
45511 var tmp
45512 var len = uint8.length
45513 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
45514 var output = ''
45515 var parts = []
45516 var maxChunkLength = 16383 // must be multiple of 3
45517
45518 // go through the array every three bytes, we'll deal with trailing stuff later
45519 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
45520 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
45521 }
45522
45523 // pad the end with zeros, but make sure to not forget the extra bytes
45524 if (extraBytes === 1) {
45525 tmp = uint8[len - 1]
45526 output += lookup[tmp >> 2]
45527 output += lookup[(tmp << 4) & 0x3F]
45528 output += '=='
45529 } else if (extraBytes === 2) {
45530 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
45531 output += lookup[tmp >> 10]
45532 output += lookup[(tmp >> 4) & 0x3F]
45533 output += lookup[(tmp << 2) & 0x3F]
45534 output += '='
45535 }
45536
45537 parts.push(output)
45538
45539 return parts.join('')
45540 }
45541
45542 },{}],17:[function(require,module,exports){
45543 (function (module, exports) {
45544 'use strict';
45545
45546 // Utils
45547 function assert (val, msg) {
45548 if (!val) throw new Error(msg || 'Assertion failed');
45549 }
45550
45551 // Could use `inherits` module, but don't want to move from single file
45552 // architecture yet.
45553 function inherits (ctor, superCtor) {
45554 ctor.super_ = superCtor;
45555 var TempCtor = function () {};
45556 TempCtor.prototype = superCtor.prototype;
45557 ctor.prototype = new TempCtor();
45558 ctor.prototype.constructor = ctor;
45559 }
45560
45561 // BN
45562
45563 function BN (number, base, endian) {
45564 if (BN.isBN(number)) {
45565 return number;
45566 }
45567
45568 this.negative = 0;
45569 this.words = null;
45570 this.length = 0;
45571
45572 // Reduction context
45573 this.red = null;
45574
45575 if (number !== null) {
45576 if (base === 'le' || base === 'be') {
45577 endian = base;
45578 base = 10;
45579 }
45580
45581 this._init(number || 0, base || 10, endian || 'be');
45582 }
45583 }
45584 if (typeof module === 'object') {
45585 module.exports = BN;
45586 } else {
45587 exports.BN = BN;
45588 }
45589
45590 BN.BN = BN;
45591 BN.wordSize = 26;
45592
45593 var Buffer;
45594 try {
45595 Buffer = require('buf' + 'fer').Buffer;
45596 } catch (e) {
45597 }
45598
45599 BN.isBN = function isBN (num) {
45600 if (num instanceof BN) {
45601 return true;
45602 }
45603
45604 return num !== null && typeof num === 'object' &&
45605 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
45606 };
45607
45608 BN.max = function max (left, right) {
45609 if (left.cmp(right) > 0) return left;
45610 return right;
45611 };
45612
45613 BN.min = function min (left, right) {
45614 if (left.cmp(right) < 0) return left;
45615 return right;
45616 };
45617
45618 BN.prototype._init = function init (number, base, endian) {
45619 if (typeof number === 'number') {
45620 return this._initNumber(number, base, endian);
45621 }
45622
45623 if (typeof number === 'object') {
45624 return this._initArray(number, base, endian);
45625 }
45626
45627 if (base === 'hex') {
45628 base = 16;
45629 }
45630 assert(base === (base | 0) && base >= 2 && base <= 36);
45631
45632 number = number.toString().replace(/\s+/g, '');
45633 var start = 0;
45634 if (number[0] === '-') {
45635 start++;
45636 }
45637
45638 if (base === 16) {
45639 this._parseHex(number, start);
45640 } else {
45641 this._parseBase(number, base, start);
45642 }
45643
45644 if (number[0] === '-') {
45645 this.negative = 1;
45646 }
45647
45648 this.strip();
45649
45650 if (endian !== 'le') return;
45651
45652 this._initArray(this.toArray(), base, endian);
45653 };
45654
45655 BN.prototype._initNumber = function _initNumber (number, base, endian) {
45656 if (number < 0) {
45657 this.negative = 1;
45658 number = -number;
45659 }
45660 if (number < 0x4000000) {
45661 this.words = [ number & 0x3ffffff ];
45662 this.length = 1;
45663 } else if (number < 0x10000000000000) {
45664 this.words = [
45665 number & 0x3ffffff,
45666 (number / 0x4000000) & 0x3ffffff
45667 ];
45668 this.length = 2;
45669 } else {
45670 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
45671 this.words = [
45672 number & 0x3ffffff,
45673 (number / 0x4000000) & 0x3ffffff,
45674 1
45675 ];
45676 this.length = 3;
45677 }
45678
45679 if (endian !== 'le') return;
45680
45681 // Reverse the bytes
45682 this._initArray(this.toArray(), base, endian);
45683 };
45684
45685 BN.prototype._initArray = function _initArray (number, base, endian) {
45686 // Perhaps a Uint8Array
45687 assert(typeof number.length === 'number');
45688 if (number.length <= 0) {
45689 this.words = [ 0 ];
45690 this.length = 1;
45691 return this;
45692 }
45693
45694 this.length = Math.ceil(number.length / 3);
45695 this.words = new Array(this.length);
45696 for (var i = 0; i < this.length; i++) {
45697 this.words[i] = 0;
45698 }
45699
45700 var j, w;
45701 var off = 0;
45702 if (endian === 'be') {
45703 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
45704 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
45705 this.words[j] |= (w << off) & 0x3ffffff;
45706 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
45707 off += 24;
45708 if (off >= 26) {
45709 off -= 26;
45710 j++;
45711 }
45712 }
45713 } else if (endian === 'le') {
45714 for (i = 0, j = 0; i < number.length; i += 3) {
45715 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
45716 this.words[j] |= (w << off) & 0x3ffffff;
45717 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
45718 off += 24;
45719 if (off >= 26) {
45720 off -= 26;
45721 j++;
45722 }
45723 }
45724 }
45725 return this.strip();
45726 };
45727
45728 function parseHex (str, start, end) {
45729 var r = 0;
45730 var len = Math.min(str.length, end);
45731 for (var i = start; i < len; i++) {
45732 var c = str.charCodeAt(i) - 48;
45733
45734 r <<= 4;
45735
45736 // 'a' - 'f'
45737 if (c >= 49 && c <= 54) {
45738 r |= c - 49 + 0xa;
45739
45740 // 'A' - 'F'
45741 } else if (c >= 17 && c <= 22) {
45742 r |= c - 17 + 0xa;
45743
45744 // '0' - '9'
45745 } else {
45746 r |= c & 0xf;
45747 }
45748 }
45749 return r;
45750 }
45751
45752 BN.prototype._parseHex = function _parseHex (number, start) {
45753 // Create possibly bigger array to ensure that it fits the number
45754 this.length = Math.ceil((number.length - start) / 6);
45755 this.words = new Array(this.length);
45756 for (var i = 0; i < this.length; i++) {
45757 this.words[i] = 0;
45758 }
45759
45760 var j, w;
45761 // Scan 24-bit chunks and add them to the number
45762 var off = 0;
45763 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
45764 w = parseHex(number, i, i + 6);
45765 this.words[j] |= (w << off) & 0x3ffffff;
45766 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
45767 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
45768 off += 24;
45769 if (off >= 26) {
45770 off -= 26;
45771 j++;
45772 }
45773 }
45774 if (i + 6 !== start) {
45775 w = parseHex(number, start, i + 6);
45776 this.words[j] |= (w << off) & 0x3ffffff;
45777 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
45778 }
45779 this.strip();
45780 };
45781
45782 function parseBase (str, start, end, mul) {
45783 var r = 0;
45784 var len = Math.min(str.length, end);
45785 for (var i = start; i < len; i++) {
45786 var c = str.charCodeAt(i) - 48;
45787
45788 r *= mul;
45789
45790 // 'a'
45791 if (c >= 49) {
45792 r += c - 49 + 0xa;
45793
45794 // 'A'
45795 } else if (c >= 17) {
45796 r += c - 17 + 0xa;
45797
45798 // '0' - '9'
45799 } else {
45800 r += c;
45801 }
45802 }
45803 return r;
45804 }
45805
45806 BN.prototype._parseBase = function _parseBase (number, base, start) {
45807 // Initialize as zero
45808 this.words = [ 0 ];
45809 this.length = 1;
45810
45811 // Find length of limb in base
45812 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
45813 limbLen++;
45814 }
45815 limbLen--;
45816 limbPow = (limbPow / base) | 0;
45817
45818 var total = number.length - start;
45819 var mod = total % limbLen;
45820 var end = Math.min(total, total - mod) + start;
45821
45822 var word = 0;
45823 for (var i = start; i < end; i += limbLen) {
45824 word = parseBase(number, i, i + limbLen, base);
45825
45826 this.imuln(limbPow);
45827 if (this.words[0] + word < 0x4000000) {
45828 this.words[0] += word;
45829 } else {
45830 this._iaddn(word);
45831 }
45832 }
45833
45834 if (mod !== 0) {
45835 var pow = 1;
45836 word = parseBase(number, i, number.length, base);
45837
45838 for (i = 0; i < mod; i++) {
45839 pow *= base;
45840 }
45841
45842 this.imuln(pow);
45843 if (this.words[0] + word < 0x4000000) {
45844 this.words[0] += word;
45845 } else {
45846 this._iaddn(word);
45847 }
45848 }
45849 };
45850
45851 BN.prototype.copy = function copy (dest) {
45852 dest.words = new Array(this.length);
45853 for (var i = 0; i < this.length; i++) {
45854 dest.words[i] = this.words[i];
45855 }
45856 dest.length = this.length;
45857 dest.negative = this.negative;
45858 dest.red = this.red;
45859 };
45860
45861 BN.prototype.clone = function clone () {
45862 var r = new BN(null);
45863 this.copy(r);
45864 return r;
45865 };
45866
45867 BN.prototype._expand = function _expand (size) {
45868 while (this.length < size) {
45869 this.words[this.length++] = 0;
45870 }
45871 return this;
45872 };
45873
45874 // Remove leading `0` from `this`
45875 BN.prototype.strip = function strip () {
45876 while (this.length > 1 && this.words[this.length - 1] === 0) {
45877 this.length--;
45878 }
45879 return this._normSign();
45880 };
45881
45882 BN.prototype._normSign = function _normSign () {
45883 // -0 = 0
45884 if (this.length === 1 && this.words[0] === 0) {
45885 this.negative = 0;
45886 }
45887 return this;
45888 };
45889
45890 BN.prototype.inspect = function inspect () {
45891 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
45892 };
45893
45894 /*
45895
45896 var zeros = [];
45897 var groupSizes = [];
45898 var groupBases = [];
45899
45900 var s = '';
45901 var i = -1;
45902 while (++i < BN.wordSize) {
45903 zeros[i] = s;
45904 s += '0';
45905 }
45906 groupSizes[0] = 0;
45907 groupSizes[1] = 0;
45908 groupBases[0] = 0;
45909 groupBases[1] = 0;
45910 var base = 2 - 1;
45911 while (++base < 36 + 1) {
45912 var groupSize = 0;
45913 var groupBase = 1;
45914 while (groupBase < (1 << BN.wordSize) / base) {
45915 groupBase *= base;
45916 groupSize += 1;
45917 }
45918 groupSizes[base] = groupSize;
45919 groupBases[base] = groupBase;
45920 }
45921
45922 */
45923
45924 var zeros = [
45925 '',
45926 '0',
45927 '00',
45928 '000',
45929 '0000',
45930 '00000',
45931 '000000',
45932 '0000000',
45933 '00000000',
45934 '000000000',
45935 '0000000000',
45936 '00000000000',
45937 '000000000000',
45938 '0000000000000',
45939 '00000000000000',
45940 '000000000000000',
45941 '0000000000000000',
45942 '00000000000000000',
45943 '000000000000000000',
45944 '0000000000000000000',
45945 '00000000000000000000',
45946 '000000000000000000000',
45947 '0000000000000000000000',
45948 '00000000000000000000000',
45949 '000000000000000000000000',
45950 '0000000000000000000000000'
45951 ];
45952
45953 var groupSizes = [
45954 0, 0,
45955 25, 16, 12, 11, 10, 9, 8,
45956 8, 7, 7, 7, 7, 6, 6,
45957 6, 6, 6, 6, 6, 5, 5,
45958 5, 5, 5, 5, 5, 5, 5,
45959 5, 5, 5, 5, 5, 5, 5
45960 ];
45961
45962 var groupBases = [
45963 0, 0,
45964 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
45965 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
45966 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
45967 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
45968 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
45969 ];
45970
45971 BN.prototype.toString = function toString (base, padding) {
45972 base = base || 10;
45973 padding = padding | 0 || 1;
45974
45975 var out;
45976 if (base === 16 || base === 'hex') {
45977 out = '';
45978 var off = 0;
45979 var carry = 0;
45980 for (var i = 0; i < this.length; i++) {
45981 var w = this.words[i];
45982 var word = (((w << off) | carry) & 0xffffff).toString(16);
45983 carry = (w >>> (24 - off)) & 0xffffff;
45984 if (carry !== 0 || i !== this.length - 1) {
45985 out = zeros[6 - word.length] + word + out;
45986 } else {
45987 out = word + out;
45988 }
45989 off += 2;
45990 if (off >= 26) {
45991 off -= 26;
45992 i--;
45993 }
45994 }
45995 if (carry !== 0) {
45996 out = carry.toString(16) + out;
45997 }
45998 while (out.length % padding !== 0) {
45999 out = '0' + out;
46000 }
46001 if (this.negative !== 0) {
46002 out = '-' + out;
46003 }
46004 return out;
46005 }
46006
46007 if (base === (base | 0) && base >= 2 && base <= 36) {
46008 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
46009 var groupSize = groupSizes[base];
46010 // var groupBase = Math.pow(base, groupSize);
46011 var groupBase = groupBases[base];
46012 out = '';
46013 var c = this.clone();
46014 c.negative = 0;
46015 while (!c.isZero()) {
46016 var r = c.modn(groupBase).toString(base);
46017 c = c.idivn(groupBase);
46018
46019 if (!c.isZero()) {
46020 out = zeros[groupSize - r.length] + r + out;
46021 } else {
46022 out = r + out;
46023 }
46024 }
46025 if (this.isZero()) {
46026 out = '0' + out;
46027 }
46028 while (out.length % padding !== 0) {
46029 out = '0' + out;
46030 }
46031 if (this.negative !== 0) {
46032 out = '-' + out;
46033 }
46034 return out;
46035 }
46036
46037 assert(false, 'Base should be between 2 and 36');
46038 };
46039
46040 BN.prototype.toNumber = function toNumber () {
46041 var ret = this.words[0];
46042 if (this.length === 2) {
46043 ret += this.words[1] * 0x4000000;
46044 } else if (this.length === 3 && this.words[2] === 0x01) {
46045 // NOTE: at this stage it is known that the top bit is set
46046 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
46047 } else if (this.length > 2) {
46048 assert(false, 'Number can only safely store up to 53 bits');
46049 }
46050 return (this.negative !== 0) ? -ret : ret;
46051 };
46052
46053 BN.prototype.toJSON = function toJSON () {
46054 return this.toString(16);
46055 };
46056
46057 BN.prototype.toBuffer = function toBuffer (endian, length) {
46058 assert(typeof Buffer !== 'undefined');
46059 return this.toArrayLike(Buffer, endian, length);
46060 };
46061
46062 BN.prototype.toArray = function toArray (endian, length) {
46063 return this.toArrayLike(Array, endian, length);
46064 };
46065
46066 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
46067 var byteLength = this.byteLength();
46068 var reqLength = length || Math.max(1, byteLength);
46069 assert(byteLength <= reqLength, 'byte array longer than desired length');
46070 assert(reqLength > 0, 'Requested array length <= 0');
46071
46072 this.strip();
46073 var littleEndian = endian === 'le';
46074 var res = new ArrayType(reqLength);
46075
46076 var b, i;
46077 var q = this.clone();
46078 if (!littleEndian) {
46079 // Assume big-endian
46080 for (i = 0; i < reqLength - byteLength; i++) {
46081 res[i] = 0;
46082 }
46083
46084 for (i = 0; !q.isZero(); i++) {
46085 b = q.andln(0xff);
46086 q.iushrn(8);
46087
46088 res[reqLength - i - 1] = b;
46089 }
46090 } else {
46091 for (i = 0; !q.isZero(); i++) {
46092 b = q.andln(0xff);
46093 q.iushrn(8);
46094
46095 res[i] = b;
46096 }
46097
46098 for (; i < reqLength; i++) {
46099 res[i] = 0;
46100 }
46101 }
46102
46103 return res;
46104 };
46105
46106 if (Math.clz32) {
46107 BN.prototype._countBits = function _countBits (w) {
46108 return 32 - Math.clz32(w);
46109 };
46110 } else {
46111 BN.prototype._countBits = function _countBits (w) {
46112 var t = w;
46113 var r = 0;
46114 if (t >= 0x1000) {
46115 r += 13;
46116 t >>>= 13;
46117 }
46118 if (t >= 0x40) {
46119 r += 7;
46120 t >>>= 7;
46121 }
46122 if (t >= 0x8) {
46123 r += 4;
46124 t >>>= 4;
46125 }
46126 if (t >= 0x02) {
46127 r += 2;
46128 t >>>= 2;
46129 }
46130 return r + t;
46131 };
46132 }
46133
46134 BN.prototype._zeroBits = function _zeroBits (w) {
46135 // Short-cut
46136 if (w === 0) return 26;
46137
46138 var t = w;
46139 var r = 0;
46140 if ((t & 0x1fff) === 0) {
46141 r += 13;
46142 t >>>= 13;
46143 }
46144 if ((t & 0x7f) === 0) {
46145 r += 7;
46146 t >>>= 7;
46147 }
46148 if ((t & 0xf) === 0) {
46149 r += 4;
46150 t >>>= 4;
46151 }
46152 if ((t & 0x3) === 0) {
46153 r += 2;
46154 t >>>= 2;
46155 }
46156 if ((t & 0x1) === 0) {
46157 r++;
46158 }
46159 return r;
46160 };
46161
46162 // Return number of used bits in a BN
46163 BN.prototype.bitLength = function bitLength () {
46164 var w = this.words[this.length - 1];
46165 var hi = this._countBits(w);
46166 return (this.length - 1) * 26 + hi;
46167 };
46168
46169 function toBitArray (num) {
46170 var w = new Array(num.bitLength());
46171
46172 for (var bit = 0; bit < w.length; bit++) {
46173 var off = (bit / 26) | 0;
46174 var wbit = bit % 26;
46175
46176 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
46177 }
46178
46179 return w;
46180 }
46181
46182 // Number of trailing zero bits
46183 BN.prototype.zeroBits = function zeroBits () {
46184 if (this.isZero()) return 0;
46185
46186 var r = 0;
46187 for (var i = 0; i < this.length; i++) {
46188 var b = this._zeroBits(this.words[i]);
46189 r += b;
46190 if (b !== 26) break;
46191 }
46192 return r;
46193 };
46194
46195 BN.prototype.byteLength = function byteLength () {
46196 return Math.ceil(this.bitLength() / 8);
46197 };
46198
46199 BN.prototype.toTwos = function toTwos (width) {
46200 if (this.negative !== 0) {
46201 return this.abs().inotn(width).iaddn(1);
46202 }
46203 return this.clone();
46204 };
46205
46206 BN.prototype.fromTwos = function fromTwos (width) {
46207 if (this.testn(width - 1)) {
46208 return this.notn(width).iaddn(1).ineg();
46209 }
46210 return this.clone();
46211 };
46212
46213 BN.prototype.isNeg = function isNeg () {
46214 return this.negative !== 0;
46215 };
46216
46217 // Return negative clone of `this`
46218 BN.prototype.neg = function neg () {
46219 return this.clone().ineg();
46220 };
46221
46222 BN.prototype.ineg = function ineg () {
46223 if (!this.isZero()) {
46224 this.negative ^= 1;
46225 }
46226
46227 return this;
46228 };
46229
46230 // Or `num` with `this` in-place
46231 BN.prototype.iuor = function iuor (num) {
46232 while (this.length < num.length) {
46233 this.words[this.length++] = 0;
46234 }
46235
46236 for (var i = 0; i < num.length; i++) {
46237 this.words[i] = this.words[i] | num.words[i];
46238 }
46239
46240 return this.strip();
46241 };
46242
46243 BN.prototype.ior = function ior (num) {
46244 assert((this.negative | num.negative) === 0);
46245 return this.iuor(num);
46246 };
46247
46248 // Or `num` with `this`
46249 BN.prototype.or = function or (num) {
46250 if (this.length > num.length) return this.clone().ior(num);
46251 return num.clone().ior(this);
46252 };
46253
46254 BN.prototype.uor = function uor (num) {
46255 if (this.length > num.length) return this.clone().iuor(num);
46256 return num.clone().iuor(this);
46257 };
46258
46259 // And `num` with `this` in-place
46260 BN.prototype.iuand = function iuand (num) {
46261 // b = min-length(num, this)
46262 var b;
46263 if (this.length > num.length) {
46264 b = num;
46265 } else {
46266 b = this;
46267 }
46268
46269 for (var i = 0; i < b.length; i++) {
46270 this.words[i] = this.words[i] & num.words[i];
46271 }
46272
46273 this.length = b.length;
46274
46275 return this.strip();
46276 };
46277
46278 BN.prototype.iand = function iand (num) {
46279 assert((this.negative | num.negative) === 0);
46280 return this.iuand(num);
46281 };
46282
46283 // And `num` with `this`
46284 BN.prototype.and = function and (num) {
46285 if (this.length > num.length) return this.clone().iand(num);
46286 return num.clone().iand(this);
46287 };
46288
46289 BN.prototype.uand = function uand (num) {
46290 if (this.length > num.length) return this.clone().iuand(num);
46291 return num.clone().iuand(this);
46292 };
46293
46294 // Xor `num` with `this` in-place
46295 BN.prototype.iuxor = function iuxor (num) {
46296 // a.length > b.length
46297 var a;
46298 var b;
46299 if (this.length > num.length) {
46300 a = this;
46301 b = num;
46302 } else {
46303 a = num;
46304 b = this;
46305 }
46306
46307 for (var i = 0; i < b.length; i++) {
46308 this.words[i] = a.words[i] ^ b.words[i];
46309 }
46310
46311 if (this !== a) {
46312 for (; i < a.length; i++) {
46313 this.words[i] = a.words[i];
46314 }
46315 }
46316
46317 this.length = a.length;
46318
46319 return this.strip();
46320 };
46321
46322 BN.prototype.ixor = function ixor (num) {
46323 assert((this.negative | num.negative) === 0);
46324 return this.iuxor(num);
46325 };
46326
46327 // Xor `num` with `this`
46328 BN.prototype.xor = function xor (num) {
46329 if (this.length > num.length) return this.clone().ixor(num);
46330 return num.clone().ixor(this);
46331 };
46332
46333 BN.prototype.uxor = function uxor (num) {
46334 if (this.length > num.length) return this.clone().iuxor(num);
46335 return num.clone().iuxor(this);
46336 };
46337
46338 // Not ``this`` with ``width`` bitwidth
46339 BN.prototype.inotn = function inotn (width) {
46340 assert(typeof width === 'number' && width >= 0);
46341
46342 var bytesNeeded = Math.ceil(width / 26) | 0;
46343 var bitsLeft = width % 26;
46344
46345 // Extend the buffer with leading zeroes
46346 this._expand(bytesNeeded);
46347
46348 if (bitsLeft > 0) {
46349 bytesNeeded--;
46350 }
46351
46352 // Handle complete words
46353 for (var i = 0; i < bytesNeeded; i++) {
46354 this.words[i] = ~this.words[i] & 0x3ffffff;
46355 }
46356
46357 // Handle the residue
46358 if (bitsLeft > 0) {
46359 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
46360 }
46361
46362 // And remove leading zeroes
46363 return this.strip();
46364 };
46365
46366 BN.prototype.notn = function notn (width) {
46367 return this.clone().inotn(width);
46368 };
46369
46370 // Set `bit` of `this`
46371 BN.prototype.setn = function setn (bit, val) {
46372 assert(typeof bit === 'number' && bit >= 0);
46373
46374 var off = (bit / 26) | 0;
46375 var wbit = bit % 26;
46376
46377 this._expand(off + 1);
46378
46379 if (val) {
46380 this.words[off] = this.words[off] | (1 << wbit);
46381 } else {
46382 this.words[off] = this.words[off] & ~(1 << wbit);
46383 }
46384
46385 return this.strip();
46386 };
46387
46388 // Add `num` to `this` in-place
46389 BN.prototype.iadd = function iadd (num) {
46390 var r;
46391
46392 // negative + positive
46393 if (this.negative !== 0 && num.negative === 0) {
46394 this.negative = 0;
46395 r = this.isub(num);
46396 this.negative ^= 1;
46397 return this._normSign();
46398
46399 // positive + negative
46400 } else if (this.negative === 0 && num.negative !== 0) {
46401 num.negative = 0;
46402 r = this.isub(num);
46403 num.negative = 1;
46404 return r._normSign();
46405 }
46406
46407 // a.length > b.length
46408 var a, b;
46409 if (this.length > num.length) {
46410 a = this;
46411 b = num;
46412 } else {
46413 a = num;
46414 b = this;
46415 }
46416
46417 var carry = 0;
46418 for (var i = 0; i < b.length; i++) {
46419 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
46420 this.words[i] = r & 0x3ffffff;
46421 carry = r >>> 26;
46422 }
46423 for (; carry !== 0 && i < a.length; i++) {
46424 r = (a.words[i] | 0) + carry;
46425 this.words[i] = r & 0x3ffffff;
46426 carry = r >>> 26;
46427 }
46428
46429 this.length = a.length;
46430 if (carry !== 0) {
46431 this.words[this.length] = carry;
46432 this.length++;
46433 // Copy the rest of the words
46434 } else if (a !== this) {
46435 for (; i < a.length; i++) {
46436 this.words[i] = a.words[i];
46437 }
46438 }
46439
46440 return this;
46441 };
46442
46443 // Add `num` to `this`
46444 BN.prototype.add = function add (num) {
46445 var res;
46446 if (num.negative !== 0 && this.negative === 0) {
46447 num.negative = 0;
46448 res = this.sub(num);
46449 num.negative ^= 1;
46450 return res;
46451 } else if (num.negative === 0 && this.negative !== 0) {
46452 this.negative = 0;
46453 res = num.sub(this);
46454 this.negative = 1;
46455 return res;
46456 }
46457
46458 if (this.length > num.length) return this.clone().iadd(num);
46459
46460 return num.clone().iadd(this);
46461 };
46462
46463 // Subtract `num` from `this` in-place
46464 BN.prototype.isub = function isub (num) {
46465 // this - (-num) = this + num
46466 if (num.negative !== 0) {
46467 num.negative = 0;
46468 var r = this.iadd(num);
46469 num.negative = 1;
46470 return r._normSign();
46471
46472 // -this - num = -(this + num)
46473 } else if (this.negative !== 0) {
46474 this.negative = 0;
46475 this.iadd(num);
46476 this.negative = 1;
46477 return this._normSign();
46478 }
46479
46480 // At this point both numbers are positive
46481 var cmp = this.cmp(num);
46482
46483 // Optimization - zeroify
46484 if (cmp === 0) {
46485 this.negative = 0;
46486 this.length = 1;
46487 this.words[0] = 0;
46488 return this;
46489 }
46490
46491 // a > b
46492 var a, b;
46493 if (cmp > 0) {
46494 a = this;
46495 b = num;
46496 } else {
46497 a = num;
46498 b = this;
46499 }
46500
46501 var carry = 0;
46502 for (var i = 0; i < b.length; i++) {
46503 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
46504 carry = r >> 26;
46505 this.words[i] = r & 0x3ffffff;
46506 }
46507 for (; carry !== 0 && i < a.length; i++) {
46508 r = (a.words[i] | 0) + carry;
46509 carry = r >> 26;
46510 this.words[i] = r & 0x3ffffff;
46511 }
46512
46513 // Copy rest of the words
46514 if (carry === 0 && i < a.length && a !== this) {
46515 for (; i < a.length; i++) {
46516 this.words[i] = a.words[i];
46517 }
46518 }
46519
46520 this.length = Math.max(this.length, i);
46521
46522 if (a !== this) {
46523 this.negative = 1;
46524 }
46525
46526 return this.strip();
46527 };
46528
46529 // Subtract `num` from `this`
46530 BN.prototype.sub = function sub (num) {
46531 return this.clone().isub(num);
46532 };
46533
46534 function smallMulTo (self, num, out) {
46535 out.negative = num.negative ^ self.negative;
46536 var len = (self.length + num.length) | 0;
46537 out.length = len;
46538 len = (len - 1) | 0;
46539
46540 // Peel one iteration (compiler can't do it, because of code complexity)
46541 var a = self.words[0] | 0;
46542 var b = num.words[0] | 0;
46543 var r = a * b;
46544
46545 var lo = r & 0x3ffffff;
46546 var carry = (r / 0x4000000) | 0;
46547 out.words[0] = lo;
46548
46549 for (var k = 1; k < len; k++) {
46550 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
46551 // note that ncarry could be >= 0x3ffffff
46552 var ncarry = carry >>> 26;
46553 var rword = carry & 0x3ffffff;
46554 var maxJ = Math.min(k, num.length - 1);
46555 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
46556 var i = (k - j) | 0;
46557 a = self.words[i] | 0;
46558 b = num.words[j] | 0;
46559 r = a * b + rword;
46560 ncarry += (r / 0x4000000) | 0;
46561 rword = r & 0x3ffffff;
46562 }
46563 out.words[k] = rword | 0;
46564 carry = ncarry | 0;
46565 }
46566 if (carry !== 0) {
46567 out.words[k] = carry | 0;
46568 } else {
46569 out.length--;
46570 }
46571
46572 return out.strip();
46573 }
46574
46575 // TODO(indutny): it may be reasonable to omit it for users who don't need
46576 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
46577 // multiplication (like elliptic secp256k1).
46578 var comb10MulTo = function comb10MulTo (self, num, out) {
46579 var a = self.words;
46580 var b = num.words;
46581 var o = out.words;
46582 var c = 0;
46583 var lo;
46584 var mid;
46585 var hi;
46586 var a0 = a[0] | 0;
46587 var al0 = a0 & 0x1fff;
46588 var ah0 = a0 >>> 13;
46589 var a1 = a[1] | 0;
46590 var al1 = a1 & 0x1fff;
46591 var ah1 = a1 >>> 13;
46592 var a2 = a[2] | 0;
46593 var al2 = a2 & 0x1fff;
46594 var ah2 = a2 >>> 13;
46595 var a3 = a[3] | 0;
46596 var al3 = a3 & 0x1fff;
46597 var ah3 = a3 >>> 13;
46598 var a4 = a[4] | 0;
46599 var al4 = a4 & 0x1fff;
46600 var ah4 = a4 >>> 13;
46601 var a5 = a[5] | 0;
46602 var al5 = a5 & 0x1fff;
46603 var ah5 = a5 >>> 13;
46604 var a6 = a[6] | 0;
46605 var al6 = a6 & 0x1fff;
46606 var ah6 = a6 >>> 13;
46607 var a7 = a[7] | 0;
46608 var al7 = a7 & 0x1fff;
46609 var ah7 = a7 >>> 13;
46610 var a8 = a[8] | 0;
46611 var al8 = a8 & 0x1fff;
46612 var ah8 = a8 >>> 13;
46613 var a9 = a[9] | 0;
46614 var al9 = a9 & 0x1fff;
46615 var ah9 = a9 >>> 13;
46616 var b0 = b[0] | 0;
46617 var bl0 = b0 & 0x1fff;
46618 var bh0 = b0 >>> 13;
46619 var b1 = b[1] | 0;
46620 var bl1 = b1 & 0x1fff;
46621 var bh1 = b1 >>> 13;
46622 var b2 = b[2] | 0;
46623 var bl2 = b2 & 0x1fff;
46624 var bh2 = b2 >>> 13;
46625 var b3 = b[3] | 0;
46626 var bl3 = b3 & 0x1fff;
46627 var bh3 = b3 >>> 13;
46628 var b4 = b[4] | 0;
46629 var bl4 = b4 & 0x1fff;
46630 var bh4 = b4 >>> 13;
46631 var b5 = b[5] | 0;
46632 var bl5 = b5 & 0x1fff;
46633 var bh5 = b5 >>> 13;
46634 var b6 = b[6] | 0;
46635 var bl6 = b6 & 0x1fff;
46636 var bh6 = b6 >>> 13;
46637 var b7 = b[7] | 0;
46638 var bl7 = b7 & 0x1fff;
46639 var bh7 = b7 >>> 13;
46640 var b8 = b[8] | 0;
46641 var bl8 = b8 & 0x1fff;
46642 var bh8 = b8 >>> 13;
46643 var b9 = b[9] | 0;
46644 var bl9 = b9 & 0x1fff;
46645 var bh9 = b9 >>> 13;
46646
46647 out.negative = self.negative ^ num.negative;
46648 out.length = 19;
46649 /* k = 0 */
46650 lo = Math.imul(al0, bl0);
46651 mid = Math.imul(al0, bh0);
46652 mid = (mid + Math.imul(ah0, bl0)) | 0;
46653 hi = Math.imul(ah0, bh0);
46654 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46655 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
46656 w0 &= 0x3ffffff;
46657 /* k = 1 */
46658 lo = Math.imul(al1, bl0);
46659 mid = Math.imul(al1, bh0);
46660 mid = (mid + Math.imul(ah1, bl0)) | 0;
46661 hi = Math.imul(ah1, bh0);
46662 lo = (lo + Math.imul(al0, bl1)) | 0;
46663 mid = (mid + Math.imul(al0, bh1)) | 0;
46664 mid = (mid + Math.imul(ah0, bl1)) | 0;
46665 hi = (hi + Math.imul(ah0, bh1)) | 0;
46666 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46667 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
46668 w1 &= 0x3ffffff;
46669 /* k = 2 */
46670 lo = Math.imul(al2, bl0);
46671 mid = Math.imul(al2, bh0);
46672 mid = (mid + Math.imul(ah2, bl0)) | 0;
46673 hi = Math.imul(ah2, bh0);
46674 lo = (lo + Math.imul(al1, bl1)) | 0;
46675 mid = (mid + Math.imul(al1, bh1)) | 0;
46676 mid = (mid + Math.imul(ah1, bl1)) | 0;
46677 hi = (hi + Math.imul(ah1, bh1)) | 0;
46678 lo = (lo + Math.imul(al0, bl2)) | 0;
46679 mid = (mid + Math.imul(al0, bh2)) | 0;
46680 mid = (mid + Math.imul(ah0, bl2)) | 0;
46681 hi = (hi + Math.imul(ah0, bh2)) | 0;
46682 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46683 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
46684 w2 &= 0x3ffffff;
46685 /* k = 3 */
46686 lo = Math.imul(al3, bl0);
46687 mid = Math.imul(al3, bh0);
46688 mid = (mid + Math.imul(ah3, bl0)) | 0;
46689 hi = Math.imul(ah3, bh0);
46690 lo = (lo + Math.imul(al2, bl1)) | 0;
46691 mid = (mid + Math.imul(al2, bh1)) | 0;
46692 mid = (mid + Math.imul(ah2, bl1)) | 0;
46693 hi = (hi + Math.imul(ah2, bh1)) | 0;
46694 lo = (lo + Math.imul(al1, bl2)) | 0;
46695 mid = (mid + Math.imul(al1, bh2)) | 0;
46696 mid = (mid + Math.imul(ah1, bl2)) | 0;
46697 hi = (hi + Math.imul(ah1, bh2)) | 0;
46698 lo = (lo + Math.imul(al0, bl3)) | 0;
46699 mid = (mid + Math.imul(al0, bh3)) | 0;
46700 mid = (mid + Math.imul(ah0, bl3)) | 0;
46701 hi = (hi + Math.imul(ah0, bh3)) | 0;
46702 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46703 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
46704 w3 &= 0x3ffffff;
46705 /* k = 4 */
46706 lo = Math.imul(al4, bl0);
46707 mid = Math.imul(al4, bh0);
46708 mid = (mid + Math.imul(ah4, bl0)) | 0;
46709 hi = Math.imul(ah4, bh0);
46710 lo = (lo + Math.imul(al3, bl1)) | 0;
46711 mid = (mid + Math.imul(al3, bh1)) | 0;
46712 mid = (mid + Math.imul(ah3, bl1)) | 0;
46713 hi = (hi + Math.imul(ah3, bh1)) | 0;
46714 lo = (lo + Math.imul(al2, bl2)) | 0;
46715 mid = (mid + Math.imul(al2, bh2)) | 0;
46716 mid = (mid + Math.imul(ah2, bl2)) | 0;
46717 hi = (hi + Math.imul(ah2, bh2)) | 0;
46718 lo = (lo + Math.imul(al1, bl3)) | 0;
46719 mid = (mid + Math.imul(al1, bh3)) | 0;
46720 mid = (mid + Math.imul(ah1, bl3)) | 0;
46721 hi = (hi + Math.imul(ah1, bh3)) | 0;
46722 lo = (lo + Math.imul(al0, bl4)) | 0;
46723 mid = (mid + Math.imul(al0, bh4)) | 0;
46724 mid = (mid + Math.imul(ah0, bl4)) | 0;
46725 hi = (hi + Math.imul(ah0, bh4)) | 0;
46726 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46727 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
46728 w4 &= 0x3ffffff;
46729 /* k = 5 */
46730 lo = Math.imul(al5, bl0);
46731 mid = Math.imul(al5, bh0);
46732 mid = (mid + Math.imul(ah5, bl0)) | 0;
46733 hi = Math.imul(ah5, bh0);
46734 lo = (lo + Math.imul(al4, bl1)) | 0;
46735 mid = (mid + Math.imul(al4, bh1)) | 0;
46736 mid = (mid + Math.imul(ah4, bl1)) | 0;
46737 hi = (hi + Math.imul(ah4, bh1)) | 0;
46738 lo = (lo + Math.imul(al3, bl2)) | 0;
46739 mid = (mid + Math.imul(al3, bh2)) | 0;
46740 mid = (mid + Math.imul(ah3, bl2)) | 0;
46741 hi = (hi + Math.imul(ah3, bh2)) | 0;
46742 lo = (lo + Math.imul(al2, bl3)) | 0;
46743 mid = (mid + Math.imul(al2, bh3)) | 0;
46744 mid = (mid + Math.imul(ah2, bl3)) | 0;
46745 hi = (hi + Math.imul(ah2, bh3)) | 0;
46746 lo = (lo + Math.imul(al1, bl4)) | 0;
46747 mid = (mid + Math.imul(al1, bh4)) | 0;
46748 mid = (mid + Math.imul(ah1, bl4)) | 0;
46749 hi = (hi + Math.imul(ah1, bh4)) | 0;
46750 lo = (lo + Math.imul(al0, bl5)) | 0;
46751 mid = (mid + Math.imul(al0, bh5)) | 0;
46752 mid = (mid + Math.imul(ah0, bl5)) | 0;
46753 hi = (hi + Math.imul(ah0, bh5)) | 0;
46754 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46755 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
46756 w5 &= 0x3ffffff;
46757 /* k = 6 */
46758 lo = Math.imul(al6, bl0);
46759 mid = Math.imul(al6, bh0);
46760 mid = (mid + Math.imul(ah6, bl0)) | 0;
46761 hi = Math.imul(ah6, bh0);
46762 lo = (lo + Math.imul(al5, bl1)) | 0;
46763 mid = (mid + Math.imul(al5, bh1)) | 0;
46764 mid = (mid + Math.imul(ah5, bl1)) | 0;
46765 hi = (hi + Math.imul(ah5, bh1)) | 0;
46766 lo = (lo + Math.imul(al4, bl2)) | 0;
46767 mid = (mid + Math.imul(al4, bh2)) | 0;
46768 mid = (mid + Math.imul(ah4, bl2)) | 0;
46769 hi = (hi + Math.imul(ah4, bh2)) | 0;
46770 lo = (lo + Math.imul(al3, bl3)) | 0;
46771 mid = (mid + Math.imul(al3, bh3)) | 0;
46772 mid = (mid + Math.imul(ah3, bl3)) | 0;
46773 hi = (hi + Math.imul(ah3, bh3)) | 0;
46774 lo = (lo + Math.imul(al2, bl4)) | 0;
46775 mid = (mid + Math.imul(al2, bh4)) | 0;
46776 mid = (mid + Math.imul(ah2, bl4)) | 0;
46777 hi = (hi + Math.imul(ah2, bh4)) | 0;
46778 lo = (lo + Math.imul(al1, bl5)) | 0;
46779 mid = (mid + Math.imul(al1, bh5)) | 0;
46780 mid = (mid + Math.imul(ah1, bl5)) | 0;
46781 hi = (hi + Math.imul(ah1, bh5)) | 0;
46782 lo = (lo + Math.imul(al0, bl6)) | 0;
46783 mid = (mid + Math.imul(al0, bh6)) | 0;
46784 mid = (mid + Math.imul(ah0, bl6)) | 0;
46785 hi = (hi + Math.imul(ah0, bh6)) | 0;
46786 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46787 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
46788 w6 &= 0x3ffffff;
46789 /* k = 7 */
46790 lo = Math.imul(al7, bl0);
46791 mid = Math.imul(al7, bh0);
46792 mid = (mid + Math.imul(ah7, bl0)) | 0;
46793 hi = Math.imul(ah7, bh0);
46794 lo = (lo + Math.imul(al6, bl1)) | 0;
46795 mid = (mid + Math.imul(al6, bh1)) | 0;
46796 mid = (mid + Math.imul(ah6, bl1)) | 0;
46797 hi = (hi + Math.imul(ah6, bh1)) | 0;
46798 lo = (lo + Math.imul(al5, bl2)) | 0;
46799 mid = (mid + Math.imul(al5, bh2)) | 0;
46800 mid = (mid + Math.imul(ah5, bl2)) | 0;
46801 hi = (hi + Math.imul(ah5, bh2)) | 0;
46802 lo = (lo + Math.imul(al4, bl3)) | 0;
46803 mid = (mid + Math.imul(al4, bh3)) | 0;
46804 mid = (mid + Math.imul(ah4, bl3)) | 0;
46805 hi = (hi + Math.imul(ah4, bh3)) | 0;
46806 lo = (lo + Math.imul(al3, bl4)) | 0;
46807 mid = (mid + Math.imul(al3, bh4)) | 0;
46808 mid = (mid + Math.imul(ah3, bl4)) | 0;
46809 hi = (hi + Math.imul(ah3, bh4)) | 0;
46810 lo = (lo + Math.imul(al2, bl5)) | 0;
46811 mid = (mid + Math.imul(al2, bh5)) | 0;
46812 mid = (mid + Math.imul(ah2, bl5)) | 0;
46813 hi = (hi + Math.imul(ah2, bh5)) | 0;
46814 lo = (lo + Math.imul(al1, bl6)) | 0;
46815 mid = (mid + Math.imul(al1, bh6)) | 0;
46816 mid = (mid + Math.imul(ah1, bl6)) | 0;
46817 hi = (hi + Math.imul(ah1, bh6)) | 0;
46818 lo = (lo + Math.imul(al0, bl7)) | 0;
46819 mid = (mid + Math.imul(al0, bh7)) | 0;
46820 mid = (mid + Math.imul(ah0, bl7)) | 0;
46821 hi = (hi + Math.imul(ah0, bh7)) | 0;
46822 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46823 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
46824 w7 &= 0x3ffffff;
46825 /* k = 8 */
46826 lo = Math.imul(al8, bl0);
46827 mid = Math.imul(al8, bh0);
46828 mid = (mid + Math.imul(ah8, bl0)) | 0;
46829 hi = Math.imul(ah8, bh0);
46830 lo = (lo + Math.imul(al7, bl1)) | 0;
46831 mid = (mid + Math.imul(al7, bh1)) | 0;
46832 mid = (mid + Math.imul(ah7, bl1)) | 0;
46833 hi = (hi + Math.imul(ah7, bh1)) | 0;
46834 lo = (lo + Math.imul(al6, bl2)) | 0;
46835 mid = (mid + Math.imul(al6, bh2)) | 0;
46836 mid = (mid + Math.imul(ah6, bl2)) | 0;
46837 hi = (hi + Math.imul(ah6, bh2)) | 0;
46838 lo = (lo + Math.imul(al5, bl3)) | 0;
46839 mid = (mid + Math.imul(al5, bh3)) | 0;
46840 mid = (mid + Math.imul(ah5, bl3)) | 0;
46841 hi = (hi + Math.imul(ah5, bh3)) | 0;
46842 lo = (lo + Math.imul(al4, bl4)) | 0;
46843 mid = (mid + Math.imul(al4, bh4)) | 0;
46844 mid = (mid + Math.imul(ah4, bl4)) | 0;
46845 hi = (hi + Math.imul(ah4, bh4)) | 0;
46846 lo = (lo + Math.imul(al3, bl5)) | 0;
46847 mid = (mid + Math.imul(al3, bh5)) | 0;
46848 mid = (mid + Math.imul(ah3, bl5)) | 0;
46849 hi = (hi + Math.imul(ah3, bh5)) | 0;
46850 lo = (lo + Math.imul(al2, bl6)) | 0;
46851 mid = (mid + Math.imul(al2, bh6)) | 0;
46852 mid = (mid + Math.imul(ah2, bl6)) | 0;
46853 hi = (hi + Math.imul(ah2, bh6)) | 0;
46854 lo = (lo + Math.imul(al1, bl7)) | 0;
46855 mid = (mid + Math.imul(al1, bh7)) | 0;
46856 mid = (mid + Math.imul(ah1, bl7)) | 0;
46857 hi = (hi + Math.imul(ah1, bh7)) | 0;
46858 lo = (lo + Math.imul(al0, bl8)) | 0;
46859 mid = (mid + Math.imul(al0, bh8)) | 0;
46860 mid = (mid + Math.imul(ah0, bl8)) | 0;
46861 hi = (hi + Math.imul(ah0, bh8)) | 0;
46862 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46863 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
46864 w8 &= 0x3ffffff;
46865 /* k = 9 */
46866 lo = Math.imul(al9, bl0);
46867 mid = Math.imul(al9, bh0);
46868 mid = (mid + Math.imul(ah9, bl0)) | 0;
46869 hi = Math.imul(ah9, bh0);
46870 lo = (lo + Math.imul(al8, bl1)) | 0;
46871 mid = (mid + Math.imul(al8, bh1)) | 0;
46872 mid = (mid + Math.imul(ah8, bl1)) | 0;
46873 hi = (hi + Math.imul(ah8, bh1)) | 0;
46874 lo = (lo + Math.imul(al7, bl2)) | 0;
46875 mid = (mid + Math.imul(al7, bh2)) | 0;
46876 mid = (mid + Math.imul(ah7, bl2)) | 0;
46877 hi = (hi + Math.imul(ah7, bh2)) | 0;
46878 lo = (lo + Math.imul(al6, bl3)) | 0;
46879 mid = (mid + Math.imul(al6, bh3)) | 0;
46880 mid = (mid + Math.imul(ah6, bl3)) | 0;
46881 hi = (hi + Math.imul(ah6, bh3)) | 0;
46882 lo = (lo + Math.imul(al5, bl4)) | 0;
46883 mid = (mid + Math.imul(al5, bh4)) | 0;
46884 mid = (mid + Math.imul(ah5, bl4)) | 0;
46885 hi = (hi + Math.imul(ah5, bh4)) | 0;
46886 lo = (lo + Math.imul(al4, bl5)) | 0;
46887 mid = (mid + Math.imul(al4, bh5)) | 0;
46888 mid = (mid + Math.imul(ah4, bl5)) | 0;
46889 hi = (hi + Math.imul(ah4, bh5)) | 0;
46890 lo = (lo + Math.imul(al3, bl6)) | 0;
46891 mid = (mid + Math.imul(al3, bh6)) | 0;
46892 mid = (mid + Math.imul(ah3, bl6)) | 0;
46893 hi = (hi + Math.imul(ah3, bh6)) | 0;
46894 lo = (lo + Math.imul(al2, bl7)) | 0;
46895 mid = (mid + Math.imul(al2, bh7)) | 0;
46896 mid = (mid + Math.imul(ah2, bl7)) | 0;
46897 hi = (hi + Math.imul(ah2, bh7)) | 0;
46898 lo = (lo + Math.imul(al1, bl8)) | 0;
46899 mid = (mid + Math.imul(al1, bh8)) | 0;
46900 mid = (mid + Math.imul(ah1, bl8)) | 0;
46901 hi = (hi + Math.imul(ah1, bh8)) | 0;
46902 lo = (lo + Math.imul(al0, bl9)) | 0;
46903 mid = (mid + Math.imul(al0, bh9)) | 0;
46904 mid = (mid + Math.imul(ah0, bl9)) | 0;
46905 hi = (hi + Math.imul(ah0, bh9)) | 0;
46906 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46907 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
46908 w9 &= 0x3ffffff;
46909 /* k = 10 */
46910 lo = Math.imul(al9, bl1);
46911 mid = Math.imul(al9, bh1);
46912 mid = (mid + Math.imul(ah9, bl1)) | 0;
46913 hi = Math.imul(ah9, bh1);
46914 lo = (lo + Math.imul(al8, bl2)) | 0;
46915 mid = (mid + Math.imul(al8, bh2)) | 0;
46916 mid = (mid + Math.imul(ah8, bl2)) | 0;
46917 hi = (hi + Math.imul(ah8, bh2)) | 0;
46918 lo = (lo + Math.imul(al7, bl3)) | 0;
46919 mid = (mid + Math.imul(al7, bh3)) | 0;
46920 mid = (mid + Math.imul(ah7, bl3)) | 0;
46921 hi = (hi + Math.imul(ah7, bh3)) | 0;
46922 lo = (lo + Math.imul(al6, bl4)) | 0;
46923 mid = (mid + Math.imul(al6, bh4)) | 0;
46924 mid = (mid + Math.imul(ah6, bl4)) | 0;
46925 hi = (hi + Math.imul(ah6, bh4)) | 0;
46926 lo = (lo + Math.imul(al5, bl5)) | 0;
46927 mid = (mid + Math.imul(al5, bh5)) | 0;
46928 mid = (mid + Math.imul(ah5, bl5)) | 0;
46929 hi = (hi + Math.imul(ah5, bh5)) | 0;
46930 lo = (lo + Math.imul(al4, bl6)) | 0;
46931 mid = (mid + Math.imul(al4, bh6)) | 0;
46932 mid = (mid + Math.imul(ah4, bl6)) | 0;
46933 hi = (hi + Math.imul(ah4, bh6)) | 0;
46934 lo = (lo + Math.imul(al3, bl7)) | 0;
46935 mid = (mid + Math.imul(al3, bh7)) | 0;
46936 mid = (mid + Math.imul(ah3, bl7)) | 0;
46937 hi = (hi + Math.imul(ah3, bh7)) | 0;
46938 lo = (lo + Math.imul(al2, bl8)) | 0;
46939 mid = (mid + Math.imul(al2, bh8)) | 0;
46940 mid = (mid + Math.imul(ah2, bl8)) | 0;
46941 hi = (hi + Math.imul(ah2, bh8)) | 0;
46942 lo = (lo + Math.imul(al1, bl9)) | 0;
46943 mid = (mid + Math.imul(al1, bh9)) | 0;
46944 mid = (mid + Math.imul(ah1, bl9)) | 0;
46945 hi = (hi + Math.imul(ah1, bh9)) | 0;
46946 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46947 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
46948 w10 &= 0x3ffffff;
46949 /* k = 11 */
46950 lo = Math.imul(al9, bl2);
46951 mid = Math.imul(al9, bh2);
46952 mid = (mid + Math.imul(ah9, bl2)) | 0;
46953 hi = Math.imul(ah9, bh2);
46954 lo = (lo + Math.imul(al8, bl3)) | 0;
46955 mid = (mid + Math.imul(al8, bh3)) | 0;
46956 mid = (mid + Math.imul(ah8, bl3)) | 0;
46957 hi = (hi + Math.imul(ah8, bh3)) | 0;
46958 lo = (lo + Math.imul(al7, bl4)) | 0;
46959 mid = (mid + Math.imul(al7, bh4)) | 0;
46960 mid = (mid + Math.imul(ah7, bl4)) | 0;
46961 hi = (hi + Math.imul(ah7, bh4)) | 0;
46962 lo = (lo + Math.imul(al6, bl5)) | 0;
46963 mid = (mid + Math.imul(al6, bh5)) | 0;
46964 mid = (mid + Math.imul(ah6, bl5)) | 0;
46965 hi = (hi + Math.imul(ah6, bh5)) | 0;
46966 lo = (lo + Math.imul(al5, bl6)) | 0;
46967 mid = (mid + Math.imul(al5, bh6)) | 0;
46968 mid = (mid + Math.imul(ah5, bl6)) | 0;
46969 hi = (hi + Math.imul(ah5, bh6)) | 0;
46970 lo = (lo + Math.imul(al4, bl7)) | 0;
46971 mid = (mid + Math.imul(al4, bh7)) | 0;
46972 mid = (mid + Math.imul(ah4, bl7)) | 0;
46973 hi = (hi + Math.imul(ah4, bh7)) | 0;
46974 lo = (lo + Math.imul(al3, bl8)) | 0;
46975 mid = (mid + Math.imul(al3, bh8)) | 0;
46976 mid = (mid + Math.imul(ah3, bl8)) | 0;
46977 hi = (hi + Math.imul(ah3, bh8)) | 0;
46978 lo = (lo + Math.imul(al2, bl9)) | 0;
46979 mid = (mid + Math.imul(al2, bh9)) | 0;
46980 mid = (mid + Math.imul(ah2, bl9)) | 0;
46981 hi = (hi + Math.imul(ah2, bh9)) | 0;
46982 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46983 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
46984 w11 &= 0x3ffffff;
46985 /* k = 12 */
46986 lo = Math.imul(al9, bl3);
46987 mid = Math.imul(al9, bh3);
46988 mid = (mid + Math.imul(ah9, bl3)) | 0;
46989 hi = Math.imul(ah9, bh3);
46990 lo = (lo + Math.imul(al8, bl4)) | 0;
46991 mid = (mid + Math.imul(al8, bh4)) | 0;
46992 mid = (mid + Math.imul(ah8, bl4)) | 0;
46993 hi = (hi + Math.imul(ah8, bh4)) | 0;
46994 lo = (lo + Math.imul(al7, bl5)) | 0;
46995 mid = (mid + Math.imul(al7, bh5)) | 0;
46996 mid = (mid + Math.imul(ah7, bl5)) | 0;
46997 hi = (hi + Math.imul(ah7, bh5)) | 0;
46998 lo = (lo + Math.imul(al6, bl6)) | 0;
46999 mid = (mid + Math.imul(al6, bh6)) | 0;
47000 mid = (mid + Math.imul(ah6, bl6)) | 0;
47001 hi = (hi + Math.imul(ah6, bh6)) | 0;
47002 lo = (lo + Math.imul(al5, bl7)) | 0;
47003 mid = (mid + Math.imul(al5, bh7)) | 0;
47004 mid = (mid + Math.imul(ah5, bl7)) | 0;
47005 hi = (hi + Math.imul(ah5, bh7)) | 0;
47006 lo = (lo + Math.imul(al4, bl8)) | 0;
47007 mid = (mid + Math.imul(al4, bh8)) | 0;
47008 mid = (mid + Math.imul(ah4, bl8)) | 0;
47009 hi = (hi + Math.imul(ah4, bh8)) | 0;
47010 lo = (lo + Math.imul(al3, bl9)) | 0;
47011 mid = (mid + Math.imul(al3, bh9)) | 0;
47012 mid = (mid + Math.imul(ah3, bl9)) | 0;
47013 hi = (hi + Math.imul(ah3, bh9)) | 0;
47014 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47015 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
47016 w12 &= 0x3ffffff;
47017 /* k = 13 */
47018 lo = Math.imul(al9, bl4);
47019 mid = Math.imul(al9, bh4);
47020 mid = (mid + Math.imul(ah9, bl4)) | 0;
47021 hi = Math.imul(ah9, bh4);
47022 lo = (lo + Math.imul(al8, bl5)) | 0;
47023 mid = (mid + Math.imul(al8, bh5)) | 0;
47024 mid = (mid + Math.imul(ah8, bl5)) | 0;
47025 hi = (hi + Math.imul(ah8, bh5)) | 0;
47026 lo = (lo + Math.imul(al7, bl6)) | 0;
47027 mid = (mid + Math.imul(al7, bh6)) | 0;
47028 mid = (mid + Math.imul(ah7, bl6)) | 0;
47029 hi = (hi + Math.imul(ah7, bh6)) | 0;
47030 lo = (lo + Math.imul(al6, bl7)) | 0;
47031 mid = (mid + Math.imul(al6, bh7)) | 0;
47032 mid = (mid + Math.imul(ah6, bl7)) | 0;
47033 hi = (hi + Math.imul(ah6, bh7)) | 0;
47034 lo = (lo + Math.imul(al5, bl8)) | 0;
47035 mid = (mid + Math.imul(al5, bh8)) | 0;
47036 mid = (mid + Math.imul(ah5, bl8)) | 0;
47037 hi = (hi + Math.imul(ah5, bh8)) | 0;
47038 lo = (lo + Math.imul(al4, bl9)) | 0;
47039 mid = (mid + Math.imul(al4, bh9)) | 0;
47040 mid = (mid + Math.imul(ah4, bl9)) | 0;
47041 hi = (hi + Math.imul(ah4, bh9)) | 0;
47042 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47043 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
47044 w13 &= 0x3ffffff;
47045 /* k = 14 */
47046 lo = Math.imul(al9, bl5);
47047 mid = Math.imul(al9, bh5);
47048 mid = (mid + Math.imul(ah9, bl5)) | 0;
47049 hi = Math.imul(ah9, bh5);
47050 lo = (lo + Math.imul(al8, bl6)) | 0;
47051 mid = (mid + Math.imul(al8, bh6)) | 0;
47052 mid = (mid + Math.imul(ah8, bl6)) | 0;
47053 hi = (hi + Math.imul(ah8, bh6)) | 0;
47054 lo = (lo + Math.imul(al7, bl7)) | 0;
47055 mid = (mid + Math.imul(al7, bh7)) | 0;
47056 mid = (mid + Math.imul(ah7, bl7)) | 0;
47057 hi = (hi + Math.imul(ah7, bh7)) | 0;
47058 lo = (lo + Math.imul(al6, bl8)) | 0;
47059 mid = (mid + Math.imul(al6, bh8)) | 0;
47060 mid = (mid + Math.imul(ah6, bl8)) | 0;
47061 hi = (hi + Math.imul(ah6, bh8)) | 0;
47062 lo = (lo + Math.imul(al5, bl9)) | 0;
47063 mid = (mid + Math.imul(al5, bh9)) | 0;
47064 mid = (mid + Math.imul(ah5, bl9)) | 0;
47065 hi = (hi + Math.imul(ah5, bh9)) | 0;
47066 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47067 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
47068 w14 &= 0x3ffffff;
47069 /* k = 15 */
47070 lo = Math.imul(al9, bl6);
47071 mid = Math.imul(al9, bh6);
47072 mid = (mid + Math.imul(ah9, bl6)) | 0;
47073 hi = Math.imul(ah9, bh6);
47074 lo = (lo + Math.imul(al8, bl7)) | 0;
47075 mid = (mid + Math.imul(al8, bh7)) | 0;
47076 mid = (mid + Math.imul(ah8, bl7)) | 0;
47077 hi = (hi + Math.imul(ah8, bh7)) | 0;
47078 lo = (lo + Math.imul(al7, bl8)) | 0;
47079 mid = (mid + Math.imul(al7, bh8)) | 0;
47080 mid = (mid + Math.imul(ah7, bl8)) | 0;
47081 hi = (hi + Math.imul(ah7, bh8)) | 0;
47082 lo = (lo + Math.imul(al6, bl9)) | 0;
47083 mid = (mid + Math.imul(al6, bh9)) | 0;
47084 mid = (mid + Math.imul(ah6, bl9)) | 0;
47085 hi = (hi + Math.imul(ah6, bh9)) | 0;
47086 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47087 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
47088 w15 &= 0x3ffffff;
47089 /* k = 16 */
47090 lo = Math.imul(al9, bl7);
47091 mid = Math.imul(al9, bh7);
47092 mid = (mid + Math.imul(ah9, bl7)) | 0;
47093 hi = Math.imul(ah9, bh7);
47094 lo = (lo + Math.imul(al8, bl8)) | 0;
47095 mid = (mid + Math.imul(al8, bh8)) | 0;
47096 mid = (mid + Math.imul(ah8, bl8)) | 0;
47097 hi = (hi + Math.imul(ah8, bh8)) | 0;
47098 lo = (lo + Math.imul(al7, bl9)) | 0;
47099 mid = (mid + Math.imul(al7, bh9)) | 0;
47100 mid = (mid + Math.imul(ah7, bl9)) | 0;
47101 hi = (hi + Math.imul(ah7, bh9)) | 0;
47102 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47103 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
47104 w16 &= 0x3ffffff;
47105 /* k = 17 */
47106 lo = Math.imul(al9, bl8);
47107 mid = Math.imul(al9, bh8);
47108 mid = (mid + Math.imul(ah9, bl8)) | 0;
47109 hi = Math.imul(ah9, bh8);
47110 lo = (lo + Math.imul(al8, bl9)) | 0;
47111 mid = (mid + Math.imul(al8, bh9)) | 0;
47112 mid = (mid + Math.imul(ah8, bl9)) | 0;
47113 hi = (hi + Math.imul(ah8, bh9)) | 0;
47114 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47115 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
47116 w17 &= 0x3ffffff;
47117 /* k = 18 */
47118 lo = Math.imul(al9, bl9);
47119 mid = Math.imul(al9, bh9);
47120 mid = (mid + Math.imul(ah9, bl9)) | 0;
47121 hi = Math.imul(ah9, bh9);
47122 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47123 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
47124 w18 &= 0x3ffffff;
47125 o[0] = w0;
47126 o[1] = w1;
47127 o[2] = w2;
47128 o[3] = w3;
47129 o[4] = w4;
47130 o[5] = w5;
47131 o[6] = w6;
47132 o[7] = w7;
47133 o[8] = w8;
47134 o[9] = w9;
47135 o[10] = w10;
47136 o[11] = w11;
47137 o[12] = w12;
47138 o[13] = w13;
47139 o[14] = w14;
47140 o[15] = w15;
47141 o[16] = w16;
47142 o[17] = w17;
47143 o[18] = w18;
47144 if (c !== 0) {
47145 o[19] = c;
47146 out.length++;
47147 }
47148 return out;
47149 };
47150
47151 // Polyfill comb
47152 if (!Math.imul) {
47153 comb10MulTo = smallMulTo;
47154 }
47155
47156 function bigMulTo (self, num, out) {
47157 out.negative = num.negative ^ self.negative;
47158 out.length = self.length + num.length;
47159
47160 var carry = 0;
47161 var hncarry = 0;
47162 for (var k = 0; k < out.length - 1; k++) {
47163 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
47164 // note that ncarry could be >= 0x3ffffff
47165 var ncarry = hncarry;
47166 hncarry = 0;
47167 var rword = carry & 0x3ffffff;
47168 var maxJ = Math.min(k, num.length - 1);
47169 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
47170 var i = k - j;
47171 var a = self.words[i] | 0;
47172 var b = num.words[j] | 0;
47173 var r = a * b;
47174
47175 var lo = r & 0x3ffffff;
47176 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
47177 lo = (lo + rword) | 0;
47178 rword = lo & 0x3ffffff;
47179 ncarry = (ncarry + (lo >>> 26)) | 0;
47180
47181 hncarry += ncarry >>> 26;
47182 ncarry &= 0x3ffffff;
47183 }
47184 out.words[k] = rword;
47185 carry = ncarry;
47186 ncarry = hncarry;
47187 }
47188 if (carry !== 0) {
47189 out.words[k] = carry;
47190 } else {
47191 out.length--;
47192 }
47193
47194 return out.strip();
47195 }
47196
47197 function jumboMulTo (self, num, out) {
47198 var fftm = new FFTM();
47199 return fftm.mulp(self, num, out);
47200 }
47201
47202 BN.prototype.mulTo = function mulTo (num, out) {
47203 var res;
47204 var len = this.length + num.length;
47205 if (this.length === 10 && num.length === 10) {
47206 res = comb10MulTo(this, num, out);
47207 } else if (len < 63) {
47208 res = smallMulTo(this, num, out);
47209 } else if (len < 1024) {
47210 res = bigMulTo(this, num, out);
47211 } else {
47212 res = jumboMulTo(this, num, out);
47213 }
47214
47215 return res;
47216 };
47217
47218 // Cooley-Tukey algorithm for FFT
47219 // slightly revisited to rely on looping instead of recursion
47220
47221 function FFTM (x, y) {
47222 this.x = x;
47223 this.y = y;
47224 }
47225
47226 FFTM.prototype.makeRBT = function makeRBT (N) {
47227 var t = new Array(N);
47228 var l = BN.prototype._countBits(N) - 1;
47229 for (var i = 0; i < N; i++) {
47230 t[i] = this.revBin(i, l, N);
47231 }
47232
47233 return t;
47234 };
47235
47236 // Returns binary-reversed representation of `x`
47237 FFTM.prototype.revBin = function revBin (x, l, N) {
47238 if (x === 0 || x === N - 1) return x;
47239
47240 var rb = 0;
47241 for (var i = 0; i < l; i++) {
47242 rb |= (x & 1) << (l - i - 1);
47243 x >>= 1;
47244 }
47245
47246 return rb;
47247 };
47248
47249 // Performs "tweedling" phase, therefore 'emulating'
47250 // behaviour of the recursive algorithm
47251 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
47252 for (var i = 0; i < N; i++) {
47253 rtws[i] = rws[rbt[i]];
47254 itws[i] = iws[rbt[i]];
47255 }
47256 };
47257
47258 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
47259 this.permute(rbt, rws, iws, rtws, itws, N);
47260
47261 for (var s = 1; s < N; s <<= 1) {
47262 var l = s << 1;
47263
47264 var rtwdf = Math.cos(2 * Math.PI / l);
47265 var itwdf = Math.sin(2 * Math.PI / l);
47266
47267 for (var p = 0; p < N; p += l) {
47268 var rtwdf_ = rtwdf;
47269 var itwdf_ = itwdf;
47270
47271 for (var j = 0; j < s; j++) {
47272 var re = rtws[p + j];
47273 var ie = itws[p + j];
47274
47275 var ro = rtws[p + j + s];
47276 var io = itws[p + j + s];
47277
47278 var rx = rtwdf_ * ro - itwdf_ * io;
47279
47280 io = rtwdf_ * io + itwdf_ * ro;
47281 ro = rx;
47282
47283 rtws[p + j] = re + ro;
47284 itws[p + j] = ie + io;
47285
47286 rtws[p + j + s] = re - ro;
47287 itws[p + j + s] = ie - io;
47288
47289 /* jshint maxdepth : false */
47290 if (j !== l) {
47291 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
47292
47293 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
47294 rtwdf_ = rx;
47295 }
47296 }
47297 }
47298 }
47299 };
47300
47301 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
47302 var N = Math.max(m, n) | 1;
47303 var odd = N & 1;
47304 var i = 0;
47305 for (N = N / 2 | 0; N; N = N >>> 1) {
47306 i++;
47307 }
47308
47309 return 1 << i + 1 + odd;
47310 };
47311
47312 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
47313 if (N <= 1) return;
47314
47315 for (var i = 0; i < N / 2; i++) {
47316 var t = rws[i];
47317
47318 rws[i] = rws[N - i - 1];
47319 rws[N - i - 1] = t;
47320
47321 t = iws[i];
47322
47323 iws[i] = -iws[N - i - 1];
47324 iws[N - i - 1] = -t;
47325 }
47326 };
47327
47328 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
47329 var carry = 0;
47330 for (var i = 0; i < N / 2; i++) {
47331 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
47332 Math.round(ws[2 * i] / N) +
47333 carry;
47334
47335 ws[i] = w & 0x3ffffff;
47336
47337 if (w < 0x4000000) {
47338 carry = 0;
47339 } else {
47340 carry = w / 0x4000000 | 0;
47341 }
47342 }
47343
47344 return ws;
47345 };
47346
47347 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
47348 var carry = 0;
47349 for (var i = 0; i < len; i++) {
47350 carry = carry + (ws[i] | 0);
47351
47352 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
47353 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
47354 }
47355
47356 // Pad with zeroes
47357 for (i = 2 * len; i < N; ++i) {
47358 rws[i] = 0;
47359 }
47360
47361 assert(carry === 0);
47362 assert((carry & ~0x1fff) === 0);
47363 };
47364
47365 FFTM.prototype.stub = function stub (N) {
47366 var ph = new Array(N);
47367 for (var i = 0; i < N; i++) {
47368 ph[i] = 0;
47369 }
47370
47371 return ph;
47372 };
47373
47374 FFTM.prototype.mulp = function mulp (x, y, out) {
47375 var N = 2 * this.guessLen13b(x.length, y.length);
47376
47377 var rbt = this.makeRBT(N);
47378
47379 var _ = this.stub(N);
47380
47381 var rws = new Array(N);
47382 var rwst = new Array(N);
47383 var iwst = new Array(N);
47384
47385 var nrws = new Array(N);
47386 var nrwst = new Array(N);
47387 var niwst = new Array(N);
47388
47389 var rmws = out.words;
47390 rmws.length = N;
47391
47392 this.convert13b(x.words, x.length, rws, N);
47393 this.convert13b(y.words, y.length, nrws, N);
47394
47395 this.transform(rws, _, rwst, iwst, N, rbt);
47396 this.transform(nrws, _, nrwst, niwst, N, rbt);
47397
47398 for (var i = 0; i < N; i++) {
47399 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
47400 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
47401 rwst[i] = rx;
47402 }
47403
47404 this.conjugate(rwst, iwst, N);
47405 this.transform(rwst, iwst, rmws, _, N, rbt);
47406 this.conjugate(rmws, _, N);
47407 this.normalize13b(rmws, N);
47408
47409 out.negative = x.negative ^ y.negative;
47410 out.length = x.length + y.length;
47411 return out.strip();
47412 };
47413
47414 // Multiply `this` by `num`
47415 BN.prototype.mul = function mul (num) {
47416 var out = new BN(null);
47417 out.words = new Array(this.length + num.length);
47418 return this.mulTo(num, out);
47419 };
47420
47421 // Multiply employing FFT
47422 BN.prototype.mulf = function mulf (num) {
47423 var out = new BN(null);
47424 out.words = new Array(this.length + num.length);
47425 return jumboMulTo(this, num, out);
47426 };
47427
47428 // In-place Multiplication
47429 BN.prototype.imul = function imul (num) {
47430 return this.clone().mulTo(num, this);
47431 };
47432
47433 BN.prototype.imuln = function imuln (num) {
47434 assert(typeof num === 'number');
47435 assert(num < 0x4000000);
47436
47437 // Carry
47438 var carry = 0;
47439 for (var i = 0; i < this.length; i++) {
47440 var w = (this.words[i] | 0) * num;
47441 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
47442 carry >>= 26;
47443 carry += (w / 0x4000000) | 0;
47444 // NOTE: lo is 27bit maximum
47445 carry += lo >>> 26;
47446 this.words[i] = lo & 0x3ffffff;
47447 }
47448
47449 if (carry !== 0) {
47450 this.words[i] = carry;
47451 this.length++;
47452 }
47453
47454 return this;
47455 };
47456
47457 BN.prototype.muln = function muln (num) {
47458 return this.clone().imuln(num);
47459 };
47460
47461 // `this` * `this`
47462 BN.prototype.sqr = function sqr () {
47463 return this.mul(this);
47464 };
47465
47466 // `this` * `this` in-place
47467 BN.prototype.isqr = function isqr () {
47468 return this.imul(this.clone());
47469 };
47470
47471 // Math.pow(`this`, `num`)
47472 BN.prototype.pow = function pow (num) {
47473 var w = toBitArray(num);
47474 if (w.length === 0) return new BN(1);
47475
47476 // Skip leading zeroes
47477 var res = this;
47478 for (var i = 0; i < w.length; i++, res = res.sqr()) {
47479 if (w[i] !== 0) break;
47480 }
47481
47482 if (++i < w.length) {
47483 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
47484 if (w[i] === 0) continue;
47485
47486 res = res.mul(q);
47487 }
47488 }
47489
47490 return res;
47491 };
47492
47493 // Shift-left in-place
47494 BN.prototype.iushln = function iushln (bits) {
47495 assert(typeof bits === 'number' && bits >= 0);
47496 var r = bits % 26;
47497 var s = (bits - r) / 26;
47498 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
47499 var i;
47500
47501 if (r !== 0) {
47502 var carry = 0;
47503
47504 for (i = 0; i < this.length; i++) {
47505 var newCarry = this.words[i] & carryMask;
47506 var c = ((this.words[i] | 0) - newCarry) << r;
47507 this.words[i] = c | carry;
47508 carry = newCarry >>> (26 - r);
47509 }
47510
47511 if (carry) {
47512 this.words[i] = carry;
47513 this.length++;
47514 }
47515 }
47516
47517 if (s !== 0) {
47518 for (i = this.length - 1; i >= 0; i--) {
47519 this.words[i + s] = this.words[i];
47520 }
47521
47522 for (i = 0; i < s; i++) {
47523 this.words[i] = 0;
47524 }
47525
47526 this.length += s;
47527 }
47528
47529 return this.strip();
47530 };
47531
47532 BN.prototype.ishln = function ishln (bits) {
47533 // TODO(indutny): implement me
47534 assert(this.negative === 0);
47535 return this.iushln(bits);
47536 };
47537
47538 // Shift-right in-place
47539 // NOTE: `hint` is a lowest bit before trailing zeroes
47540 // NOTE: if `extended` is present - it will be filled with destroyed bits
47541 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
47542 assert(typeof bits === 'number' && bits >= 0);
47543 var h;
47544 if (hint) {
47545 h = (hint - (hint % 26)) / 26;
47546 } else {
47547 h = 0;
47548 }
47549
47550 var r = bits % 26;
47551 var s = Math.min((bits - r) / 26, this.length);
47552 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
47553 var maskedWords = extended;
47554
47555 h -= s;
47556 h = Math.max(0, h);
47557
47558 // Extended mode, copy masked part
47559 if (maskedWords) {
47560 for (var i = 0; i < s; i++) {
47561 maskedWords.words[i] = this.words[i];
47562 }
47563 maskedWords.length = s;
47564 }
47565
47566 if (s === 0) {
47567 // No-op, we should not move anything at all
47568 } else if (this.length > s) {
47569 this.length -= s;
47570 for (i = 0; i < this.length; i++) {
47571 this.words[i] = this.words[i + s];
47572 }
47573 } else {
47574 this.words[0] = 0;
47575 this.length = 1;
47576 }
47577
47578 var carry = 0;
47579 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
47580 var word = this.words[i] | 0;
47581 this.words[i] = (carry << (26 - r)) | (word >>> r);
47582 carry = word & mask;
47583 }
47584
47585 // Push carried bits as a mask
47586 if (maskedWords && carry !== 0) {
47587 maskedWords.words[maskedWords.length++] = carry;
47588 }
47589
47590 if (this.length === 0) {
47591 this.words[0] = 0;
47592 this.length = 1;
47593 }
47594
47595 return this.strip();
47596 };
47597
47598 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
47599 // TODO(indutny): implement me
47600 assert(this.negative === 0);
47601 return this.iushrn(bits, hint, extended);
47602 };
47603
47604 // Shift-left
47605 BN.prototype.shln = function shln (bits) {
47606 return this.clone().ishln(bits);
47607 };
47608
47609 BN.prototype.ushln = function ushln (bits) {
47610 return this.clone().iushln(bits);
47611 };
47612
47613 // Shift-right
47614 BN.prototype.shrn = function shrn (bits) {
47615 return this.clone().ishrn(bits);
47616 };
47617
47618 BN.prototype.ushrn = function ushrn (bits) {
47619 return this.clone().iushrn(bits);
47620 };
47621
47622 // Test if n bit is set
47623 BN.prototype.testn = function testn (bit) {
47624 assert(typeof bit === 'number' && bit >= 0);
47625 var r = bit % 26;
47626 var s = (bit - r) / 26;
47627 var q = 1 << r;
47628
47629 // Fast case: bit is much higher than all existing words
47630 if (this.length <= s) return false;
47631
47632 // Check bit and return
47633 var w = this.words[s];
47634
47635 return !!(w & q);
47636 };
47637
47638 // Return only lowers bits of number (in-place)
47639 BN.prototype.imaskn = function imaskn (bits) {
47640 assert(typeof bits === 'number' && bits >= 0);
47641 var r = bits % 26;
47642 var s = (bits - r) / 26;
47643
47644 assert(this.negative === 0, 'imaskn works only with positive numbers');
47645
47646 if (this.length <= s) {
47647 return this;
47648 }
47649
47650 if (r !== 0) {
47651 s++;
47652 }
47653 this.length = Math.min(s, this.length);
47654
47655 if (r !== 0) {
47656 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
47657 this.words[this.length - 1] &= mask;
47658 }
47659
47660 return this.strip();
47661 };
47662
47663 // Return only lowers bits of number
47664 BN.prototype.maskn = function maskn (bits) {
47665 return this.clone().imaskn(bits);
47666 };
47667
47668 // Add plain number `num` to `this`
47669 BN.prototype.iaddn = function iaddn (num) {
47670 assert(typeof num === 'number');
47671 assert(num < 0x4000000);
47672 if (num < 0) return this.isubn(-num);
47673
47674 // Possible sign change
47675 if (this.negative !== 0) {
47676 if (this.length === 1 && (this.words[0] | 0) < num) {
47677 this.words[0] = num - (this.words[0] | 0);
47678 this.negative = 0;
47679 return this;
47680 }
47681
47682 this.negative = 0;
47683 this.isubn(num);
47684 this.negative = 1;
47685 return this;
47686 }
47687
47688 // Add without checks
47689 return this._iaddn(num);
47690 };
47691
47692 BN.prototype._iaddn = function _iaddn (num) {
47693 this.words[0] += num;
47694
47695 // Carry
47696 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
47697 this.words[i] -= 0x4000000;
47698 if (i === this.length - 1) {
47699 this.words[i + 1] = 1;
47700 } else {
47701 this.words[i + 1]++;
47702 }
47703 }
47704 this.length = Math.max(this.length, i + 1);
47705
47706 return this;
47707 };
47708
47709 // Subtract plain number `num` from `this`
47710 BN.prototype.isubn = function isubn (num) {
47711 assert(typeof num === 'number');
47712 assert(num < 0x4000000);
47713 if (num < 0) return this.iaddn(-num);
47714
47715 if (this.negative !== 0) {
47716 this.negative = 0;
47717 this.iaddn(num);
47718 this.negative = 1;
47719 return this;
47720 }
47721
47722 this.words[0] -= num;
47723
47724 if (this.length === 1 && this.words[0] < 0) {
47725 this.words[0] = -this.words[0];
47726 this.negative = 1;
47727 } else {
47728 // Carry
47729 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
47730 this.words[i] += 0x4000000;
47731 this.words[i + 1] -= 1;
47732 }
47733 }
47734
47735 return this.strip();
47736 };
47737
47738 BN.prototype.addn = function addn (num) {
47739 return this.clone().iaddn(num);
47740 };
47741
47742 BN.prototype.subn = function subn (num) {
47743 return this.clone().isubn(num);
47744 };
47745
47746 BN.prototype.iabs = function iabs () {
47747 this.negative = 0;
47748
47749 return this;
47750 };
47751
47752 BN.prototype.abs = function abs () {
47753 return this.clone().iabs();
47754 };
47755
47756 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
47757 var len = num.length + shift;
47758 var i;
47759
47760 this._expand(len);
47761
47762 var w;
47763 var carry = 0;
47764 for (i = 0; i < num.length; i++) {
47765 w = (this.words[i + shift] | 0) + carry;
47766 var right = (num.words[i] | 0) * mul;
47767 w -= right & 0x3ffffff;
47768 carry = (w >> 26) - ((right / 0x4000000) | 0);
47769 this.words[i + shift] = w & 0x3ffffff;
47770 }
47771 for (; i < this.length - shift; i++) {
47772 w = (this.words[i + shift] | 0) + carry;
47773 carry = w >> 26;
47774 this.words[i + shift] = w & 0x3ffffff;
47775 }
47776
47777 if (carry === 0) return this.strip();
47778
47779 // Subtraction overflow
47780 assert(carry === -1);
47781 carry = 0;
47782 for (i = 0; i < this.length; i++) {
47783 w = -(this.words[i] | 0) + carry;
47784 carry = w >> 26;
47785 this.words[i] = w & 0x3ffffff;
47786 }
47787 this.negative = 1;
47788
47789 return this.strip();
47790 };
47791
47792 BN.prototype._wordDiv = function _wordDiv (num, mode) {
47793 var shift = this.length - num.length;
47794
47795 var a = this.clone();
47796 var b = num;
47797
47798 // Normalize
47799 var bhi = b.words[b.length - 1] | 0;
47800 var bhiBits = this._countBits(bhi);
47801 shift = 26 - bhiBits;
47802 if (shift !== 0) {
47803 b = b.ushln(shift);
47804 a.iushln(shift);
47805 bhi = b.words[b.length - 1] | 0;
47806 }
47807
47808 // Initialize quotient
47809 var m = a.length - b.length;
47810 var q;
47811
47812 if (mode !== 'mod') {
47813 q = new BN(null);
47814 q.length = m + 1;
47815 q.words = new Array(q.length);
47816 for (var i = 0; i < q.length; i++) {
47817 q.words[i] = 0;
47818 }
47819 }
47820
47821 var diff = a.clone()._ishlnsubmul(b, 1, m);
47822 if (diff.negative === 0) {
47823 a = diff;
47824 if (q) {
47825 q.words[m] = 1;
47826 }
47827 }
47828
47829 for (var j = m - 1; j >= 0; j--) {
47830 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
47831 (a.words[b.length + j - 1] | 0);
47832
47833 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
47834 // (0x7ffffff)
47835 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
47836
47837 a._ishlnsubmul(b, qj, j);
47838 while (a.negative !== 0) {
47839 qj--;
47840 a.negative = 0;
47841 a._ishlnsubmul(b, 1, j);
47842 if (!a.isZero()) {
47843 a.negative ^= 1;
47844 }
47845 }
47846 if (q) {
47847 q.words[j] = qj;
47848 }
47849 }
47850 if (q) {
47851 q.strip();
47852 }
47853 a.strip();
47854
47855 // Denormalize
47856 if (mode !== 'div' && shift !== 0) {
47857 a.iushrn(shift);
47858 }
47859
47860 return {
47861 div: q || null,
47862 mod: a
47863 };
47864 };
47865
47866 // NOTE: 1) `mode` can be set to `mod` to request mod only,
47867 // to `div` to request div only, or be absent to
47868 // request both div & mod
47869 // 2) `positive` is true if unsigned mod is requested
47870 BN.prototype.divmod = function divmod (num, mode, positive) {
47871 assert(!num.isZero());
47872
47873 if (this.isZero()) {
47874 return {
47875 div: new BN(0),
47876 mod: new BN(0)
47877 };
47878 }
47879
47880 var div, mod, res;
47881 if (this.negative !== 0 && num.negative === 0) {
47882 res = this.neg().divmod(num, mode);
47883
47884 if (mode !== 'mod') {
47885 div = res.div.neg();
47886 }
47887
47888 if (mode !== 'div') {
47889 mod = res.mod.neg();
47890 if (positive && mod.negative !== 0) {
47891 mod.iadd(num);
47892 }
47893 }
47894
47895 return {
47896 div: div,
47897 mod: mod
47898 };
47899 }
47900
47901 if (this.negative === 0 && num.negative !== 0) {
47902 res = this.divmod(num.neg(), mode);
47903
47904 if (mode !== 'mod') {
47905 div = res.div.neg();
47906 }
47907
47908 return {
47909 div: div,
47910 mod: res.mod
47911 };
47912 }
47913
47914 if ((this.negative & num.negative) !== 0) {
47915 res = this.neg().divmod(num.neg(), mode);
47916
47917 if (mode !== 'div') {
47918 mod = res.mod.neg();
47919 if (positive && mod.negative !== 0) {
47920 mod.isub(num);
47921 }
47922 }
47923
47924 return {
47925 div: res.div,
47926 mod: mod
47927 };
47928 }
47929
47930 // Both numbers are positive at this point
47931
47932 // Strip both numbers to approximate shift value
47933 if (num.length > this.length || this.cmp(num) < 0) {
47934 return {
47935 div: new BN(0),
47936 mod: this
47937 };
47938 }
47939
47940 // Very short reduction
47941 if (num.length === 1) {
47942 if (mode === 'div') {
47943 return {
47944 div: this.divn(num.words[0]),
47945 mod: null
47946 };
47947 }
47948
47949 if (mode === 'mod') {
47950 return {
47951 div: null,
47952 mod: new BN(this.modn(num.words[0]))
47953 };
47954 }
47955
47956 return {
47957 div: this.divn(num.words[0]),
47958 mod: new BN(this.modn(num.words[0]))
47959 };
47960 }
47961
47962 return this._wordDiv(num, mode);
47963 };
47964
47965 // Find `this` / `num`
47966 BN.prototype.div = function div (num) {
47967 return this.divmod(num, 'div', false).div;
47968 };
47969
47970 // Find `this` % `num`
47971 BN.prototype.mod = function mod (num) {
47972 return this.divmod(num, 'mod', false).mod;
47973 };
47974
47975 BN.prototype.umod = function umod (num) {
47976 return this.divmod(num, 'mod', true).mod;
47977 };
47978
47979 // Find Round(`this` / `num`)
47980 BN.prototype.divRound = function divRound (num) {
47981 var dm = this.divmod(num);
47982
47983 // Fast case - exact division
47984 if (dm.mod.isZero()) return dm.div;
47985
47986 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
47987
47988 var half = num.ushrn(1);
47989 var r2 = num.andln(1);
47990 var cmp = mod.cmp(half);
47991
47992 // Round down
47993 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
47994
47995 // Round up
47996 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
47997 };
47998
47999 BN.prototype.modn = function modn (num) {
48000 assert(num <= 0x3ffffff);
48001 var p = (1 << 26) % num;
48002
48003 var acc = 0;
48004 for (var i = this.length - 1; i >= 0; i--) {
48005 acc = (p * acc + (this.words[i] | 0)) % num;
48006 }
48007
48008 return acc;
48009 };
48010
48011 // In-place division by number
48012 BN.prototype.idivn = function idivn (num) {
48013 assert(num <= 0x3ffffff);
48014
48015 var carry = 0;
48016 for (var i = this.length - 1; i >= 0; i--) {
48017 var w = (this.words[i] | 0) + carry * 0x4000000;
48018 this.words[i] = (w / num) | 0;
48019 carry = w % num;
48020 }
48021
48022 return this.strip();
48023 };
48024
48025 BN.prototype.divn = function divn (num) {
48026 return this.clone().idivn(num);
48027 };
48028
48029 BN.prototype.egcd = function egcd (p) {
48030 assert(p.negative === 0);
48031 assert(!p.isZero());
48032
48033 var x = this;
48034 var y = p.clone();
48035
48036 if (x.negative !== 0) {
48037 x = x.umod(p);
48038 } else {
48039 x = x.clone();
48040 }
48041
48042 // A * x + B * y = x
48043 var A = new BN(1);
48044 var B = new BN(0);
48045
48046 // C * x + D * y = y
48047 var C = new BN(0);
48048 var D = new BN(1);
48049
48050 var g = 0;
48051
48052 while (x.isEven() && y.isEven()) {
48053 x.iushrn(1);
48054 y.iushrn(1);
48055 ++g;
48056 }
48057
48058 var yp = y.clone();
48059 var xp = x.clone();
48060
48061 while (!x.isZero()) {
48062 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
48063 if (i > 0) {
48064 x.iushrn(i);
48065 while (i-- > 0) {
48066 if (A.isOdd() || B.isOdd()) {
48067 A.iadd(yp);
48068 B.isub(xp);
48069 }
48070
48071 A.iushrn(1);
48072 B.iushrn(1);
48073 }
48074 }
48075
48076 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
48077 if (j > 0) {
48078 y.iushrn(j);
48079 while (j-- > 0) {
48080 if (C.isOdd() || D.isOdd()) {
48081 C.iadd(yp);
48082 D.isub(xp);
48083 }
48084
48085 C.iushrn(1);
48086 D.iushrn(1);
48087 }
48088 }
48089
48090 if (x.cmp(y) >= 0) {
48091 x.isub(y);
48092 A.isub(C);
48093 B.isub(D);
48094 } else {
48095 y.isub(x);
48096 C.isub(A);
48097 D.isub(B);
48098 }
48099 }
48100
48101 return {
48102 a: C,
48103 b: D,
48104 gcd: y.iushln(g)
48105 };
48106 };
48107
48108 // This is reduced incarnation of the binary EEA
48109 // above, designated to invert members of the
48110 // _prime_ fields F(p) at a maximal speed
48111 BN.prototype._invmp = function _invmp (p) {
48112 assert(p.negative === 0);
48113 assert(!p.isZero());
48114
48115 var a = this;
48116 var b = p.clone();
48117
48118 if (a.negative !== 0) {
48119 a = a.umod(p);
48120 } else {
48121 a = a.clone();
48122 }
48123
48124 var x1 = new BN(1);
48125 var x2 = new BN(0);
48126
48127 var delta = b.clone();
48128
48129 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
48130 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
48131 if (i > 0) {
48132 a.iushrn(i);
48133 while (i-- > 0) {
48134 if (x1.isOdd()) {
48135 x1.iadd(delta);
48136 }
48137
48138 x1.iushrn(1);
48139 }
48140 }
48141
48142 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
48143 if (j > 0) {
48144 b.iushrn(j);
48145 while (j-- > 0) {
48146 if (x2.isOdd()) {
48147 x2.iadd(delta);
48148 }
48149
48150 x2.iushrn(1);
48151 }
48152 }
48153
48154 if (a.cmp(b) >= 0) {
48155 a.isub(b);
48156 x1.isub(x2);
48157 } else {
48158 b.isub(a);
48159 x2.isub(x1);
48160 }
48161 }
48162
48163 var res;
48164 if (a.cmpn(1) === 0) {
48165 res = x1;
48166 } else {
48167 res = x2;
48168 }
48169
48170 if (res.cmpn(0) < 0) {
48171 res.iadd(p);
48172 }
48173
48174 return res;
48175 };
48176
48177 BN.prototype.gcd = function gcd (num) {
48178 if (this.isZero()) return num.abs();
48179 if (num.isZero()) return this.abs();
48180
48181 var a = this.clone();
48182 var b = num.clone();
48183 a.negative = 0;
48184 b.negative = 0;
48185
48186 // Remove common factor of two
48187 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
48188 a.iushrn(1);
48189 b.iushrn(1);
48190 }
48191
48192 do {
48193 while (a.isEven()) {
48194 a.iushrn(1);
48195 }
48196 while (b.isEven()) {
48197 b.iushrn(1);
48198 }
48199
48200 var r = a.cmp(b);
48201 if (r < 0) {
48202 // Swap `a` and `b` to make `a` always bigger than `b`
48203 var t = a;
48204 a = b;
48205 b = t;
48206 } else if (r === 0 || b.cmpn(1) === 0) {
48207 break;
48208 }
48209
48210 a.isub(b);
48211 } while (true);
48212
48213 return b.iushln(shift);
48214 };
48215
48216 // Invert number in the field F(num)
48217 BN.prototype.invm = function invm (num) {
48218 return this.egcd(num).a.umod(num);
48219 };
48220
48221 BN.prototype.isEven = function isEven () {
48222 return (this.words[0] & 1) === 0;
48223 };
48224
48225 BN.prototype.isOdd = function isOdd () {
48226 return (this.words[0] & 1) === 1;
48227 };
48228
48229 // And first word and num
48230 BN.prototype.andln = function andln (num) {
48231 return this.words[0] & num;
48232 };
48233
48234 // Increment at the bit position in-line
48235 BN.prototype.bincn = function bincn (bit) {
48236 assert(typeof bit === 'number');
48237 var r = bit % 26;
48238 var s = (bit - r) / 26;
48239 var q = 1 << r;
48240
48241 // Fast case: bit is much higher than all existing words
48242 if (this.length <= s) {
48243 this._expand(s + 1);
48244 this.words[s] |= q;
48245 return this;
48246 }
48247
48248 // Add bit and propagate, if needed
48249 var carry = q;
48250 for (var i = s; carry !== 0 && i < this.length; i++) {
48251 var w = this.words[i] | 0;
48252 w += carry;
48253 carry = w >>> 26;
48254 w &= 0x3ffffff;
48255 this.words[i] = w;
48256 }
48257 if (carry !== 0) {
48258 this.words[i] = carry;
48259 this.length++;
48260 }
48261 return this;
48262 };
48263
48264 BN.prototype.isZero = function isZero () {
48265 return this.length === 1 && this.words[0] === 0;
48266 };
48267
48268 BN.prototype.cmpn = function cmpn (num) {
48269 var negative = num < 0;
48270
48271 if (this.negative !== 0 && !negative) return -1;
48272 if (this.negative === 0 && negative) return 1;
48273
48274 this.strip();
48275
48276 var res;
48277 if (this.length > 1) {
48278 res = 1;
48279 } else {
48280 if (negative) {
48281 num = -num;
48282 }
48283
48284 assert(num <= 0x3ffffff, 'Number is too big');
48285
48286 var w = this.words[0] | 0;
48287 res = w === num ? 0 : w < num ? -1 : 1;
48288 }
48289 if (this.negative !== 0) return -res | 0;
48290 return res;
48291 };
48292
48293 // Compare two numbers and return:
48294 // 1 - if `this` > `num`
48295 // 0 - if `this` == `num`
48296 // -1 - if `this` < `num`
48297 BN.prototype.cmp = function cmp (num) {
48298 if (this.negative !== 0 && num.negative === 0) return -1;
48299 if (this.negative === 0 && num.negative !== 0) return 1;
48300
48301 var res = this.ucmp(num);
48302 if (this.negative !== 0) return -res | 0;
48303 return res;
48304 };
48305
48306 // Unsigned comparison
48307 BN.prototype.ucmp = function ucmp (num) {
48308 // At this point both numbers have the same sign
48309 if (this.length > num.length) return 1;
48310 if (this.length < num.length) return -1;
48311
48312 var res = 0;
48313 for (var i = this.length - 1; i >= 0; i--) {
48314 var a = this.words[i] | 0;
48315 var b = num.words[i] | 0;
48316
48317 if (a === b) continue;
48318 if (a < b) {
48319 res = -1;
48320 } else if (a > b) {
48321 res = 1;
48322 }
48323 break;
48324 }
48325 return res;
48326 };
48327
48328 BN.prototype.gtn = function gtn (num) {
48329 return this.cmpn(num) === 1;
48330 };
48331
48332 BN.prototype.gt = function gt (num) {
48333 return this.cmp(num) === 1;
48334 };
48335
48336 BN.prototype.gten = function gten (num) {
48337 return this.cmpn(num) >= 0;
48338 };
48339
48340 BN.prototype.gte = function gte (num) {
48341 return this.cmp(num) >= 0;
48342 };
48343
48344 BN.prototype.ltn = function ltn (num) {
48345 return this.cmpn(num) === -1;
48346 };
48347
48348 BN.prototype.lt = function lt (num) {
48349 return this.cmp(num) === -1;
48350 };
48351
48352 BN.prototype.lten = function lten (num) {
48353 return this.cmpn(num) <= 0;
48354 };
48355
48356 BN.prototype.lte = function lte (num) {
48357 return this.cmp(num) <= 0;
48358 };
48359
48360 BN.prototype.eqn = function eqn (num) {
48361 return this.cmpn(num) === 0;
48362 };
48363
48364 BN.prototype.eq = function eq (num) {
48365 return this.cmp(num) === 0;
48366 };
48367
48368 //
48369 // A reduce context, could be using montgomery or something better, depending
48370 // on the `m` itself.
48371 //
48372 BN.red = function red (num) {
48373 return new Red(num);
48374 };
48375
48376 BN.prototype.toRed = function toRed (ctx) {
48377 assert(!this.red, 'Already a number in reduction context');
48378 assert(this.negative === 0, 'red works only with positives');
48379 return ctx.convertTo(this)._forceRed(ctx);
48380 };
48381
48382 BN.prototype.fromRed = function fromRed () {
48383 assert(this.red, 'fromRed works only with numbers in reduction context');
48384 return this.red.convertFrom(this);
48385 };
48386
48387 BN.prototype._forceRed = function _forceRed (ctx) {
48388 this.red = ctx;
48389 return this;
48390 };
48391
48392 BN.prototype.forceRed = function forceRed (ctx) {
48393 assert(!this.red, 'Already a number in reduction context');
48394 return this._forceRed(ctx);
48395 };
48396
48397 BN.prototype.redAdd = function redAdd (num) {
48398 assert(this.red, 'redAdd works only with red numbers');
48399 return this.red.add(this, num);
48400 };
48401
48402 BN.prototype.redIAdd = function redIAdd (num) {
48403 assert(this.red, 'redIAdd works only with red numbers');
48404 return this.red.iadd(this, num);
48405 };
48406
48407 BN.prototype.redSub = function redSub (num) {
48408 assert(this.red, 'redSub works only with red numbers');
48409 return this.red.sub(this, num);
48410 };
48411
48412 BN.prototype.redISub = function redISub (num) {
48413 assert(this.red, 'redISub works only with red numbers');
48414 return this.red.isub(this, num);
48415 };
48416
48417 BN.prototype.redShl = function redShl (num) {
48418 assert(this.red, 'redShl works only with red numbers');
48419 return this.red.shl(this, num);
48420 };
48421
48422 BN.prototype.redMul = function redMul (num) {
48423 assert(this.red, 'redMul works only with red numbers');
48424 this.red._verify2(this, num);
48425 return this.red.mul(this, num);
48426 };
48427
48428 BN.prototype.redIMul = function redIMul (num) {
48429 assert(this.red, 'redMul works only with red numbers');
48430 this.red._verify2(this, num);
48431 return this.red.imul(this, num);
48432 };
48433
48434 BN.prototype.redSqr = function redSqr () {
48435 assert(this.red, 'redSqr works only with red numbers');
48436 this.red._verify1(this);
48437 return this.red.sqr(this);
48438 };
48439
48440 BN.prototype.redISqr = function redISqr () {
48441 assert(this.red, 'redISqr works only with red numbers');
48442 this.red._verify1(this);
48443 return this.red.isqr(this);
48444 };
48445
48446 // Square root over p
48447 BN.prototype.redSqrt = function redSqrt () {
48448 assert(this.red, 'redSqrt works only with red numbers');
48449 this.red._verify1(this);
48450 return this.red.sqrt(this);
48451 };
48452
48453 BN.prototype.redInvm = function redInvm () {
48454 assert(this.red, 'redInvm works only with red numbers');
48455 this.red._verify1(this);
48456 return this.red.invm(this);
48457 };
48458
48459 // Return negative clone of `this` % `red modulo`
48460 BN.prototype.redNeg = function redNeg () {
48461 assert(this.red, 'redNeg works only with red numbers');
48462 this.red._verify1(this);
48463 return this.red.neg(this);
48464 };
48465
48466 BN.prototype.redPow = function redPow (num) {
48467 assert(this.red && !num.red, 'redPow(normalNum)');
48468 this.red._verify1(this);
48469 return this.red.pow(this, num);
48470 };
48471
48472 // Prime numbers with efficient reduction
48473 var primes = {
48474 k256: null,
48475 p224: null,
48476 p192: null,
48477 p25519: null
48478 };
48479
48480 // Pseudo-Mersenne prime
48481 function MPrime (name, p) {
48482 // P = 2 ^ N - K
48483 this.name = name;
48484 this.p = new BN(p, 16);
48485 this.n = this.p.bitLength();
48486 this.k = new BN(1).iushln(this.n).isub(this.p);
48487
48488 this.tmp = this._tmp();
48489 }
48490
48491 MPrime.prototype._tmp = function _tmp () {
48492 var tmp = new BN(null);
48493 tmp.words = new Array(Math.ceil(this.n / 13));
48494 return tmp;
48495 };
48496
48497 MPrime.prototype.ireduce = function ireduce (num) {
48498 // Assumes that `num` is less than `P^2`
48499 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
48500 var r = num;
48501 var rlen;
48502
48503 do {
48504 this.split(r, this.tmp);
48505 r = this.imulK(r);
48506 r = r.iadd(this.tmp);
48507 rlen = r.bitLength();
48508 } while (rlen > this.n);
48509
48510 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
48511 if (cmp === 0) {
48512 r.words[0] = 0;
48513 r.length = 1;
48514 } else if (cmp > 0) {
48515 r.isub(this.p);
48516 } else {
48517 r.strip();
48518 }
48519
48520 return r;
48521 };
48522
48523 MPrime.prototype.split = function split (input, out) {
48524 input.iushrn(this.n, 0, out);
48525 };
48526
48527 MPrime.prototype.imulK = function imulK (num) {
48528 return num.imul(this.k);
48529 };
48530
48531 function K256 () {
48532 MPrime.call(
48533 this,
48534 'k256',
48535 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
48536 }
48537 inherits(K256, MPrime);
48538
48539 K256.prototype.split = function split (input, output) {
48540 // 256 = 9 * 26 + 22
48541 var mask = 0x3fffff;
48542
48543 var outLen = Math.min(input.length, 9);
48544 for (var i = 0; i < outLen; i++) {
48545 output.words[i] = input.words[i];
48546 }
48547 output.length = outLen;
48548
48549 if (input.length <= 9) {
48550 input.words[0] = 0;
48551 input.length = 1;
48552 return;
48553 }
48554
48555 // Shift by 9 limbs
48556 var prev = input.words[9];
48557 output.words[output.length++] = prev & mask;
48558
48559 for (i = 10; i < input.length; i++) {
48560 var next = input.words[i] | 0;
48561 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
48562 prev = next;
48563 }
48564 prev >>>= 22;
48565 input.words[i - 10] = prev;
48566 if (prev === 0 && input.length > 10) {
48567 input.length -= 10;
48568 } else {
48569 input.length -= 9;
48570 }
48571 };
48572
48573 K256.prototype.imulK = function imulK (num) {
48574 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
48575 num.words[num.length] = 0;
48576 num.words[num.length + 1] = 0;
48577 num.length += 2;
48578
48579 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
48580 var lo = 0;
48581 for (var i = 0; i < num.length; i++) {
48582 var w = num.words[i] | 0;
48583 lo += w * 0x3d1;
48584 num.words[i] = lo & 0x3ffffff;
48585 lo = w * 0x40 + ((lo / 0x4000000) | 0);
48586 }
48587
48588 // Fast length reduction
48589 if (num.words[num.length - 1] === 0) {
48590 num.length--;
48591 if (num.words[num.length - 1] === 0) {
48592 num.length--;
48593 }
48594 }
48595 return num;
48596 };
48597
48598 function P224 () {
48599 MPrime.call(
48600 this,
48601 'p224',
48602 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
48603 }
48604 inherits(P224, MPrime);
48605
48606 function P192 () {
48607 MPrime.call(
48608 this,
48609 'p192',
48610 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
48611 }
48612 inherits(P192, MPrime);
48613
48614 function P25519 () {
48615 // 2 ^ 255 - 19
48616 MPrime.call(
48617 this,
48618 '25519',
48619 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
48620 }
48621 inherits(P25519, MPrime);
48622
48623 P25519.prototype.imulK = function imulK (num) {
48624 // K = 0x13
48625 var carry = 0;
48626 for (var i = 0; i < num.length; i++) {
48627 var hi = (num.words[i] | 0) * 0x13 + carry;
48628 var lo = hi & 0x3ffffff;
48629 hi >>>= 26;
48630
48631 num.words[i] = lo;
48632 carry = hi;
48633 }
48634 if (carry !== 0) {
48635 num.words[num.length++] = carry;
48636 }
48637 return num;
48638 };
48639
48640 // Exported mostly for testing purposes, use plain name instead
48641 BN._prime = function prime (name) {
48642 // Cached version of prime
48643 if (primes[name]) return primes[name];
48644
48645 var prime;
48646 if (name === 'k256') {
48647 prime = new K256();
48648 } else if (name === 'p224') {
48649 prime = new P224();
48650 } else if (name === 'p192') {
48651 prime = new P192();
48652 } else if (name === 'p25519') {
48653 prime = new P25519();
48654 } else {
48655 throw new Error('Unknown prime ' + name);
48656 }
48657 primes[name] = prime;
48658
48659 return prime;
48660 };
48661
48662 //
48663 // Base reduction engine
48664 //
48665 function Red (m) {
48666 if (typeof m === 'string') {
48667 var prime = BN._prime(m);
48668 this.m = prime.p;
48669 this.prime = prime;
48670 } else {
48671 assert(m.gtn(1), 'modulus must be greater than 1');
48672 this.m = m;
48673 this.prime = null;
48674 }
48675 }
48676
48677 Red.prototype._verify1 = function _verify1 (a) {
48678 assert(a.negative === 0, 'red works only with positives');
48679 assert(a.red, 'red works only with red numbers');
48680 };
48681
48682 Red.prototype._verify2 = function _verify2 (a, b) {
48683 assert((a.negative | b.negative) === 0, 'red works only with positives');
48684 assert(a.red && a.red === b.red,
48685 'red works only with red numbers');
48686 };
48687
48688 Red.prototype.imod = function imod (a) {
48689 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
48690 return a.umod(this.m)._forceRed(this);
48691 };
48692
48693 Red.prototype.neg = function neg (a) {
48694 if (a.isZero()) {
48695 return a.clone();
48696 }
48697
48698 return this.m.sub(a)._forceRed(this);
48699 };
48700
48701 Red.prototype.add = function add (a, b) {
48702 this._verify2(a, b);
48703
48704 var res = a.add(b);
48705 if (res.cmp(this.m) >= 0) {
48706 res.isub(this.m);
48707 }
48708 return res._forceRed(this);
48709 };
48710
48711 Red.prototype.iadd = function iadd (a, b) {
48712 this._verify2(a, b);
48713
48714 var res = a.iadd(b);
48715 if (res.cmp(this.m) >= 0) {
48716 res.isub(this.m);
48717 }
48718 return res;
48719 };
48720
48721 Red.prototype.sub = function sub (a, b) {
48722 this._verify2(a, b);
48723
48724 var res = a.sub(b);
48725 if (res.cmpn(0) < 0) {
48726 res.iadd(this.m);
48727 }
48728 return res._forceRed(this);
48729 };
48730
48731 Red.prototype.isub = function isub (a, b) {
48732 this._verify2(a, b);
48733
48734 var res = a.isub(b);
48735 if (res.cmpn(0) < 0) {
48736 res.iadd(this.m);
48737 }
48738 return res;
48739 };
48740
48741 Red.prototype.shl = function shl (a, num) {
48742 this._verify1(a);
48743 return this.imod(a.ushln(num));
48744 };
48745
48746 Red.prototype.imul = function imul (a, b) {
48747 this._verify2(a, b);
48748 return this.imod(a.imul(b));
48749 };
48750
48751 Red.prototype.mul = function mul (a, b) {
48752 this._verify2(a, b);
48753 return this.imod(a.mul(b));
48754 };
48755
48756 Red.prototype.isqr = function isqr (a) {
48757 return this.imul(a, a.clone());
48758 };
48759
48760 Red.prototype.sqr = function sqr (a) {
48761 return this.mul(a, a);
48762 };
48763
48764 Red.prototype.sqrt = function sqrt (a) {
48765 if (a.isZero()) return a.clone();
48766
48767 var mod3 = this.m.andln(3);
48768 assert(mod3 % 2 === 1);
48769
48770 // Fast case
48771 if (mod3 === 3) {
48772 var pow = this.m.add(new BN(1)).iushrn(2);
48773 return this.pow(a, pow);
48774 }
48775
48776 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
48777 //
48778 // Find Q and S, that Q * 2 ^ S = (P - 1)
48779 var q = this.m.subn(1);
48780 var s = 0;
48781 while (!q.isZero() && q.andln(1) === 0) {
48782 s++;
48783 q.iushrn(1);
48784 }
48785 assert(!q.isZero());
48786
48787 var one = new BN(1).toRed(this);
48788 var nOne = one.redNeg();
48789
48790 // Find quadratic non-residue
48791 // NOTE: Max is such because of generalized Riemann hypothesis.
48792 var lpow = this.m.subn(1).iushrn(1);
48793 var z = this.m.bitLength();
48794 z = new BN(2 * z * z).toRed(this);
48795
48796 while (this.pow(z, lpow).cmp(nOne) !== 0) {
48797 z.redIAdd(nOne);
48798 }
48799
48800 var c = this.pow(z, q);
48801 var r = this.pow(a, q.addn(1).iushrn(1));
48802 var t = this.pow(a, q);
48803 var m = s;
48804 while (t.cmp(one) !== 0) {
48805 var tmp = t;
48806 for (var i = 0; tmp.cmp(one) !== 0; i++) {
48807 tmp = tmp.redSqr();
48808 }
48809 assert(i < m);
48810 var b = this.pow(c, new BN(1).iushln(m - i - 1));
48811
48812 r = r.redMul(b);
48813 c = b.redSqr();
48814 t = t.redMul(c);
48815 m = i;
48816 }
48817
48818 return r;
48819 };
48820
48821 Red.prototype.invm = function invm (a) {
48822 var inv = a._invmp(this.m);
48823 if (inv.negative !== 0) {
48824 inv.negative = 0;
48825 return this.imod(inv).redNeg();
48826 } else {
48827 return this.imod(inv);
48828 }
48829 };
48830
48831 Red.prototype.pow = function pow (a, num) {
48832 if (num.isZero()) return new BN(1);
48833 if (num.cmpn(1) === 0) return a.clone();
48834
48835 var windowSize = 4;
48836 var wnd = new Array(1 << windowSize);
48837 wnd[0] = new BN(1).toRed(this);
48838 wnd[1] = a;
48839 for (var i = 2; i < wnd.length; i++) {
48840 wnd[i] = this.mul(wnd[i - 1], a);
48841 }
48842
48843 var res = wnd[0];
48844 var current = 0;
48845 var currentLen = 0;
48846 var start = num.bitLength() % 26;
48847 if (start === 0) {
48848 start = 26;
48849 }
48850
48851 for (i = num.length - 1; i >= 0; i--) {
48852 var word = num.words[i];
48853 for (var j = start - 1; j >= 0; j--) {
48854 var bit = (word >> j) & 1;
48855 if (res !== wnd[0]) {
48856 res = this.sqr(res);
48857 }
48858
48859 if (bit === 0 && current === 0) {
48860 currentLen = 0;
48861 continue;
48862 }
48863
48864 current <<= 1;
48865 current |= bit;
48866 currentLen++;
48867 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
48868
48869 res = this.mul(res, wnd[current]);
48870 currentLen = 0;
48871 current = 0;
48872 }
48873 start = 26;
48874 }
48875
48876 return res;
48877 };
48878
48879 Red.prototype.convertTo = function convertTo (num) {
48880 var r = num.umod(this.m);
48881
48882 return r === num ? r.clone() : r;
48883 };
48884
48885 Red.prototype.convertFrom = function convertFrom (num) {
48886 var res = num.clone();
48887 res.red = null;
48888 return res;
48889 };
48890
48891 //
48892 // Montgomery method engine
48893 //
48894
48895 BN.mont = function mont (num) {
48896 return new Mont(num);
48897 };
48898
48899 function Mont (m) {
48900 Red.call(this, m);
48901
48902 this.shift = this.m.bitLength();
48903 if (this.shift % 26 !== 0) {
48904 this.shift += 26 - (this.shift % 26);
48905 }
48906
48907 this.r = new BN(1).iushln(this.shift);
48908 this.r2 = this.imod(this.r.sqr());
48909 this.rinv = this.r._invmp(this.m);
48910
48911 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
48912 this.minv = this.minv.umod(this.r);
48913 this.minv = this.r.sub(this.minv);
48914 }
48915 inherits(Mont, Red);
48916
48917 Mont.prototype.convertTo = function convertTo (num) {
48918 return this.imod(num.ushln(this.shift));
48919 };
48920
48921 Mont.prototype.convertFrom = function convertFrom (num) {
48922 var r = this.imod(num.mul(this.rinv));
48923 r.red = null;
48924 return r;
48925 };
48926
48927 Mont.prototype.imul = function imul (a, b) {
48928 if (a.isZero() || b.isZero()) {
48929 a.words[0] = 0;
48930 a.length = 1;
48931 return a;
48932 }
48933
48934 var t = a.imul(b);
48935 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
48936 var u = t.isub(c).iushrn(this.shift);
48937 var res = u;
48938
48939 if (u.cmp(this.m) >= 0) {
48940 res = u.isub(this.m);
48941 } else if (u.cmpn(0) < 0) {
48942 res = u.iadd(this.m);
48943 }
48944
48945 return res._forceRed(this);
48946 };
48947
48948 Mont.prototype.mul = function mul (a, b) {
48949 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
48950
48951 var t = a.mul(b);
48952 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
48953 var u = t.isub(c).iushrn(this.shift);
48954 var res = u;
48955 if (u.cmp(this.m) >= 0) {
48956 res = u.isub(this.m);
48957 } else if (u.cmpn(0) < 0) {
48958 res = u.iadd(this.m);
48959 }
48960
48961 return res._forceRed(this);
48962 };
48963
48964 Mont.prototype.invm = function invm (a) {
48965 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
48966 var res = this.imod(a._invmp(this.m).mul(this.r2));
48967 return res._forceRed(this);
48968 };
48969 })(typeof module === 'undefined' || module, this);
48970
48971 },{}],18:[function(require,module,exports){
48972 var r;
48973
48974 module.exports = function rand(len) {
48975 if (!r)
48976 r = new Rand(null);
48977
48978 return r.generate(len);
48979 };
48980
48981 function Rand(rand) {
48982 this.rand = rand;
48983 }
48984 module.exports.Rand = Rand;
48985
48986 Rand.prototype.generate = function generate(len) {
48987 return this._rand(len);
48988 };
48989
48990 // Emulate crypto API using randy
48991 Rand.prototype._rand = function _rand(n) {
48992 if (this.rand.getBytes)
48993 return this.rand.getBytes(n);
48994
48995 var res = new Uint8Array(n);
48996 for (var i = 0; i < res.length; i++)
48997 res[i] = this.rand.getByte();
48998 return res;
48999 };
49000
49001 if (typeof self === 'object') {
49002 if (self.crypto && self.crypto.getRandomValues) {
49003 // Modern browsers
49004 Rand.prototype._rand = function _rand(n) {
49005 var arr = new Uint8Array(n);
49006 self.crypto.getRandomValues(arr);
49007 return arr;
49008 };
49009 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
49010 // IE
49011 Rand.prototype._rand = function _rand(n) {
49012 var arr = new Uint8Array(n);
49013 self.msCrypto.getRandomValues(arr);
49014 return arr;
49015 };
49016
49017 // Safari's WebWorkers do not have `crypto`
49018 } else if (typeof window === 'object') {
49019 // Old junk
49020 Rand.prototype._rand = function() {
49021 throw new Error('Not implemented yet');
49022 };
49023 }
49024 } else {
49025 // Node.js or Web worker with no crypto support
49026 try {
49027 var crypto = require('crypto');
49028 if (typeof crypto.randomBytes !== 'function')
49029 throw new Error('Not supported');
49030
49031 Rand.prototype._rand = function _rand(n) {
49032 return crypto.randomBytes(n);
49033 };
49034 } catch (e) {
49035 }
49036 }
49037
49038 },{"crypto":19}],19:[function(require,module,exports){
49039
49040 },{}],20:[function(require,module,exports){
49041 (function (Buffer){
49042 // based on the aes implimentation in triple sec
49043 // https://github.com/keybase/triplesec
49044
49045 // which is in turn based on the one from crypto-js
49046 // https://code.google.com/p/crypto-js/
49047
49048 var uint_max = Math.pow(2, 32)
49049 function fixup_uint32 (x) {
49050 var ret, x_pos
49051 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
49052 return ret
49053 }
49054 function scrub_vec (v) {
49055 for (var i = 0; i < v.length; v++) {
49056 v[i] = 0
49057 }
49058 return false
49059 }
49060
49061 function Global () {
49062 this.SBOX = []
49063 this.INV_SBOX = []
49064 this.SUB_MIX = [[], [], [], []]
49065 this.INV_SUB_MIX = [[], [], [], []]
49066 this.init()
49067 this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
49068 }
49069
49070 Global.prototype.init = function () {
49071 var d, i, sx, t, x, x2, x4, x8, xi, _i
49072 d = (function () {
49073 var _i, _results
49074 _results = []
49075 for (i = _i = 0; _i < 256; i = ++_i) {
49076 if (i < 128) {
49077 _results.push(i << 1)
49078 } else {
49079 _results.push((i << 1) ^ 0x11b)
49080 }
49081 }
49082 return _results
49083 })()
49084 x = 0
49085 xi = 0
49086 for (i = _i = 0; _i < 256; i = ++_i) {
49087 sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
49088 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
49089 this.SBOX[x] = sx
49090 this.INV_SBOX[sx] = x
49091 x2 = d[x]
49092 x4 = d[x2]
49093 x8 = d[x4]
49094 t = (d[sx] * 0x101) ^ (sx * 0x1010100)
49095 this.SUB_MIX[0][x] = (t << 24) | (t >>> 8)
49096 this.SUB_MIX[1][x] = (t << 16) | (t >>> 16)
49097 this.SUB_MIX[2][x] = (t << 8) | (t >>> 24)
49098 this.SUB_MIX[3][x] = t
49099 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
49100 this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
49101 this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
49102 this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
49103 this.INV_SUB_MIX[3][sx] = t
49104 if (x === 0) {
49105 x = xi = 1
49106 } else {
49107 x = x2 ^ d[d[d[x8 ^ x2]]]
49108 xi ^= d[d[xi]]
49109 }
49110 }
49111 return true
49112 }
49113
49114 var G = new Global()
49115
49116 AES.blockSize = 4 * 4
49117
49118 AES.prototype.blockSize = AES.blockSize
49119
49120 AES.keySize = 256 / 8
49121
49122 AES.prototype.keySize = AES.keySize
49123
49124 function bufferToArray (buf) {
49125 var len = buf.length / 4
49126 var out = new Array(len)
49127 var i = -1
49128 while (++i < len) {
49129 out[i] = buf.readUInt32BE(i * 4)
49130 }
49131 return out
49132 }
49133 function AES (key) {
49134 this._key = bufferToArray(key)
49135 this._doReset()
49136 }
49137
49138 AES.prototype._doReset = function () {
49139 var invKsRow, keySize, keyWords, ksRow, ksRows, t
49140 keyWords = this._key
49141 keySize = keyWords.length
49142 this._nRounds = keySize + 6
49143 ksRows = (this._nRounds + 1) * 4
49144 this._keySchedule = []
49145 for (ksRow = 0; ksRow < ksRows; ksRow++) {
49146 this._keySchedule[ksRow] = ksRow < keySize ? keyWords[ksRow] : (t = this._keySchedule[ksRow - 1], (ksRow % keySize) === 0 ? (t = (t << 8) | (t >>> 24), t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff], t ^= G.RCON[(ksRow / keySize) | 0] << 24) : keySize > 6 && ksRow % keySize === 4 ? t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff] : void 0, this._keySchedule[ksRow - keySize] ^ t)
49147 }
49148 this._invKeySchedule = []
49149 for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {
49150 ksRow = ksRows - invKsRow
49151 t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)]
49152 this._invKeySchedule[invKsRow] = invKsRow < 4 || ksRow <= 4 ? t : G.INV_SUB_MIX[0][G.SBOX[t >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(t >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(t >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[t & 0xff]]
49153 }
49154 return true
49155 }
49156
49157 AES.prototype.encryptBlock = function (M) {
49158 M = bufferToArray(new Buffer(M))
49159 var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX)
49160 var buf = new Buffer(16)
49161 buf.writeUInt32BE(out[0], 0)
49162 buf.writeUInt32BE(out[1], 4)
49163 buf.writeUInt32BE(out[2], 8)
49164 buf.writeUInt32BE(out[3], 12)
49165 return buf
49166 }
49167
49168 AES.prototype.decryptBlock = function (M) {
49169 M = bufferToArray(new Buffer(M))
49170 var temp = [M[3], M[1]]
49171 M[1] = temp[0]
49172 M[3] = temp[1]
49173 var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX)
49174 var buf = new Buffer(16)
49175 buf.writeUInt32BE(out[0], 0)
49176 buf.writeUInt32BE(out[3], 4)
49177 buf.writeUInt32BE(out[2], 8)
49178 buf.writeUInt32BE(out[1], 12)
49179 return buf
49180 }
49181
49182 AES.prototype.scrub = function () {
49183 scrub_vec(this._keySchedule)
49184 scrub_vec(this._invKeySchedule)
49185 scrub_vec(this._key)
49186 }
49187
49188 AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) {
49189 var ksRow, s0, s1, s2, s3, t0, t1, t2, t3
49190
49191 s0 = M[0] ^ keySchedule[0]
49192 s1 = M[1] ^ keySchedule[1]
49193 s2 = M[2] ^ keySchedule[2]
49194 s3 = M[3] ^ keySchedule[3]
49195 ksRow = 4
49196 for (var round = 1; round < this._nRounds; round++) {
49197 t0 = SUB_MIX[0][s0 >>> 24] ^ SUB_MIX[1][(s1 >>> 16) & 0xff] ^ SUB_MIX[2][(s2 >>> 8) & 0xff] ^ SUB_MIX[3][s3 & 0xff] ^ keySchedule[ksRow++]
49198 t1 = SUB_MIX[0][s1 >>> 24] ^ SUB_MIX[1][(s2 >>> 16) & 0xff] ^ SUB_MIX[2][(s3 >>> 8) & 0xff] ^ SUB_MIX[3][s0 & 0xff] ^ keySchedule[ksRow++]
49199 t2 = SUB_MIX[0][s2 >>> 24] ^ SUB_MIX[1][(s3 >>> 16) & 0xff] ^ SUB_MIX[2][(s0 >>> 8) & 0xff] ^ SUB_MIX[3][s1 & 0xff] ^ keySchedule[ksRow++]
49200 t3 = SUB_MIX[0][s3 >>> 24] ^ SUB_MIX[1][(s0 >>> 16) & 0xff] ^ SUB_MIX[2][(s1 >>> 8) & 0xff] ^ SUB_MIX[3][s2 & 0xff] ^ keySchedule[ksRow++]
49201 s0 = t0
49202 s1 = t1
49203 s2 = t2
49204 s3 = t3
49205 }
49206 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
49207 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
49208 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
49209 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
49210 return [
49211 fixup_uint32(t0),
49212 fixup_uint32(t1),
49213 fixup_uint32(t2),
49214 fixup_uint32(t3)
49215 ]
49216 }
49217
49218 exports.AES = AES
49219
49220 }).call(this,require("buffer").Buffer)
49221 },{"buffer":47}],21:[function(require,module,exports){
49222 (function (Buffer){
49223 var aes = require('./aes')
49224 var Transform = require('cipher-base')
49225 var inherits = require('inherits')
49226 var GHASH = require('./ghash')
49227 var xor = require('buffer-xor')
49228 inherits(StreamCipher, Transform)
49229 module.exports = StreamCipher
49230
49231 function StreamCipher (mode, key, iv, decrypt) {
49232 if (!(this instanceof StreamCipher)) {
49233 return new StreamCipher(mode, key, iv)
49234 }
49235 Transform.call(this)
49236 this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])])
49237 iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])])
49238 this._cipher = new aes.AES(key)
49239 this._prev = new Buffer(iv.length)
49240 this._cache = new Buffer('')
49241 this._secCache = new Buffer('')
49242 this._decrypt = decrypt
49243 this._alen = 0
49244 this._len = 0
49245 iv.copy(this._prev)
49246 this._mode = mode
49247 var h = new Buffer(4)
49248 h.fill(0)
49249 this._ghash = new GHASH(this._cipher.encryptBlock(h))
49250 this._authTag = null
49251 this._called = false
49252 }
49253 StreamCipher.prototype._update = function (chunk) {
49254 if (!this._called && this._alen) {
49255 var rump = 16 - (this._alen % 16)
49256 if (rump < 16) {
49257 rump = new Buffer(rump)
49258 rump.fill(0)
49259 this._ghash.update(rump)
49260 }
49261 }
49262 this._called = true
49263 var out = this._mode.encrypt(this, chunk)
49264 if (this._decrypt) {
49265 this._ghash.update(chunk)
49266 } else {
49267 this._ghash.update(out)
49268 }
49269 this._len += chunk.length
49270 return out
49271 }
49272 StreamCipher.prototype._final = function () {
49273 if (this._decrypt && !this._authTag) {
49274 throw new Error('Unsupported state or unable to authenticate data')
49275 }
49276 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
49277 if (this._decrypt) {
49278 if (xorTest(tag, this._authTag)) {
49279 throw new Error('Unsupported state or unable to authenticate data')
49280 }
49281 } else {
49282 this._authTag = tag
49283 }
49284 this._cipher.scrub()
49285 }
49286 StreamCipher.prototype.getAuthTag = function getAuthTag () {
49287 if (!this._decrypt && Buffer.isBuffer(this._authTag)) {
49288 return this._authTag
49289 } else {
49290 throw new Error('Attempting to get auth tag in unsupported state')
49291 }
49292 }
49293 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
49294 if (this._decrypt) {
49295 this._authTag = tag
49296 } else {
49297 throw new Error('Attempting to set auth tag in unsupported state')
49298 }
49299 }
49300 StreamCipher.prototype.setAAD = function setAAD (buf) {
49301 if (!this._called) {
49302 this._ghash.update(buf)
49303 this._alen += buf.length
49304 } else {
49305 throw new Error('Attempting to set AAD in unsupported state')
49306 }
49307 }
49308 function xorTest (a, b) {
49309 var out = 0
49310 if (a.length !== b.length) {
49311 out++
49312 }
49313 var len = Math.min(a.length, b.length)
49314 var i = -1
49315 while (++i < len) {
49316 out += (a[i] ^ b[i])
49317 }
49318 return out
49319 }
49320
49321 }).call(this,require("buffer").Buffer)
49322 },{"./aes":20,"./ghash":25,"buffer":47,"buffer-xor":46,"cipher-base":48,"inherits":95}],22:[function(require,module,exports){
49323 var ciphers = require('./encrypter')
49324 exports.createCipher = exports.Cipher = ciphers.createCipher
49325 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
49326 var deciphers = require('./decrypter')
49327 exports.createDecipher = exports.Decipher = deciphers.createDecipher
49328 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
49329 var modes = require('./modes')
49330 function getCiphers () {
49331 return Object.keys(modes)
49332 }
49333 exports.listCiphers = exports.getCiphers = getCiphers
49334
49335 },{"./decrypter":23,"./encrypter":24,"./modes":26}],23:[function(require,module,exports){
49336 (function (Buffer){
49337 var aes = require('./aes')
49338 var Transform = require('cipher-base')
49339 var inherits = require('inherits')
49340 var modes = require('./modes')
49341 var StreamCipher = require('./streamCipher')
49342 var AuthCipher = require('./authCipher')
49343 var ebtk = require('evp_bytestokey')
49344
49345 inherits(Decipher, Transform)
49346 function Decipher (mode, key, iv) {
49347 if (!(this instanceof Decipher)) {
49348 return new Decipher(mode, key, iv)
49349 }
49350 Transform.call(this)
49351 this._cache = new Splitter()
49352 this._last = void 0
49353 this._cipher = new aes.AES(key)
49354 this._prev = new Buffer(iv.length)
49355 iv.copy(this._prev)
49356 this._mode = mode
49357 this._autopadding = true
49358 }
49359 Decipher.prototype._update = function (data) {
49360 this._cache.add(data)
49361 var chunk
49362 var thing
49363 var out = []
49364 while ((chunk = this._cache.get(this._autopadding))) {
49365 thing = this._mode.decrypt(this, chunk)
49366 out.push(thing)
49367 }
49368 return Buffer.concat(out)
49369 }
49370 Decipher.prototype._final = function () {
49371 var chunk = this._cache.flush()
49372 if (this._autopadding) {
49373 return unpad(this._mode.decrypt(this, chunk))
49374 } else if (chunk) {
49375 throw new Error('data not multiple of block length')
49376 }
49377 }
49378 Decipher.prototype.setAutoPadding = function (setTo) {
49379 this._autopadding = !!setTo
49380 return this
49381 }
49382 function Splitter () {
49383 if (!(this instanceof Splitter)) {
49384 return new Splitter()
49385 }
49386 this.cache = new Buffer('')
49387 }
49388 Splitter.prototype.add = function (data) {
49389 this.cache = Buffer.concat([this.cache, data])
49390 }
49391
49392 Splitter.prototype.get = function (autoPadding) {
49393 var out
49394 if (autoPadding) {
49395 if (this.cache.length > 16) {
49396 out = this.cache.slice(0, 16)
49397 this.cache = this.cache.slice(16)
49398 return out
49399 }
49400 } else {
49401 if (this.cache.length >= 16) {
49402 out = this.cache.slice(0, 16)
49403 this.cache = this.cache.slice(16)
49404 return out
49405 }
49406 }
49407 return null
49408 }
49409 Splitter.prototype.flush = function () {
49410 if (this.cache.length) {
49411 return this.cache
49412 }
49413 }
49414 function unpad (last) {
49415 var padded = last[15]
49416 var i = -1
49417 while (++i < padded) {
49418 if (last[(i + (16 - padded))] !== padded) {
49419 throw new Error('unable to decrypt data')
49420 }
49421 }
49422 if (padded === 16) {
49423 return
49424 }
49425 return last.slice(0, 16 - padded)
49426 }
49427
49428 var modelist = {
49429 ECB: require('./modes/ecb'),
49430 CBC: require('./modes/cbc'),
49431 CFB: require('./modes/cfb'),
49432 CFB8: require('./modes/cfb8'),
49433 CFB1: require('./modes/cfb1'),
49434 OFB: require('./modes/ofb'),
49435 CTR: require('./modes/ctr'),
49436 GCM: require('./modes/ctr')
49437 }
49438
49439 function createDecipheriv (suite, password, iv) {
49440 var config = modes[suite.toLowerCase()]
49441 if (!config) {
49442 throw new TypeError('invalid suite type')
49443 }
49444 if (typeof iv === 'string') {
49445 iv = new Buffer(iv)
49446 }
49447 if (typeof password === 'string') {
49448 password = new Buffer(password)
49449 }
49450 if (password.length !== config.key / 8) {
49451 throw new TypeError('invalid key length ' + password.length)
49452 }
49453 if (iv.length !== config.iv) {
49454 throw new TypeError('invalid iv length ' + iv.length)
49455 }
49456 if (config.type === 'stream') {
49457 return new StreamCipher(modelist[config.mode], password, iv, true)
49458 } else if (config.type === 'auth') {
49459 return new AuthCipher(modelist[config.mode], password, iv, true)
49460 }
49461 return new Decipher(modelist[config.mode], password, iv)
49462 }
49463
49464 function createDecipher (suite, password) {
49465 var config = modes[suite.toLowerCase()]
49466 if (!config) {
49467 throw new TypeError('invalid suite type')
49468 }
49469 var keys = ebtk(password, false, config.key, config.iv)
49470 return createDecipheriv(suite, keys.key, keys.iv)
49471 }
49472 exports.createDecipher = createDecipher
49473 exports.createDecipheriv = createDecipheriv
49474
49475 }).call(this,require("buffer").Buffer)
49476 },{"./aes":20,"./authCipher":21,"./modes":26,"./modes/cbc":27,"./modes/cfb":28,"./modes/cfb1":29,"./modes/cfb8":30,"./modes/ctr":31,"./modes/ecb":32,"./modes/ofb":33,"./streamCipher":34,"buffer":47,"cipher-base":48,"evp_bytestokey":84,"inherits":95}],24:[function(require,module,exports){
49477 (function (Buffer){
49478 var aes = require('./aes')
49479 var Transform = require('cipher-base')
49480 var inherits = require('inherits')
49481 var modes = require('./modes')
49482 var ebtk = require('evp_bytestokey')
49483 var StreamCipher = require('./streamCipher')
49484 var AuthCipher = require('./authCipher')
49485 inherits(Cipher, Transform)
49486 function Cipher (mode, key, iv) {
49487 if (!(this instanceof Cipher)) {
49488 return new Cipher(mode, key, iv)
49489 }
49490 Transform.call(this)
49491 this._cache = new Splitter()
49492 this._cipher = new aes.AES(key)
49493 this._prev = new Buffer(iv.length)
49494 iv.copy(this._prev)
49495 this._mode = mode
49496 this._autopadding = true
49497 }
49498 Cipher.prototype._update = function (data) {
49499 this._cache.add(data)
49500 var chunk
49501 var thing
49502 var out = []
49503 while ((chunk = this._cache.get())) {
49504 thing = this._mode.encrypt(this, chunk)
49505 out.push(thing)
49506 }
49507 return Buffer.concat(out)
49508 }
49509 Cipher.prototype._final = function () {
49510 var chunk = this._cache.flush()
49511 if (this._autopadding) {
49512 chunk = this._mode.encrypt(this, chunk)
49513 this._cipher.scrub()
49514 return chunk
49515 } else if (chunk.toString('hex') !== '10101010101010101010101010101010') {
49516 this._cipher.scrub()
49517 throw new Error('data not multiple of block length')
49518 }
49519 }
49520 Cipher.prototype.setAutoPadding = function (setTo) {
49521 this._autopadding = !!setTo
49522 return this
49523 }
49524
49525 function Splitter () {
49526 if (!(this instanceof Splitter)) {
49527 return new Splitter()
49528 }
49529 this.cache = new Buffer('')
49530 }
49531 Splitter.prototype.add = function (data) {
49532 this.cache = Buffer.concat([this.cache, data])
49533 }
49534
49535 Splitter.prototype.get = function () {
49536 if (this.cache.length > 15) {
49537 var out = this.cache.slice(0, 16)
49538 this.cache = this.cache.slice(16)
49539 return out
49540 }
49541 return null
49542 }
49543 Splitter.prototype.flush = function () {
49544 var len = 16 - this.cache.length
49545 var padBuff = new Buffer(len)
49546
49547 var i = -1
49548 while (++i < len) {
49549 padBuff.writeUInt8(len, i)
49550 }
49551 var out = Buffer.concat([this.cache, padBuff])
49552 return out
49553 }
49554 var modelist = {
49555 ECB: require('./modes/ecb'),
49556 CBC: require('./modes/cbc'),
49557 CFB: require('./modes/cfb'),
49558 CFB8: require('./modes/cfb8'),
49559 CFB1: require('./modes/cfb1'),
49560 OFB: require('./modes/ofb'),
49561 CTR: require('./modes/ctr'),
49562 GCM: require('./modes/ctr')
49563 }
49564
49565 function createCipheriv (suite, password, iv) {
49566 var config = modes[suite.toLowerCase()]
49567 if (!config) {
49568 throw new TypeError('invalid suite type')
49569 }
49570 if (typeof iv === 'string') {
49571 iv = new Buffer(iv)
49572 }
49573 if (typeof password === 'string') {
49574 password = new Buffer(password)
49575 }
49576 if (password.length !== config.key / 8) {
49577 throw new TypeError('invalid key length ' + password.length)
49578 }
49579 if (iv.length !== config.iv) {
49580 throw new TypeError('invalid iv length ' + iv.length)
49581 }
49582 if (config.type === 'stream') {
49583 return new StreamCipher(modelist[config.mode], password, iv)
49584 } else if (config.type === 'auth') {
49585 return new AuthCipher(modelist[config.mode], password, iv)
49586 }
49587 return new Cipher(modelist[config.mode], password, iv)
49588 }
49589 function createCipher (suite, password) {
49590 var config = modes[suite.toLowerCase()]
49591 if (!config) {
49592 throw new TypeError('invalid suite type')
49593 }
49594 var keys = ebtk(password, false, config.key, config.iv)
49595 return createCipheriv(suite, keys.key, keys.iv)
49596 }
49597
49598 exports.createCipheriv = createCipheriv
49599 exports.createCipher = createCipher
49600
49601 }).call(this,require("buffer").Buffer)
49602 },{"./aes":20,"./authCipher":21,"./modes":26,"./modes/cbc":27,"./modes/cfb":28,"./modes/cfb1":29,"./modes/cfb8":30,"./modes/ctr":31,"./modes/ecb":32,"./modes/ofb":33,"./streamCipher":34,"buffer":47,"cipher-base":48,"evp_bytestokey":84,"inherits":95}],25:[function(require,module,exports){
49603 (function (Buffer){
49604 var zeros = new Buffer(16)
49605 zeros.fill(0)
49606 module.exports = GHASH
49607 function GHASH (key) {
49608 this.h = key
49609 this.state = new Buffer(16)
49610 this.state.fill(0)
49611 this.cache = new Buffer('')
49612 }
49613 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
49614 // by Juho Vähä-Herttua
49615 GHASH.prototype.ghash = function (block) {
49616 var i = -1
49617 while (++i < block.length) {
49618 this.state[i] ^= block[i]
49619 }
49620 this._multiply()
49621 }
49622
49623 GHASH.prototype._multiply = function () {
49624 var Vi = toArray(this.h)
49625 var Zi = [0, 0, 0, 0]
49626 var j, xi, lsb_Vi
49627 var i = -1
49628 while (++i < 128) {
49629 xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0
49630 if (xi) {
49631 // Z_i+1 = Z_i ^ V_i
49632 Zi = xor(Zi, Vi)
49633 }
49634
49635 // Store the value of LSB(V_i)
49636 lsb_Vi = (Vi[3] & 1) !== 0
49637
49638 // V_i+1 = V_i >> 1
49639 for (j = 3; j > 0; j--) {
49640 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
49641 }
49642 Vi[0] = Vi[0] >>> 1
49643
49644 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
49645 if (lsb_Vi) {
49646 Vi[0] = Vi[0] ^ (0xe1 << 24)
49647 }
49648 }
49649 this.state = fromArray(Zi)
49650 }
49651 GHASH.prototype.update = function (buf) {
49652 this.cache = Buffer.concat([this.cache, buf])
49653 var chunk
49654 while (this.cache.length >= 16) {
49655 chunk = this.cache.slice(0, 16)
49656 this.cache = this.cache.slice(16)
49657 this.ghash(chunk)
49658 }
49659 }
49660 GHASH.prototype.final = function (abl, bl) {
49661 if (this.cache.length) {
49662 this.ghash(Buffer.concat([this.cache, zeros], 16))
49663 }
49664 this.ghash(fromArray([
49665 0, abl,
49666 0, bl
49667 ]))
49668 return this.state
49669 }
49670
49671 function toArray (buf) {
49672 return [
49673 buf.readUInt32BE(0),
49674 buf.readUInt32BE(4),
49675 buf.readUInt32BE(8),
49676 buf.readUInt32BE(12)
49677 ]
49678 }
49679 function fromArray (out) {
49680 out = out.map(fixup_uint32)
49681 var buf = new Buffer(16)
49682 buf.writeUInt32BE(out[0], 0)
49683 buf.writeUInt32BE(out[1], 4)
49684 buf.writeUInt32BE(out[2], 8)
49685 buf.writeUInt32BE(out[3], 12)
49686 return buf
49687 }
49688 var uint_max = Math.pow(2, 32)
49689 function fixup_uint32 (x) {
49690 var ret, x_pos
49691 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
49692 return ret
49693 }
49694 function xor (a, b) {
49695 return [
49696 a[0] ^ b[0],
49697 a[1] ^ b[1],
49698 a[2] ^ b[2],
49699 a[3] ^ b[3]
49700 ]
49701 }
49702
49703 }).call(this,require("buffer").Buffer)
49704 },{"buffer":47}],26:[function(require,module,exports){
49705 exports['aes-128-ecb'] = {
49706 cipher: 'AES',
49707 key: 128,
49708 iv: 0,
49709 mode: 'ECB',
49710 type: 'block'
49711 }
49712 exports['aes-192-ecb'] = {
49713 cipher: 'AES',
49714 key: 192,
49715 iv: 0,
49716 mode: 'ECB',
49717 type: 'block'
49718 }
49719 exports['aes-256-ecb'] = {
49720 cipher: 'AES',
49721 key: 256,
49722 iv: 0,
49723 mode: 'ECB',
49724 type: 'block'
49725 }
49726 exports['aes-128-cbc'] = {
49727 cipher: 'AES',
49728 key: 128,
49729 iv: 16,
49730 mode: 'CBC',
49731 type: 'block'
49732 }
49733 exports['aes-192-cbc'] = {
49734 cipher: 'AES',
49735 key: 192,
49736 iv: 16,
49737 mode: 'CBC',
49738 type: 'block'
49739 }
49740 exports['aes-256-cbc'] = {
49741 cipher: 'AES',
49742 key: 256,
49743 iv: 16,
49744 mode: 'CBC',
49745 type: 'block'
49746 }
49747 exports['aes128'] = exports['aes-128-cbc']
49748 exports['aes192'] = exports['aes-192-cbc']
49749 exports['aes256'] = exports['aes-256-cbc']
49750 exports['aes-128-cfb'] = {
49751 cipher: 'AES',
49752 key: 128,
49753 iv: 16,
49754 mode: 'CFB',
49755 type: 'stream'
49756 }
49757 exports['aes-192-cfb'] = {
49758 cipher: 'AES',
49759 key: 192,
49760 iv: 16,
49761 mode: 'CFB',
49762 type: 'stream'
49763 }
49764 exports['aes-256-cfb'] = {
49765 cipher: 'AES',
49766 key: 256,
49767 iv: 16,
49768 mode: 'CFB',
49769 type: 'stream'
49770 }
49771 exports['aes-128-cfb8'] = {
49772 cipher: 'AES',
49773 key: 128,
49774 iv: 16,
49775 mode: 'CFB8',
49776 type: 'stream'
49777 }
49778 exports['aes-192-cfb8'] = {
49779 cipher: 'AES',
49780 key: 192,
49781 iv: 16,
49782 mode: 'CFB8',
49783 type: 'stream'
49784 }
49785 exports['aes-256-cfb8'] = {
49786 cipher: 'AES',
49787 key: 256,
49788 iv: 16,
49789 mode: 'CFB8',
49790 type: 'stream'
49791 }
49792 exports['aes-128-cfb1'] = {
49793 cipher: 'AES',
49794 key: 128,
49795 iv: 16,
49796 mode: 'CFB1',
49797 type: 'stream'
49798 }
49799 exports['aes-192-cfb1'] = {
49800 cipher: 'AES',
49801 key: 192,
49802 iv: 16,
49803 mode: 'CFB1',
49804 type: 'stream'
49805 }
49806 exports['aes-256-cfb1'] = {
49807 cipher: 'AES',
49808 key: 256,
49809 iv: 16,
49810 mode: 'CFB1',
49811 type: 'stream'
49812 }
49813 exports['aes-128-ofb'] = {
49814 cipher: 'AES',
49815 key: 128,
49816 iv: 16,
49817 mode: 'OFB',
49818 type: 'stream'
49819 }
49820 exports['aes-192-ofb'] = {
49821 cipher: 'AES',
49822 key: 192,
49823 iv: 16,
49824 mode: 'OFB',
49825 type: 'stream'
49826 }
49827 exports['aes-256-ofb'] = {
49828 cipher: 'AES',
49829 key: 256,
49830 iv: 16,
49831 mode: 'OFB',
49832 type: 'stream'
49833 }
49834 exports['aes-128-ctr'] = {
49835 cipher: 'AES',
49836 key: 128,
49837 iv: 16,
49838 mode: 'CTR',
49839 type: 'stream'
49840 }
49841 exports['aes-192-ctr'] = {
49842 cipher: 'AES',
49843 key: 192,
49844 iv: 16,
49845 mode: 'CTR',
49846 type: 'stream'
49847 }
49848 exports['aes-256-ctr'] = {
49849 cipher: 'AES',
49850 key: 256,
49851 iv: 16,
49852 mode: 'CTR',
49853 type: 'stream'
49854 }
49855 exports['aes-128-gcm'] = {
49856 cipher: 'AES',
49857 key: 128,
49858 iv: 12,
49859 mode: 'GCM',
49860 type: 'auth'
49861 }
49862 exports['aes-192-gcm'] = {
49863 cipher: 'AES',
49864 key: 192,
49865 iv: 12,
49866 mode: 'GCM',
49867 type: 'auth'
49868 }
49869 exports['aes-256-gcm'] = {
49870 cipher: 'AES',
49871 key: 256,
49872 iv: 12,
49873 mode: 'GCM',
49874 type: 'auth'
49875 }
49876
49877 },{}],27:[function(require,module,exports){
49878 var xor = require('buffer-xor')
49879
49880 exports.encrypt = function (self, block) {
49881 var data = xor(block, self._prev)
49882
49883 self._prev = self._cipher.encryptBlock(data)
49884 return self._prev
49885 }
49886
49887 exports.decrypt = function (self, block) {
49888 var pad = self._prev
49889
49890 self._prev = block
49891 var out = self._cipher.decryptBlock(block)
49892
49893 return xor(out, pad)
49894 }
49895
49896 },{"buffer-xor":46}],28:[function(require,module,exports){
49897 (function (Buffer){
49898 var xor = require('buffer-xor')
49899
49900 exports.encrypt = function (self, data, decrypt) {
49901 var out = new Buffer('')
49902 var len
49903
49904 while (data.length) {
49905 if (self._cache.length === 0) {
49906 self._cache = self._cipher.encryptBlock(self._prev)
49907 self._prev = new Buffer('')
49908 }
49909
49910 if (self._cache.length <= data.length) {
49911 len = self._cache.length
49912 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
49913 data = data.slice(len)
49914 } else {
49915 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
49916 break
49917 }
49918 }
49919
49920 return out
49921 }
49922 function encryptStart (self, data, decrypt) {
49923 var len = data.length
49924 var out = xor(data, self._cache)
49925 self._cache = self._cache.slice(len)
49926 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
49927 return out
49928 }
49929
49930 }).call(this,require("buffer").Buffer)
49931 },{"buffer":47,"buffer-xor":46}],29:[function(require,module,exports){
49932 (function (Buffer){
49933 function encryptByte (self, byteParam, decrypt) {
49934 var pad
49935 var i = -1
49936 var len = 8
49937 var out = 0
49938 var bit, value
49939 while (++i < len) {
49940 pad = self._cipher.encryptBlock(self._prev)
49941 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
49942 value = pad[0] ^ bit
49943 out += ((value & 0x80) >> (i % 8))
49944 self._prev = shiftIn(self._prev, decrypt ? bit : value)
49945 }
49946 return out
49947 }
49948 exports.encrypt = function (self, chunk, decrypt) {
49949 var len = chunk.length
49950 var out = new Buffer(len)
49951 var i = -1
49952 while (++i < len) {
49953 out[i] = encryptByte(self, chunk[i], decrypt)
49954 }
49955 return out
49956 }
49957 function shiftIn (buffer, value) {
49958 var len = buffer.length
49959 var i = -1
49960 var out = new Buffer(buffer.length)
49961 buffer = Buffer.concat([buffer, new Buffer([value])])
49962 while (++i < len) {
49963 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
49964 }
49965 return out
49966 }
49967
49968 }).call(this,require("buffer").Buffer)
49969 },{"buffer":47}],30:[function(require,module,exports){
49970 (function (Buffer){
49971 function encryptByte (self, byteParam, decrypt) {
49972 var pad = self._cipher.encryptBlock(self._prev)
49973 var out = pad[0] ^ byteParam
49974 self._prev = Buffer.concat([self._prev.slice(1), new Buffer([decrypt ? byteParam : out])])
49975 return out
49976 }
49977 exports.encrypt = function (self, chunk, decrypt) {
49978 var len = chunk.length
49979 var out = new Buffer(len)
49980 var i = -1
49981 while (++i < len) {
49982 out[i] = encryptByte(self, chunk[i], decrypt)
49983 }
49984 return out
49985 }
49986
49987 }).call(this,require("buffer").Buffer)
49988 },{"buffer":47}],31:[function(require,module,exports){
49989 (function (Buffer){
49990 var xor = require('buffer-xor')
49991
49992 function incr32 (iv) {
49993 var len = iv.length
49994 var item
49995 while (len--) {
49996 item = iv.readUInt8(len)
49997 if (item === 255) {
49998 iv.writeUInt8(0, len)
49999 } else {
50000 item++
50001 iv.writeUInt8(item, len)
50002 break
50003 }
50004 }
50005 }
50006
50007 function getBlock (self) {
50008 var out = self._cipher.encryptBlock(self._prev)
50009 incr32(self._prev)
50010 return out
50011 }
50012
50013 exports.encrypt = function (self, chunk) {
50014 while (self._cache.length < chunk.length) {
50015 self._cache = Buffer.concat([self._cache, getBlock(self)])
50016 }
50017 var pad = self._cache.slice(0, chunk.length)
50018 self._cache = self._cache.slice(chunk.length)
50019 return xor(chunk, pad)
50020 }
50021
50022 }).call(this,require("buffer").Buffer)
50023 },{"buffer":47,"buffer-xor":46}],32:[function(require,module,exports){
50024 exports.encrypt = function (self, block) {
50025 return self._cipher.encryptBlock(block)
50026 }
50027 exports.decrypt = function (self, block) {
50028 return self._cipher.decryptBlock(block)
50029 }
50030
50031 },{}],33:[function(require,module,exports){
50032 (function (Buffer){
50033 var xor = require('buffer-xor')
50034
50035 function getBlock (self) {
50036 self._prev = self._cipher.encryptBlock(self._prev)
50037 return self._prev
50038 }
50039
50040 exports.encrypt = function (self, chunk) {
50041 while (self._cache.length < chunk.length) {
50042 self._cache = Buffer.concat([self._cache, getBlock(self)])
50043 }
50044
50045 var pad = self._cache.slice(0, chunk.length)
50046 self._cache = self._cache.slice(chunk.length)
50047 return xor(chunk, pad)
50048 }
50049
50050 }).call(this,require("buffer").Buffer)
50051 },{"buffer":47,"buffer-xor":46}],34:[function(require,module,exports){
50052 (function (Buffer){
50053 var aes = require('./aes')
50054 var Transform = require('cipher-base')
50055 var inherits = require('inherits')
50056
50057 inherits(StreamCipher, Transform)
50058 module.exports = StreamCipher
50059 function StreamCipher (mode, key, iv, decrypt) {
50060 if (!(this instanceof StreamCipher)) {
50061 return new StreamCipher(mode, key, iv)
50062 }
50063 Transform.call(this)
50064 this._cipher = new aes.AES(key)
50065 this._prev = new Buffer(iv.length)
50066 this._cache = new Buffer('')
50067 this._secCache = new Buffer('')
50068 this._decrypt = decrypt
50069 iv.copy(this._prev)
50070 this._mode = mode
50071 }
50072 StreamCipher.prototype._update = function (chunk) {
50073 return this._mode.encrypt(this, chunk, this._decrypt)
50074 }
50075 StreamCipher.prototype._final = function () {
50076 this._cipher.scrub()
50077 }
50078
50079 }).call(this,require("buffer").Buffer)
50080 },{"./aes":20,"buffer":47,"cipher-base":48,"inherits":95}],35:[function(require,module,exports){
50081 var ebtk = require('evp_bytestokey')
50082 var aes = require('browserify-aes/browser')
50083 var DES = require('browserify-des')
50084 var desModes = require('browserify-des/modes')
50085 var aesModes = require('browserify-aes/modes')
50086 function createCipher (suite, password) {
50087 var keyLen, ivLen
50088 suite = suite.toLowerCase()
50089 if (aesModes[suite]) {
50090 keyLen = aesModes[suite].key
50091 ivLen = aesModes[suite].iv
50092 } else if (desModes[suite]) {
50093 keyLen = desModes[suite].key * 8
50094 ivLen = desModes[suite].iv
50095 } else {
50096 throw new TypeError('invalid suite type')
50097 }
50098 var keys = ebtk(password, false, keyLen, ivLen)
50099 return createCipheriv(suite, keys.key, keys.iv)
50100 }
50101 function createDecipher (suite, password) {
50102 var keyLen, ivLen
50103 suite = suite.toLowerCase()
50104 if (aesModes[suite]) {
50105 keyLen = aesModes[suite].key
50106 ivLen = aesModes[suite].iv
50107 } else if (desModes[suite]) {
50108 keyLen = desModes[suite].key * 8
50109 ivLen = desModes[suite].iv
50110 } else {
50111 throw new TypeError('invalid suite type')
50112 }
50113 var keys = ebtk(password, false, keyLen, ivLen)
50114 return createDecipheriv(suite, keys.key, keys.iv)
50115 }
50116
50117 function createCipheriv (suite, key, iv) {
50118 suite = suite.toLowerCase()
50119 if (aesModes[suite]) {
50120 return aes.createCipheriv(suite, key, iv)
50121 } else if (desModes[suite]) {
50122 return new DES({
50123 key: key,
50124 iv: iv,
50125 mode: suite
50126 })
50127 } else {
50128 throw new TypeError('invalid suite type')
50129 }
50130 }
50131 function createDecipheriv (suite, key, iv) {
50132 suite = suite.toLowerCase()
50133 if (aesModes[suite]) {
50134 return aes.createDecipheriv(suite, key, iv)
50135 } else if (desModes[suite]) {
50136 return new DES({
50137 key: key,
50138 iv: iv,
50139 mode: suite,
50140 decrypt: true
50141 })
50142 } else {
50143 throw new TypeError('invalid suite type')
50144 }
50145 }
50146 exports.createCipher = exports.Cipher = createCipher
50147 exports.createCipheriv = exports.Cipheriv = createCipheriv
50148 exports.createDecipher = exports.Decipher = createDecipher
50149 exports.createDecipheriv = exports.Decipheriv = createDecipheriv
50150 function getCiphers () {
50151 return Object.keys(desModes).concat(aes.getCiphers())
50152 }
50153 exports.listCiphers = exports.getCiphers = getCiphers
50154
50155 },{"browserify-aes/browser":22,"browserify-aes/modes":26,"browserify-des":36,"browserify-des/modes":37,"evp_bytestokey":84}],36:[function(require,module,exports){
50156 (function (Buffer){
50157 var CipherBase = require('cipher-base')
50158 var des = require('des.js')
50159 var inherits = require('inherits')
50160
50161 var modes = {
50162 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
50163 'des-ede3': des.EDE,
50164 'des-ede-cbc': des.CBC.instantiate(des.EDE),
50165 'des-ede': des.EDE,
50166 'des-cbc': des.CBC.instantiate(des.DES),
50167 'des-ecb': des.DES
50168 }
50169 modes.des = modes['des-cbc']
50170 modes.des3 = modes['des-ede3-cbc']
50171 module.exports = DES
50172 inherits(DES, CipherBase)
50173 function DES (opts) {
50174 CipherBase.call(this)
50175 var modeName = opts.mode.toLowerCase()
50176 var mode = modes[modeName]
50177 var type
50178 if (opts.decrypt) {
50179 type = 'decrypt'
50180 } else {
50181 type = 'encrypt'
50182 }
50183 var key = opts.key
50184 if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
50185 key = Buffer.concat([key, key.slice(0, 8)])
50186 }
50187 var iv = opts.iv
50188 this._des = mode.create({
50189 key: key,
50190 iv: iv,
50191 type: type
50192 })
50193 }
50194 DES.prototype._update = function (data) {
50195 return new Buffer(this._des.update(data))
50196 }
50197 DES.prototype._final = function () {
50198 return new Buffer(this._des.final())
50199 }
50200
50201 }).call(this,require("buffer").Buffer)
50202 },{"buffer":47,"cipher-base":48,"des.js":57,"inherits":95}],37:[function(require,module,exports){
50203 exports['des-ecb'] = {
50204 key: 8,
50205 iv: 0
50206 }
50207 exports['des-cbc'] = exports.des = {
50208 key: 8,
50209 iv: 8
50210 }
50211 exports['des-ede3-cbc'] = exports.des3 = {
50212 key: 24,
50213 iv: 8
50214 }
50215 exports['des-ede3'] = {
50216 key: 24,
50217 iv: 0
50218 }
50219 exports['des-ede-cbc'] = {
50220 key: 16,
50221 iv: 8
50222 }
50223 exports['des-ede'] = {
50224 key: 16,
50225 iv: 0
50226 }
50227
50228 },{}],38:[function(require,module,exports){
50229 (function (Buffer){
50230 var bn = require('bn.js');
50231 var randomBytes = require('randombytes');
50232 module.exports = crt;
50233 function blind(priv) {
50234 var r = getr(priv);
50235 var blinder = r.toRed(bn.mont(priv.modulus))
50236 .redPow(new bn(priv.publicExponent)).fromRed();
50237 return {
50238 blinder: blinder,
50239 unblinder:r.invm(priv.modulus)
50240 };
50241 }
50242 function crt(msg, priv) {
50243 var blinds = blind(priv);
50244 var len = priv.modulus.byteLength();
50245 var mod = bn.mont(priv.modulus);
50246 var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
50247 var c1 = blinded.toRed(bn.mont(priv.prime1));
50248 var c2 = blinded.toRed(bn.mont(priv.prime2));
50249 var qinv = priv.coefficient;
50250 var p = priv.prime1;
50251 var q = priv.prime2;
50252 var m1 = c1.redPow(priv.exponent1);
50253 var m2 = c2.redPow(priv.exponent2);
50254 m1 = m1.fromRed();
50255 m2 = m2.fromRed();
50256 var h = m1.isub(m2).imul(qinv).umod(p);
50257 h.imul(q);
50258 m2.iadd(h);
50259 return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
50260 }
50261 crt.getr = getr;
50262 function getr(priv) {
50263 var len = priv.modulus.byteLength();
50264 var r = new bn(randomBytes(len));
50265 while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
50266 r = new bn(randomBytes(len));
50267 }
50268 return r;
50269 }
50270
50271 }).call(this,require("buffer").Buffer)
50272 },{"bn.js":17,"buffer":47,"randombytes":119}],39:[function(require,module,exports){
50273 module.exports = require('./browser/algorithms.json')
50274
50275 },{"./browser/algorithms.json":40}],40:[function(require,module,exports){
50276 module.exports={
50277 "sha224WithRSAEncryption": {
50278 "sign": "rsa",
50279 "hash": "sha224",
50280 "id": "302d300d06096086480165030402040500041c"
50281 },
50282 "RSA-SHA224": {
50283 "sign": "ecdsa/rsa",
50284 "hash": "sha224",
50285 "id": "302d300d06096086480165030402040500041c"
50286 },
50287 "sha256WithRSAEncryption": {
50288 "sign": "rsa",
50289 "hash": "sha256",
50290 "id": "3031300d060960864801650304020105000420"
50291 },
50292 "RSA-SHA256": {
50293 "sign": "ecdsa/rsa",
50294 "hash": "sha256",
50295 "id": "3031300d060960864801650304020105000420"
50296 },
50297 "sha384WithRSAEncryption": {
50298 "sign": "rsa",
50299 "hash": "sha384",
50300 "id": "3041300d060960864801650304020205000430"
50301 },
50302 "RSA-SHA384": {
50303 "sign": "ecdsa/rsa",
50304 "hash": "sha384",
50305 "id": "3041300d060960864801650304020205000430"
50306 },
50307 "sha512WithRSAEncryption": {
50308 "sign": "rsa",
50309 "hash": "sha512",
50310 "id": "3051300d060960864801650304020305000440"
50311 },
50312 "RSA-SHA512": {
50313 "sign": "ecdsa/rsa",
50314 "hash": "sha512",
50315 "id": "3051300d060960864801650304020305000440"
50316 },
50317 "RSA-SHA1": {
50318 "sign": "rsa",
50319 "hash": "sha1",
50320 "id": "3021300906052b0e03021a05000414"
50321 },
50322 "ecdsa-with-SHA1": {
50323 "sign": "ecdsa",
50324 "hash": "sha1",
50325 "id": ""
50326 },
50327 "sha256": {
50328 "sign": "ecdsa",
50329 "hash": "sha256",
50330 "id": ""
50331 },
50332 "sha224": {
50333 "sign": "ecdsa",
50334 "hash": "sha224",
50335 "id": ""
50336 },
50337 "sha384": {
50338 "sign": "ecdsa",
50339 "hash": "sha384",
50340 "id": ""
50341 },
50342 "sha512": {
50343 "sign": "ecdsa",
50344 "hash": "sha512",
50345 "id": ""
50346 },
50347 "DSA-SHA": {
50348 "sign": "dsa",
50349 "hash": "sha1",
50350 "id": ""
50351 },
50352 "DSA-SHA1": {
50353 "sign": "dsa",
50354 "hash": "sha1",
50355 "id": ""
50356 },
50357 "DSA": {
50358 "sign": "dsa",
50359 "hash": "sha1",
50360 "id": ""
50361 },
50362 "DSA-WITH-SHA224": {
50363 "sign": "dsa",
50364 "hash": "sha224",
50365 "id": ""
50366 },
50367 "DSA-SHA224": {
50368 "sign": "dsa",
50369 "hash": "sha224",
50370 "id": ""
50371 },
50372 "DSA-WITH-SHA256": {
50373 "sign": "dsa",
50374 "hash": "sha256",
50375 "id": ""
50376 },
50377 "DSA-SHA256": {
50378 "sign": "dsa",
50379 "hash": "sha256",
50380 "id": ""
50381 },
50382 "DSA-WITH-SHA384": {
50383 "sign": "dsa",
50384 "hash": "sha384",
50385 "id": ""
50386 },
50387 "DSA-SHA384": {
50388 "sign": "dsa",
50389 "hash": "sha384",
50390 "id": ""
50391 },
50392 "DSA-WITH-SHA512": {
50393 "sign": "dsa",
50394 "hash": "sha512",
50395 "id": ""
50396 },
50397 "DSA-SHA512": {
50398 "sign": "dsa",
50399 "hash": "sha512",
50400 "id": ""
50401 },
50402 "DSA-RIPEMD160": {
50403 "sign": "dsa",
50404 "hash": "rmd160",
50405 "id": ""
50406 },
50407 "ripemd160WithRSA": {
50408 "sign": "rsa",
50409 "hash": "rmd160",
50410 "id": "3021300906052b2403020105000414"
50411 },
50412 "RSA-RIPEMD160": {
50413 "sign": "rsa",
50414 "hash": "rmd160",
50415 "id": "3021300906052b2403020105000414"
50416 },
50417 "md5WithRSAEncryption": {
50418 "sign": "rsa",
50419 "hash": "md5",
50420 "id": "3020300c06082a864886f70d020505000410"
50421 },
50422 "RSA-MD5": {
50423 "sign": "rsa",
50424 "hash": "md5",
50425 "id": "3020300c06082a864886f70d020505000410"
50426 }
50427 }
50428
50429 },{}],41:[function(require,module,exports){
50430 module.exports={
50431 "1.3.132.0.10": "secp256k1",
50432 "1.3.132.0.33": "p224",
50433 "1.2.840.10045.3.1.1": "p192",
50434 "1.2.840.10045.3.1.7": "p256",
50435 "1.3.132.0.34": "p384",
50436 "1.3.132.0.35": "p521"
50437 }
50438
50439 },{}],42:[function(require,module,exports){
50440 (function (Buffer){
50441 var createHash = require('create-hash')
50442 var stream = require('stream')
50443 var inherits = require('inherits')
50444 var sign = require('./sign')
50445 var verify = require('./verify')
50446
50447 var algorithms = require('./algorithms.json')
50448 Object.keys(algorithms).forEach(function (key) {
50449 algorithms[key].id = new Buffer(algorithms[key].id, 'hex')
50450 algorithms[key.toLowerCase()] = algorithms[key]
50451 })
50452
50453 function Sign (algorithm) {
50454 stream.Writable.call(this)
50455
50456 var data = algorithms[algorithm]
50457 if (!data) throw new Error('Unknown message digest')
50458
50459 this._hashType = data.hash
50460 this._hash = createHash(data.hash)
50461 this._tag = data.id
50462 this._signType = data.sign
50463 }
50464 inherits(Sign, stream.Writable)
50465
50466 Sign.prototype._write = function _write (data, _, done) {
50467 this._hash.update(data)
50468 done()
50469 }
50470
50471 Sign.prototype.update = function update (data, enc) {
50472 if (typeof data === 'string') data = new Buffer(data, enc)
50473
50474 this._hash.update(data)
50475 return this
50476 }
50477
50478 Sign.prototype.sign = function signMethod (key, enc) {
50479 this.end()
50480 var hash = this._hash.digest()
50481 var sig = sign(hash, key, this._hashType, this._signType, this._tag)
50482
50483 return enc ? sig.toString(enc) : sig
50484 }
50485
50486 function Verify (algorithm) {
50487 stream.Writable.call(this)
50488
50489 var data = algorithms[algorithm]
50490 if (!data) throw new Error('Unknown message digest')
50491
50492 this._hash = createHash(data.hash)
50493 this._tag = data.id
50494 this._signType = data.sign
50495 }
50496 inherits(Verify, stream.Writable)
50497
50498 Verify.prototype._write = function _write (data, _, done) {
50499 this._hash.update(data)
50500 done()
50501 }
50502
50503 Verify.prototype.update = function update (data, enc) {
50504 if (typeof data === 'string') data = new Buffer(data, enc)
50505
50506 this._hash.update(data)
50507 return this
50508 }
50509
50510 Verify.prototype.verify = function verifyMethod (key, sig, enc) {
50511 if (typeof sig === 'string') sig = new Buffer(sig, enc)
50512
50513 this.end()
50514 var hash = this._hash.digest()
50515 return verify(sig, hash, key, this._signType, this._tag)
50516 }
50517
50518 function createSign (algorithm) {
50519 return new Sign(algorithm)
50520 }
50521
50522 function createVerify (algorithm) {
50523 return new Verify(algorithm)
50524 }
50525
50526 module.exports = {
50527 Sign: createSign,
50528 Verify: createVerify,
50529 createSign: createSign,
50530 createVerify: createVerify
50531 }
50532
50533 }).call(this,require("buffer").Buffer)
50534 },{"./algorithms.json":40,"./sign":43,"./verify":44,"buffer":47,"create-hash":51,"inherits":95,"stream":143}],43:[function(require,module,exports){
50535 (function (Buffer){
50536 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
50537 var createHmac = require('create-hmac')
50538 var crt = require('browserify-rsa')
50539 var EC = require('elliptic').ec
50540 var BN = require('bn.js')
50541 var parseKeys = require('parse-asn1')
50542 var curves = require('./curves.json')
50543
50544 function sign (hash, key, hashType, signType, tag) {
50545 var priv = parseKeys(key)
50546 if (priv.curve) {
50547 // rsa keys can be interpreted as ecdsa ones in openssl
50548 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
50549 return ecSign(hash, priv)
50550 } else if (priv.type === 'dsa') {
50551 if (signType !== 'dsa') throw new Error('wrong private key type')
50552 return dsaSign(hash, priv, hashType)
50553 } else {
50554 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
50555 }
50556 hash = Buffer.concat([tag, hash])
50557 var len = priv.modulus.byteLength()
50558 var pad = [ 0, 1 ]
50559 while (hash.length + pad.length + 1 < len) pad.push(0xff)
50560 pad.push(0x00)
50561 var i = -1
50562 while (++i < hash.length) pad.push(hash[i])
50563
50564 var out = crt(pad, priv)
50565 return out
50566 }
50567
50568 function ecSign (hash, priv) {
50569 var curveId = curves[priv.curve.join('.')]
50570 if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))
50571
50572 var curve = new EC(curveId)
50573 var key = curve.keyFromPrivate(priv.privateKey)
50574 var out = key.sign(hash)
50575
50576 return new Buffer(out.toDER())
50577 }
50578
50579 function dsaSign (hash, priv, algo) {
50580 var x = priv.params.priv_key
50581 var p = priv.params.p
50582 var q = priv.params.q
50583 var g = priv.params.g
50584 var r = new BN(0)
50585 var k
50586 var H = bits2int(hash, q).mod(q)
50587 var s = false
50588 var kv = getKey(x, q, hash, algo)
50589 while (s === false) {
50590 k = makeKey(q, kv, algo)
50591 r = makeR(g, k, p, q)
50592 s = k.invm(q).imul(H.add(x.mul(r))).mod(q)
50593 if (s.cmpn(0) === 0) {
50594 s = false
50595 r = new BN(0)
50596 }
50597 }
50598 return toDER(r, s)
50599 }
50600
50601 function toDER (r, s) {
50602 r = r.toArray()
50603 s = s.toArray()
50604
50605 // Pad values
50606 if (r[0] & 0x80) r = [ 0 ].concat(r)
50607 if (s[0] & 0x80) s = [ 0 ].concat(s)
50608
50609 var total = r.length + s.length + 4
50610 var res = [ 0x30, total, 0x02, r.length ]
50611 res = res.concat(r, [ 0x02, s.length ], s)
50612 return new Buffer(res)
50613 }
50614
50615 function getKey (x, q, hash, algo) {
50616 x = new Buffer(x.toArray())
50617 if (x.length < q.byteLength()) {
50618 var zeros = new Buffer(q.byteLength() - x.length)
50619 zeros.fill(0)
50620 x = Buffer.concat([ zeros, x ])
50621 }
50622 var hlen = hash.length
50623 var hbits = bits2octets(hash, q)
50624 var v = new Buffer(hlen)
50625 v.fill(1)
50626 var k = new Buffer(hlen)
50627 k.fill(0)
50628 k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()
50629 v = createHmac(algo, k).update(v).digest()
50630 k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()
50631 v = createHmac(algo, k).update(v).digest()
50632 return { k: k, v: v }
50633 }
50634
50635 function bits2int (obits, q) {
50636 var bits = new BN(obits)
50637 var shift = (obits.length << 3) - q.bitLength()
50638 if (shift > 0) bits.ishrn(shift)
50639 return bits
50640 }
50641
50642 function bits2octets (bits, q) {
50643 bits = bits2int(bits, q)
50644 bits = bits.mod(q)
50645 var out = new Buffer(bits.toArray())
50646 if (out.length < q.byteLength()) {
50647 var zeros = new Buffer(q.byteLength() - out.length)
50648 zeros.fill(0)
50649 out = Buffer.concat([ zeros, out ])
50650 }
50651 return out
50652 }
50653
50654 function makeKey (q, kv, algo) {
50655 var t
50656 var k
50657
50658 do {
50659 t = new Buffer(0)
50660
50661 while (t.length * 8 < q.bitLength()) {
50662 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
50663 t = Buffer.concat([ t, kv.v ])
50664 }
50665
50666 k = bits2int(t, q)
50667 kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()
50668 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
50669 } while (k.cmp(q) !== -1)
50670
50671 return k
50672 }
50673
50674 function makeR (g, k, p, q) {
50675 return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)
50676 }
50677
50678 module.exports = sign
50679 module.exports.getKey = getKey
50680 module.exports.makeKey = makeKey
50681
50682 }).call(this,require("buffer").Buffer)
50683 },{"./curves.json":41,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hmac":54,"elliptic":67,"parse-asn1":105}],44:[function(require,module,exports){
50684 (function (Buffer){
50685 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
50686 var BN = require('bn.js')
50687 var EC = require('elliptic').ec
50688 var parseKeys = require('parse-asn1')
50689 var curves = require('./curves.json')
50690
50691 function verify (sig, hash, key, signType, tag) {
50692 var pub = parseKeys(key)
50693 if (pub.type === 'ec') {
50694 // rsa keys can be interpreted as ecdsa ones in openssl
50695 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
50696 return ecVerify(sig, hash, pub)
50697 } else if (pub.type === 'dsa') {
50698 if (signType !== 'dsa') throw new Error('wrong public key type')
50699 return dsaVerify(sig, hash, pub)
50700 } else {
50701 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
50702 }
50703 hash = Buffer.concat([tag, hash])
50704 var len = pub.modulus.byteLength()
50705 var pad = [ 1 ]
50706 var padNum = 0
50707 while (hash.length + pad.length + 2 < len) {
50708 pad.push(0xff)
50709 padNum++
50710 }
50711 pad.push(0x00)
50712 var i = -1
50713 while (++i < hash.length) {
50714 pad.push(hash[i])
50715 }
50716 pad = new Buffer(pad)
50717 var red = BN.mont(pub.modulus)
50718 sig = new BN(sig).toRed(red)
50719
50720 sig = sig.redPow(new BN(pub.publicExponent))
50721 sig = new Buffer(sig.fromRed().toArray())
50722 var out = padNum < 8 ? 1 : 0
50723 len = Math.min(sig.length, pad.length)
50724 if (sig.length !== pad.length) out = 1
50725
50726 i = -1
50727 while (++i < len) out |= sig[i] ^ pad[i]
50728 return out === 0
50729 }
50730
50731 function ecVerify (sig, hash, pub) {
50732 var curveId = curves[pub.data.algorithm.curve.join('.')]
50733 if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))
50734
50735 var curve = new EC(curveId)
50736 var pubkey = pub.data.subjectPrivateKey.data
50737
50738 return curve.verify(hash, sig, pubkey)
50739 }
50740
50741 function dsaVerify (sig, hash, pub) {
50742 var p = pub.data.p
50743 var q = pub.data.q
50744 var g = pub.data.g
50745 var y = pub.data.pub_key
50746 var unpacked = parseKeys.signature.decode(sig, 'der')
50747 var s = unpacked.s
50748 var r = unpacked.r
50749 checkValue(s, q)
50750 checkValue(r, q)
50751 var montp = BN.mont(p)
50752 var w = s.invm(q)
50753 var v = g.toRed(montp)
50754 .redPow(new BN(hash).mul(w).mod(q))
50755 .fromRed()
50756 .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())
50757 .mod(p)
50758 .mod(q)
50759 return v.cmp(r) === 0
50760 }
50761
50762 function checkValue (b, q) {
50763 if (b.cmpn(0) <= 0) throw new Error('invalid sig')
50764 if (b.cmp(q) >= q) throw new Error('invalid sig')
50765 }
50766
50767 module.exports = verify
50768
50769 }).call(this,require("buffer").Buffer)
50770 },{"./curves.json":41,"bn.js":17,"buffer":47,"elliptic":67,"parse-asn1":105}],45:[function(require,module,exports){
50771 (function (global){
50772 'use strict';
50773
50774 var buffer = require('buffer');
50775 var Buffer = buffer.Buffer;
50776 var SlowBuffer = buffer.SlowBuffer;
50777 var MAX_LEN = buffer.kMaxLength || 2147483647;
50778 exports.alloc = function alloc(size, fill, encoding) {
50779 if (typeof Buffer.alloc === 'function') {
50780 return Buffer.alloc(size, fill, encoding);
50781 }
50782 if (typeof encoding === 'number') {
50783 throw new TypeError('encoding must not be number');
50784 }
50785 if (typeof size !== 'number') {
50786 throw new TypeError('size must be a number');
50787 }
50788 if (size > MAX_LEN) {
50789 throw new RangeError('size is too large');
50790 }
50791 var enc = encoding;
50792 var _fill = fill;
50793 if (_fill === undefined) {
50794 enc = undefined;
50795 _fill = 0;
50796 }
50797 var buf = new Buffer(size);
50798 if (typeof _fill === 'string') {
50799 var fillBuf = new Buffer(_fill, enc);
50800 var flen = fillBuf.length;
50801 var i = -1;
50802 while (++i < size) {
50803 buf[i] = fillBuf[i % flen];
50804 }
50805 } else {
50806 buf.fill(_fill);
50807 }
50808 return buf;
50809 }
50810 exports.allocUnsafe = function allocUnsafe(size) {
50811 if (typeof Buffer.allocUnsafe === 'function') {
50812 return Buffer.allocUnsafe(size);
50813 }
50814 if (typeof size !== 'number') {
50815 throw new TypeError('size must be a number');
50816 }
50817 if (size > MAX_LEN) {
50818 throw new RangeError('size is too large');
50819 }
50820 return new Buffer(size);
50821 }
50822 exports.from = function from(value, encodingOrOffset, length) {
50823 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
50824 return Buffer.from(value, encodingOrOffset, length);
50825 }
50826 if (typeof value === 'number') {
50827 throw new TypeError('"value" argument must not be a number');
50828 }
50829 if (typeof value === 'string') {
50830 return new Buffer(value, encodingOrOffset);
50831 }
50832 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
50833 var offset = encodingOrOffset;
50834 if (arguments.length === 1) {
50835 return new Buffer(value);
50836 }
50837 if (typeof offset === 'undefined') {
50838 offset = 0;
50839 }
50840 var len = length;
50841 if (typeof len === 'undefined') {
50842 len = value.byteLength - offset;
50843 }
50844 if (offset >= value.byteLength) {
50845 throw new RangeError('\'offset\' is out of bounds');
50846 }
50847 if (len > value.byteLength - offset) {
50848 throw new RangeError('\'length\' is out of bounds');
50849 }
50850 return new Buffer(value.slice(offset, offset + len));
50851 }
50852 if (Buffer.isBuffer(value)) {
50853 var out = new Buffer(value.length);
50854 value.copy(out, 0, 0, value.length);
50855 return out;
50856 }
50857 if (value) {
50858 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
50859 return new Buffer(value);
50860 }
50861 if (value.type === 'Buffer' && Array.isArray(value.data)) {
50862 return new Buffer(value.data);
50863 }
50864 }
50865
50866 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
50867 }
50868 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
50869 if (typeof Buffer.allocUnsafeSlow === 'function') {
50870 return Buffer.allocUnsafeSlow(size);
50871 }
50872 if (typeof size !== 'number') {
50873 throw new TypeError('size must be a number');
50874 }
50875 if (size >= MAX_LEN) {
50876 throw new RangeError('size is too large');
50877 }
50878 return new SlowBuffer(size);
50879 }
50880
50881 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
50882 },{"buffer":47}],46:[function(require,module,exports){
50883 (function (Buffer){
50884 module.exports = function xor (a, b) {
50885 var length = Math.min(a.length, b.length)
50886 var buffer = new Buffer(length)
50887
50888 for (var i = 0; i < length; ++i) {
50889 buffer[i] = a[i] ^ b[i]
50890 }
50891
50892 return buffer
50893 }
50894
50895 }).call(this,require("buffer").Buffer)
50896 },{"buffer":47}],47:[function(require,module,exports){
50897 /*!
50898 * The buffer module from node.js, for the browser.
50899 *
50900 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
50901 * @license MIT
50902 */
50903 /* eslint-disable no-proto */
50904
50905 'use strict'
50906
50907 var base64 = require('base64-js')
50908 var ieee754 = require('ieee754')
50909
50910 exports.Buffer = Buffer
50911 exports.SlowBuffer = SlowBuffer
50912 exports.INSPECT_MAX_BYTES = 50
50913
50914 var K_MAX_LENGTH = 0x7fffffff
50915 exports.kMaxLength = K_MAX_LENGTH
50916
50917 /**
50918 * If `Buffer.TYPED_ARRAY_SUPPORT`:
50919 * === true Use Uint8Array implementation (fastest)
50920 * === false Print warning and recommend using `buffer` v4.x which has an Object
50921 * implementation (most compatible, even IE6)
50922 *
50923 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
50924 * Opera 11.6+, iOS 4.2+.
50925 *
50926 * We report that the browser does not support typed arrays if the are not subclassable
50927 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
50928 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
50929 * for __proto__ and has a buggy typed array implementation.
50930 */
50931 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
50932
50933 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
50934 typeof console.error === 'function') {
50935 console.error(
50936 'This browser lacks typed array (Uint8Array) support which is required by ' +
50937 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
50938 )
50939 }
50940
50941 function typedArraySupport () {
50942 // Can typed array instances can be augmented?
50943 try {
50944 var arr = new Uint8Array(1)
50945 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
50946 return arr.foo() === 42
50947 } catch (e) {
50948 return false
50949 }
50950 }
50951
50952 function createBuffer (length) {
50953 if (length > K_MAX_LENGTH) {
50954 throw new RangeError('Invalid typed array length')
50955 }
50956 // Return an augmented `Uint8Array` instance
50957 var buf = new Uint8Array(length)
50958 buf.__proto__ = Buffer.prototype
50959 return buf
50960 }
50961
50962 /**
50963 * The Buffer constructor returns instances of `Uint8Array` that have their
50964 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
50965 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
50966 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
50967 * returns a single octet.
50968 *
50969 * The `Uint8Array` prototype remains unmodified.
50970 */
50971
50972 function Buffer (arg, encodingOrOffset, length) {
50973 // Common case.
50974 if (typeof arg === 'number') {
50975 if (typeof encodingOrOffset === 'string') {
50976 throw new Error(
50977 'If encoding is specified then the first argument must be a string'
50978 )
50979 }
50980 return allocUnsafe(arg)
50981 }
50982 return from(arg, encodingOrOffset, length)
50983 }
50984
50985 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
50986 if (typeof Symbol !== 'undefined' && Symbol.species &&
50987 Buffer[Symbol.species] === Buffer) {
50988 Object.defineProperty(Buffer, Symbol.species, {
50989 value: null,
50990 configurable: true,
50991 enumerable: false,
50992 writable: false
50993 })
50994 }
50995
50996 Buffer.poolSize = 8192 // not used by this implementation
50997
50998 function from (value, encodingOrOffset, length) {
50999 if (typeof value === 'number') {
51000 throw new TypeError('"value" argument must not be a number')
51001 }
51002
51003 if (value instanceof ArrayBuffer) {
51004 return fromArrayBuffer(value, encodingOrOffset, length)
51005 }
51006
51007 if (typeof value === 'string') {
51008 return fromString(value, encodingOrOffset)
51009 }
51010
51011 return fromObject(value)
51012 }
51013
51014 /**
51015 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
51016 * if value is a number.
51017 * Buffer.from(str[, encoding])
51018 * Buffer.from(array)
51019 * Buffer.from(buffer)
51020 * Buffer.from(arrayBuffer[, byteOffset[, length]])
51021 **/
51022 Buffer.from = function (value, encodingOrOffset, length) {
51023 return from(value, encodingOrOffset, length)
51024 }
51025
51026 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
51027 // https://github.com/feross/buffer/pull/148
51028 Buffer.prototype.__proto__ = Uint8Array.prototype
51029 Buffer.__proto__ = Uint8Array
51030
51031 function assertSize (size) {
51032 if (typeof size !== 'number') {
51033 throw new TypeError('"size" argument must be a number')
51034 } else if (size < 0) {
51035 throw new RangeError('"size" argument must not be negative')
51036 }
51037 }
51038
51039 function alloc (size, fill, encoding) {
51040 assertSize(size)
51041 if (size <= 0) {
51042 return createBuffer(size)
51043 }
51044 if (fill !== undefined) {
51045 // Only pay attention to encoding if it's a string. This
51046 // prevents accidentally sending in a number that would
51047 // be interpretted as a start offset.
51048 return typeof encoding === 'string'
51049 ? createBuffer(size).fill(fill, encoding)
51050 : createBuffer(size).fill(fill)
51051 }
51052 return createBuffer(size)
51053 }
51054
51055 /**
51056 * Creates a new filled Buffer instance.
51057 * alloc(size[, fill[, encoding]])
51058 **/
51059 Buffer.alloc = function (size, fill, encoding) {
51060 return alloc(size, fill, encoding)
51061 }
51062
51063 function allocUnsafe (size) {
51064 assertSize(size)
51065 return createBuffer(size < 0 ? 0 : checked(size) | 0)
51066 }
51067
51068 /**
51069 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
51070 * */
51071 Buffer.allocUnsafe = function (size) {
51072 return allocUnsafe(size)
51073 }
51074 /**
51075 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
51076 */
51077 Buffer.allocUnsafeSlow = function (size) {
51078 return allocUnsafe(size)
51079 }
51080
51081 function fromString (string, encoding) {
51082 if (typeof encoding !== 'string' || encoding === '') {
51083 encoding = 'utf8'
51084 }
51085
51086 if (!Buffer.isEncoding(encoding)) {
51087 throw new TypeError('"encoding" must be a valid string encoding')
51088 }
51089
51090 var length = byteLength(string, encoding) | 0
51091 var buf = createBuffer(length)
51092
51093 var actual = buf.write(string, encoding)
51094
51095 if (actual !== length) {
51096 // Writing a hex string, for example, that contains invalid characters will
51097 // cause everything after the first invalid character to be ignored. (e.g.
51098 // 'abxxcd' will be treated as 'ab')
51099 buf = buf.slice(0, actual)
51100 }
51101
51102 return buf
51103 }
51104
51105 function fromArrayLike (array) {
51106 var length = array.length < 0 ? 0 : checked(array.length) | 0
51107 var buf = createBuffer(length)
51108 for (var i = 0; i < length; i += 1) {
51109 buf[i] = array[i] & 255
51110 }
51111 return buf
51112 }
51113
51114 function fromArrayBuffer (array, byteOffset, length) {
51115 if (byteOffset < 0 || array.byteLength < byteOffset) {
51116 throw new RangeError('\'offset\' is out of bounds')
51117 }
51118
51119 if (array.byteLength < byteOffset + (length || 0)) {
51120 throw new RangeError('\'length\' is out of bounds')
51121 }
51122
51123 var buf
51124 if (byteOffset === undefined && length === undefined) {
51125 buf = new Uint8Array(array)
51126 } else if (length === undefined) {
51127 buf = new Uint8Array(array, byteOffset)
51128 } else {
51129 buf = new Uint8Array(array, byteOffset, length)
51130 }
51131
51132 // Return an augmented `Uint8Array` instance
51133 buf.__proto__ = Buffer.prototype
51134 return buf
51135 }
51136
51137 function fromObject (obj) {
51138 if (Buffer.isBuffer(obj)) {
51139 var len = checked(obj.length) | 0
51140 var buf = createBuffer(len)
51141
51142 if (buf.length === 0) {
51143 return buf
51144 }
51145
51146 obj.copy(buf, 0, 0, len)
51147 return buf
51148 }
51149
51150 if (obj) {
51151 if (isArrayBufferView(obj) || 'length' in obj) {
51152 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
51153 return createBuffer(0)
51154 }
51155 return fromArrayLike(obj)
51156 }
51157
51158 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
51159 return fromArrayLike(obj.data)
51160 }
51161 }
51162
51163 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
51164 }
51165
51166 function checked (length) {
51167 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
51168 // length is NaN (which is otherwise coerced to zero.)
51169 if (length >= K_MAX_LENGTH) {
51170 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
51171 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
51172 }
51173 return length | 0
51174 }
51175
51176 function SlowBuffer (length) {
51177 if (+length != length) { // eslint-disable-line eqeqeq
51178 length = 0
51179 }
51180 return Buffer.alloc(+length)
51181 }
51182
51183 Buffer.isBuffer = function isBuffer (b) {
51184 return b != null && b._isBuffer === true
51185 }
51186
51187 Buffer.compare = function compare (a, b) {
51188 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
51189 throw new TypeError('Arguments must be Buffers')
51190 }
51191
51192 if (a === b) return 0
51193
51194 var x = a.length
51195 var y = b.length
51196
51197 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
51198 if (a[i] !== b[i]) {
51199 x = a[i]
51200 y = b[i]
51201 break
51202 }
51203 }
51204
51205 if (x < y) return -1
51206 if (y < x) return 1
51207 return 0
51208 }
51209
51210 Buffer.isEncoding = function isEncoding (encoding) {
51211 switch (String(encoding).toLowerCase()) {
51212 case 'hex':
51213 case 'utf8':
51214 case 'utf-8':
51215 case 'ascii':
51216 case 'latin1':
51217 case 'binary':
51218 case 'base64':
51219 case 'ucs2':
51220 case 'ucs-2':
51221 case 'utf16le':
51222 case 'utf-16le':
51223 return true
51224 default:
51225 return false
51226 }
51227 }
51228
51229 Buffer.concat = function concat (list, length) {
51230 if (!Array.isArray(list)) {
51231 throw new TypeError('"list" argument must be an Array of Buffers')
51232 }
51233
51234 if (list.length === 0) {
51235 return Buffer.alloc(0)
51236 }
51237
51238 var i
51239 if (length === undefined) {
51240 length = 0
51241 for (i = 0; i < list.length; ++i) {
51242 length += list[i].length
51243 }
51244 }
51245
51246 var buffer = Buffer.allocUnsafe(length)
51247 var pos = 0
51248 for (i = 0; i < list.length; ++i) {
51249 var buf = list[i]
51250 if (!Buffer.isBuffer(buf)) {
51251 throw new TypeError('"list" argument must be an Array of Buffers')
51252 }
51253 buf.copy(buffer, pos)
51254 pos += buf.length
51255 }
51256 return buffer
51257 }
51258
51259 function byteLength (string, encoding) {
51260 if (Buffer.isBuffer(string)) {
51261 return string.length
51262 }
51263 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
51264 return string.byteLength
51265 }
51266 if (typeof string !== 'string') {
51267 string = '' + string
51268 }
51269
51270 var len = string.length
51271 if (len === 0) return 0
51272
51273 // Use a for loop to avoid recursion
51274 var loweredCase = false
51275 for (;;) {
51276 switch (encoding) {
51277 case 'ascii':
51278 case 'latin1':
51279 case 'binary':
51280 return len
51281 case 'utf8':
51282 case 'utf-8':
51283 case undefined:
51284 return utf8ToBytes(string).length
51285 case 'ucs2':
51286 case 'ucs-2':
51287 case 'utf16le':
51288 case 'utf-16le':
51289 return len * 2
51290 case 'hex':
51291 return len >>> 1
51292 case 'base64':
51293 return base64ToBytes(string).length
51294 default:
51295 if (loweredCase) return utf8ToBytes(string).length // assume utf8
51296 encoding = ('' + encoding).toLowerCase()
51297 loweredCase = true
51298 }
51299 }
51300 }
51301 Buffer.byteLength = byteLength
51302
51303 function slowToString (encoding, start, end) {
51304 var loweredCase = false
51305
51306 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
51307 // property of a typed array.
51308
51309 // This behaves neither like String nor Uint8Array in that we set start/end
51310 // to their upper/lower bounds if the value passed is out of range.
51311 // undefined is handled specially as per ECMA-262 6th Edition,
51312 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
51313 if (start === undefined || start < 0) {
51314 start = 0
51315 }
51316 // Return early if start > this.length. Done here to prevent potential uint32
51317 // coercion fail below.
51318 if (start > this.length) {
51319 return ''
51320 }
51321
51322 if (end === undefined || end > this.length) {
51323 end = this.length
51324 }
51325
51326 if (end <= 0) {
51327 return ''
51328 }
51329
51330 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
51331 end >>>= 0
51332 start >>>= 0
51333
51334 if (end <= start) {
51335 return ''
51336 }
51337
51338 if (!encoding) encoding = 'utf8'
51339
51340 while (true) {
51341 switch (encoding) {
51342 case 'hex':
51343 return hexSlice(this, start, end)
51344
51345 case 'utf8':
51346 case 'utf-8':
51347 return utf8Slice(this, start, end)
51348
51349 case 'ascii':
51350 return asciiSlice(this, start, end)
51351
51352 case 'latin1':
51353 case 'binary':
51354 return latin1Slice(this, start, end)
51355
51356 case 'base64':
51357 return base64Slice(this, start, end)
51358
51359 case 'ucs2':
51360 case 'ucs-2':
51361 case 'utf16le':
51362 case 'utf-16le':
51363 return utf16leSlice(this, start, end)
51364
51365 default:
51366 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
51367 encoding = (encoding + '').toLowerCase()
51368 loweredCase = true
51369 }
51370 }
51371 }
51372
51373 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
51374 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
51375 // reliably in a browserify context because there could be multiple different
51376 // copies of the 'buffer' package in use. This method works even for Buffer
51377 // instances that were created from another copy of the `buffer` package.
51378 // See: https://github.com/feross/buffer/issues/154
51379 Buffer.prototype._isBuffer = true
51380
51381 function swap (b, n, m) {
51382 var i = b[n]
51383 b[n] = b[m]
51384 b[m] = i
51385 }
51386
51387 Buffer.prototype.swap16 = function swap16 () {
51388 var len = this.length
51389 if (len % 2 !== 0) {
51390 throw new RangeError('Buffer size must be a multiple of 16-bits')
51391 }
51392 for (var i = 0; i < len; i += 2) {
51393 swap(this, i, i + 1)
51394 }
51395 return this
51396 }
51397
51398 Buffer.prototype.swap32 = function swap32 () {
51399 var len = this.length
51400 if (len % 4 !== 0) {
51401 throw new RangeError('Buffer size must be a multiple of 32-bits')
51402 }
51403 for (var i = 0; i < len; i += 4) {
51404 swap(this, i, i + 3)
51405 swap(this, i + 1, i + 2)
51406 }
51407 return this
51408 }
51409
51410 Buffer.prototype.swap64 = function swap64 () {
51411 var len = this.length
51412 if (len % 8 !== 0) {
51413 throw new RangeError('Buffer size must be a multiple of 64-bits')
51414 }
51415 for (var i = 0; i < len; i += 8) {
51416 swap(this, i, i + 7)
51417 swap(this, i + 1, i + 6)
51418 swap(this, i + 2, i + 5)
51419 swap(this, i + 3, i + 4)
51420 }
51421 return this
51422 }
51423
51424 Buffer.prototype.toString = function toString () {
51425 var length = this.length
51426 if (length === 0) return ''
51427 if (arguments.length === 0) return utf8Slice(this, 0, length)
51428 return slowToString.apply(this, arguments)
51429 }
51430
51431 Buffer.prototype.equals = function equals (b) {
51432 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
51433 if (this === b) return true
51434 return Buffer.compare(this, b) === 0
51435 }
51436
51437 Buffer.prototype.inspect = function inspect () {
51438 var str = ''
51439 var max = exports.INSPECT_MAX_BYTES
51440 if (this.length > 0) {
51441 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
51442 if (this.length > max) str += ' ... '
51443 }
51444 return '<Buffer ' + str + '>'
51445 }
51446
51447 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
51448 if (!Buffer.isBuffer(target)) {
51449 throw new TypeError('Argument must be a Buffer')
51450 }
51451
51452 if (start === undefined) {
51453 start = 0
51454 }
51455 if (end === undefined) {
51456 end = target ? target.length : 0
51457 }
51458 if (thisStart === undefined) {
51459 thisStart = 0
51460 }
51461 if (thisEnd === undefined) {
51462 thisEnd = this.length
51463 }
51464
51465 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
51466 throw new RangeError('out of range index')
51467 }
51468
51469 if (thisStart >= thisEnd && start >= end) {
51470 return 0
51471 }
51472 if (thisStart >= thisEnd) {
51473 return -1
51474 }
51475 if (start >= end) {
51476 return 1
51477 }
51478
51479 start >>>= 0
51480 end >>>= 0
51481 thisStart >>>= 0
51482 thisEnd >>>= 0
51483
51484 if (this === target) return 0
51485
51486 var x = thisEnd - thisStart
51487 var y = end - start
51488 var len = Math.min(x, y)
51489
51490 var thisCopy = this.slice(thisStart, thisEnd)
51491 var targetCopy = target.slice(start, end)
51492
51493 for (var i = 0; i < len; ++i) {
51494 if (thisCopy[i] !== targetCopy[i]) {
51495 x = thisCopy[i]
51496 y = targetCopy[i]
51497 break
51498 }
51499 }
51500
51501 if (x < y) return -1
51502 if (y < x) return 1
51503 return 0
51504 }
51505
51506 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
51507 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
51508 //
51509 // Arguments:
51510 // - buffer - a Buffer to search
51511 // - val - a string, Buffer, or number
51512 // - byteOffset - an index into `buffer`; will be clamped to an int32
51513 // - encoding - an optional encoding, relevant is val is a string
51514 // - dir - true for indexOf, false for lastIndexOf
51515 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
51516 // Empty buffer means no match
51517 if (buffer.length === 0) return -1
51518
51519 // Normalize byteOffset
51520 if (typeof byteOffset === 'string') {
51521 encoding = byteOffset
51522 byteOffset = 0
51523 } else if (byteOffset > 0x7fffffff) {
51524 byteOffset = 0x7fffffff
51525 } else if (byteOffset < -0x80000000) {
51526 byteOffset = -0x80000000
51527 }
51528 byteOffset = +byteOffset // Coerce to Number.
51529 if (numberIsNaN(byteOffset)) {
51530 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
51531 byteOffset = dir ? 0 : (buffer.length - 1)
51532 }
51533
51534 // Normalize byteOffset: negative offsets start from the end of the buffer
51535 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
51536 if (byteOffset >= buffer.length) {
51537 if (dir) return -1
51538 else byteOffset = buffer.length - 1
51539 } else if (byteOffset < 0) {
51540 if (dir) byteOffset = 0
51541 else return -1
51542 }
51543
51544 // Normalize val
51545 if (typeof val === 'string') {
51546 val = Buffer.from(val, encoding)
51547 }
51548
51549 // Finally, search either indexOf (if dir is true) or lastIndexOf
51550 if (Buffer.isBuffer(val)) {
51551 // Special case: looking for empty string/buffer always fails
51552 if (val.length === 0) {
51553 return -1
51554 }
51555 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
51556 } else if (typeof val === 'number') {
51557 val = val & 0xFF // Search for a byte value [0-255]
51558 if (typeof Uint8Array.prototype.indexOf === 'function') {
51559 if (dir) {
51560 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
51561 } else {
51562 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
51563 }
51564 }
51565 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
51566 }
51567
51568 throw new TypeError('val must be string, number or Buffer')
51569 }
51570
51571 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
51572 var indexSize = 1
51573 var arrLength = arr.length
51574 var valLength = val.length
51575
51576 if (encoding !== undefined) {
51577 encoding = String(encoding).toLowerCase()
51578 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
51579 encoding === 'utf16le' || encoding === 'utf-16le') {
51580 if (arr.length < 2 || val.length < 2) {
51581 return -1
51582 }
51583 indexSize = 2
51584 arrLength /= 2
51585 valLength /= 2
51586 byteOffset /= 2
51587 }
51588 }
51589
51590 function read (buf, i) {
51591 if (indexSize === 1) {
51592 return buf[i]
51593 } else {
51594 return buf.readUInt16BE(i * indexSize)
51595 }
51596 }
51597
51598 var i
51599 if (dir) {
51600 var foundIndex = -1
51601 for (i = byteOffset; i < arrLength; i++) {
51602 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
51603 if (foundIndex === -1) foundIndex = i
51604 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
51605 } else {
51606 if (foundIndex !== -1) i -= i - foundIndex
51607 foundIndex = -1
51608 }
51609 }
51610 } else {
51611 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
51612 for (i = byteOffset; i >= 0; i--) {
51613 var found = true
51614 for (var j = 0; j < valLength; j++) {
51615 if (read(arr, i + j) !== read(val, j)) {
51616 found = false
51617 break
51618 }
51619 }
51620 if (found) return i
51621 }
51622 }
51623
51624 return -1
51625 }
51626
51627 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
51628 return this.indexOf(val, byteOffset, encoding) !== -1
51629 }
51630
51631 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
51632 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
51633 }
51634
51635 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
51636 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
51637 }
51638
51639 function hexWrite (buf, string, offset, length) {
51640 offset = Number(offset) || 0
51641 var remaining = buf.length - offset
51642 if (!length) {
51643 length = remaining
51644 } else {
51645 length = Number(length)
51646 if (length > remaining) {
51647 length = remaining
51648 }
51649 }
51650
51651 // must be an even number of digits
51652 var strLen = string.length
51653 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
51654
51655 if (length > strLen / 2) {
51656 length = strLen / 2
51657 }
51658 for (var i = 0; i < length; ++i) {
51659 var parsed = parseInt(string.substr(i * 2, 2), 16)
51660 if (numberIsNaN(parsed)) return i
51661 buf[offset + i] = parsed
51662 }
51663 return i
51664 }
51665
51666 function utf8Write (buf, string, offset, length) {
51667 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
51668 }
51669
51670 function asciiWrite (buf, string, offset, length) {
51671 return blitBuffer(asciiToBytes(string), buf, offset, length)
51672 }
51673
51674 function latin1Write (buf, string, offset, length) {
51675 return asciiWrite(buf, string, offset, length)
51676 }
51677
51678 function base64Write (buf, string, offset, length) {
51679 return blitBuffer(base64ToBytes(string), buf, offset, length)
51680 }
51681
51682 function ucs2Write (buf, string, offset, length) {
51683 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
51684 }
51685
51686 Buffer.prototype.write = function write (string, offset, length, encoding) {
51687 // Buffer#write(string)
51688 if (offset === undefined) {
51689 encoding = 'utf8'
51690 length = this.length
51691 offset = 0
51692 // Buffer#write(string, encoding)
51693 } else if (length === undefined && typeof offset === 'string') {
51694 encoding = offset
51695 length = this.length
51696 offset = 0
51697 // Buffer#write(string, offset[, length][, encoding])
51698 } else if (isFinite(offset)) {
51699 offset = offset >>> 0
51700 if (isFinite(length)) {
51701 length = length >>> 0
51702 if (encoding === undefined) encoding = 'utf8'
51703 } else {
51704 encoding = length
51705 length = undefined
51706 }
51707 } else {
51708 throw new Error(
51709 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
51710 )
51711 }
51712
51713 var remaining = this.length - offset
51714 if (length === undefined || length > remaining) length = remaining
51715
51716 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
51717 throw new RangeError('Attempt to write outside buffer bounds')
51718 }
51719
51720 if (!encoding) encoding = 'utf8'
51721
51722 var loweredCase = false
51723 for (;;) {
51724 switch (encoding) {
51725 case 'hex':
51726 return hexWrite(this, string, offset, length)
51727
51728 case 'utf8':
51729 case 'utf-8':
51730 return utf8Write(this, string, offset, length)
51731
51732 case 'ascii':
51733 return asciiWrite(this, string, offset, length)
51734
51735 case 'latin1':
51736 case 'binary':
51737 return latin1Write(this, string, offset, length)
51738
51739 case 'base64':
51740 // Warning: maxLength not taken into account in base64Write
51741 return base64Write(this, string, offset, length)
51742
51743 case 'ucs2':
51744 case 'ucs-2':
51745 case 'utf16le':
51746 case 'utf-16le':
51747 return ucs2Write(this, string, offset, length)
51748
51749 default:
51750 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
51751 encoding = ('' + encoding).toLowerCase()
51752 loweredCase = true
51753 }
51754 }
51755 }
51756
51757 Buffer.prototype.toJSON = function toJSON () {
51758 return {
51759 type: 'Buffer',
51760 data: Array.prototype.slice.call(this._arr || this, 0)
51761 }
51762 }
51763
51764 function base64Slice (buf, start, end) {
51765 if (start === 0 && end === buf.length) {
51766 return base64.fromByteArray(buf)
51767 } else {
51768 return base64.fromByteArray(buf.slice(start, end))
51769 }
51770 }
51771
51772 function utf8Slice (buf, start, end) {
51773 end = Math.min(buf.length, end)
51774 var res = []
51775
51776 var i = start
51777 while (i < end) {
51778 var firstByte = buf[i]
51779 var codePoint = null
51780 var bytesPerSequence = (firstByte > 0xEF) ? 4
51781 : (firstByte > 0xDF) ? 3
51782 : (firstByte > 0xBF) ? 2
51783 : 1
51784
51785 if (i + bytesPerSequence <= end) {
51786 var secondByte, thirdByte, fourthByte, tempCodePoint
51787
51788 switch (bytesPerSequence) {
51789 case 1:
51790 if (firstByte < 0x80) {
51791 codePoint = firstByte
51792 }
51793 break
51794 case 2:
51795 secondByte = buf[i + 1]
51796 if ((secondByte & 0xC0) === 0x80) {
51797 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
51798 if (tempCodePoint > 0x7F) {
51799 codePoint = tempCodePoint
51800 }
51801 }
51802 break
51803 case 3:
51804 secondByte = buf[i + 1]
51805 thirdByte = buf[i + 2]
51806 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
51807 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
51808 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
51809 codePoint = tempCodePoint
51810 }
51811 }
51812 break
51813 case 4:
51814 secondByte = buf[i + 1]
51815 thirdByte = buf[i + 2]
51816 fourthByte = buf[i + 3]
51817 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
51818 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
51819 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
51820 codePoint = tempCodePoint
51821 }
51822 }
51823 }
51824 }
51825
51826 if (codePoint === null) {
51827 // we did not generate a valid codePoint so insert a
51828 // replacement char (U+FFFD) and advance only 1 byte
51829 codePoint = 0xFFFD
51830 bytesPerSequence = 1
51831 } else if (codePoint > 0xFFFF) {
51832 // encode to utf16 (surrogate pair dance)
51833 codePoint -= 0x10000
51834 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
51835 codePoint = 0xDC00 | codePoint & 0x3FF
51836 }
51837
51838 res.push(codePoint)
51839 i += bytesPerSequence
51840 }
51841
51842 return decodeCodePointsArray(res)
51843 }
51844
51845 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
51846 // the lowest limit is Chrome, with 0x10000 args.
51847 // We go 1 magnitude less, for safety
51848 var MAX_ARGUMENTS_LENGTH = 0x1000
51849
51850 function decodeCodePointsArray (codePoints) {
51851 var len = codePoints.length
51852 if (len <= MAX_ARGUMENTS_LENGTH) {
51853 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
51854 }
51855
51856 // Decode in chunks to avoid "call stack size exceeded".
51857 var res = ''
51858 var i = 0
51859 while (i < len) {
51860 res += String.fromCharCode.apply(
51861 String,
51862 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
51863 )
51864 }
51865 return res
51866 }
51867
51868 function asciiSlice (buf, start, end) {
51869 var ret = ''
51870 end = Math.min(buf.length, end)
51871
51872 for (var i = start; i < end; ++i) {
51873 ret += String.fromCharCode(buf[i] & 0x7F)
51874 }
51875 return ret
51876 }
51877
51878 function latin1Slice (buf, start, end) {
51879 var ret = ''
51880 end = Math.min(buf.length, end)
51881
51882 for (var i = start; i < end; ++i) {
51883 ret += String.fromCharCode(buf[i])
51884 }
51885 return ret
51886 }
51887
51888 function hexSlice (buf, start, end) {
51889 var len = buf.length
51890
51891 if (!start || start < 0) start = 0
51892 if (!end || end < 0 || end > len) end = len
51893
51894 var out = ''
51895 for (var i = start; i < end; ++i) {
51896 out += toHex(buf[i])
51897 }
51898 return out
51899 }
51900
51901 function utf16leSlice (buf, start, end) {
51902 var bytes = buf.slice(start, end)
51903 var res = ''
51904 for (var i = 0; i < bytes.length; i += 2) {
51905 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
51906 }
51907 return res
51908 }
51909
51910 Buffer.prototype.slice = function slice (start, end) {
51911 var len = this.length
51912 start = ~~start
51913 end = end === undefined ? len : ~~end
51914
51915 if (start < 0) {
51916 start += len
51917 if (start < 0) start = 0
51918 } else if (start > len) {
51919 start = len
51920 }
51921
51922 if (end < 0) {
51923 end += len
51924 if (end < 0) end = 0
51925 } else if (end > len) {
51926 end = len
51927 }
51928
51929 if (end < start) end = start
51930
51931 var newBuf = this.subarray(start, end)
51932 // Return an augmented `Uint8Array` instance
51933 newBuf.__proto__ = Buffer.prototype
51934 return newBuf
51935 }
51936
51937 /*
51938 * Need to make sure that buffer isn't trying to write out of bounds.
51939 */
51940 function checkOffset (offset, ext, length) {
51941 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
51942 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
51943 }
51944
51945 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
51946 offset = offset >>> 0
51947 byteLength = byteLength >>> 0
51948 if (!noAssert) checkOffset(offset, byteLength, this.length)
51949
51950 var val = this[offset]
51951 var mul = 1
51952 var i = 0
51953 while (++i < byteLength && (mul *= 0x100)) {
51954 val += this[offset + i] * mul
51955 }
51956
51957 return val
51958 }
51959
51960 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
51961 offset = offset >>> 0
51962 byteLength = byteLength >>> 0
51963 if (!noAssert) {
51964 checkOffset(offset, byteLength, this.length)
51965 }
51966
51967 var val = this[offset + --byteLength]
51968 var mul = 1
51969 while (byteLength > 0 && (mul *= 0x100)) {
51970 val += this[offset + --byteLength] * mul
51971 }
51972
51973 return val
51974 }
51975
51976 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
51977 offset = offset >>> 0
51978 if (!noAssert) checkOffset(offset, 1, this.length)
51979 return this[offset]
51980 }
51981
51982 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
51983 offset = offset >>> 0
51984 if (!noAssert) checkOffset(offset, 2, this.length)
51985 return this[offset] | (this[offset + 1] << 8)
51986 }
51987
51988 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
51989 offset = offset >>> 0
51990 if (!noAssert) checkOffset(offset, 2, this.length)
51991 return (this[offset] << 8) | this[offset + 1]
51992 }
51993
51994 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
51995 offset = offset >>> 0
51996 if (!noAssert) checkOffset(offset, 4, this.length)
51997
51998 return ((this[offset]) |
51999 (this[offset + 1] << 8) |
52000 (this[offset + 2] << 16)) +
52001 (this[offset + 3] * 0x1000000)
52002 }
52003
52004 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
52005 offset = offset >>> 0
52006 if (!noAssert) checkOffset(offset, 4, this.length)
52007
52008 return (this[offset] * 0x1000000) +
52009 ((this[offset + 1] << 16) |
52010 (this[offset + 2] << 8) |
52011 this[offset + 3])
52012 }
52013
52014 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
52015 offset = offset >>> 0
52016 byteLength = byteLength >>> 0
52017 if (!noAssert) checkOffset(offset, byteLength, this.length)
52018
52019 var val = this[offset]
52020 var mul = 1
52021 var i = 0
52022 while (++i < byteLength && (mul *= 0x100)) {
52023 val += this[offset + i] * mul
52024 }
52025 mul *= 0x80
52026
52027 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
52028
52029 return val
52030 }
52031
52032 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
52033 offset = offset >>> 0
52034 byteLength = byteLength >>> 0
52035 if (!noAssert) checkOffset(offset, byteLength, this.length)
52036
52037 var i = byteLength
52038 var mul = 1
52039 var val = this[offset + --i]
52040 while (i > 0 && (mul *= 0x100)) {
52041 val += this[offset + --i] * mul
52042 }
52043 mul *= 0x80
52044
52045 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
52046
52047 return val
52048 }
52049
52050 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
52051 offset = offset >>> 0
52052 if (!noAssert) checkOffset(offset, 1, this.length)
52053 if (!(this[offset] & 0x80)) return (this[offset])
52054 return ((0xff - this[offset] + 1) * -1)
52055 }
52056
52057 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
52058 offset = offset >>> 0
52059 if (!noAssert) checkOffset(offset, 2, this.length)
52060 var val = this[offset] | (this[offset + 1] << 8)
52061 return (val & 0x8000) ? val | 0xFFFF0000 : val
52062 }
52063
52064 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
52065 offset = offset >>> 0
52066 if (!noAssert) checkOffset(offset, 2, this.length)
52067 var val = this[offset + 1] | (this[offset] << 8)
52068 return (val & 0x8000) ? val | 0xFFFF0000 : val
52069 }
52070
52071 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
52072 offset = offset >>> 0
52073 if (!noAssert) checkOffset(offset, 4, this.length)
52074
52075 return (this[offset]) |
52076 (this[offset + 1] << 8) |
52077 (this[offset + 2] << 16) |
52078 (this[offset + 3] << 24)
52079 }
52080
52081 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
52082 offset = offset >>> 0
52083 if (!noAssert) checkOffset(offset, 4, this.length)
52084
52085 return (this[offset] << 24) |
52086 (this[offset + 1] << 16) |
52087 (this[offset + 2] << 8) |
52088 (this[offset + 3])
52089 }
52090
52091 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
52092 offset = offset >>> 0
52093 if (!noAssert) checkOffset(offset, 4, this.length)
52094 return ieee754.read(this, offset, true, 23, 4)
52095 }
52096
52097 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
52098 offset = offset >>> 0
52099 if (!noAssert) checkOffset(offset, 4, this.length)
52100 return ieee754.read(this, offset, false, 23, 4)
52101 }
52102
52103 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
52104 offset = offset >>> 0
52105 if (!noAssert) checkOffset(offset, 8, this.length)
52106 return ieee754.read(this, offset, true, 52, 8)
52107 }
52108
52109 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
52110 offset = offset >>> 0
52111 if (!noAssert) checkOffset(offset, 8, this.length)
52112 return ieee754.read(this, offset, false, 52, 8)
52113 }
52114
52115 function checkInt (buf, value, offset, ext, max, min) {
52116 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
52117 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
52118 if (offset + ext > buf.length) throw new RangeError('Index out of range')
52119 }
52120
52121 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
52122 value = +value
52123 offset = offset >>> 0
52124 byteLength = byteLength >>> 0
52125 if (!noAssert) {
52126 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52127 checkInt(this, value, offset, byteLength, maxBytes, 0)
52128 }
52129
52130 var mul = 1
52131 var i = 0
52132 this[offset] = value & 0xFF
52133 while (++i < byteLength && (mul *= 0x100)) {
52134 this[offset + i] = (value / mul) & 0xFF
52135 }
52136
52137 return offset + byteLength
52138 }
52139
52140 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
52141 value = +value
52142 offset = offset >>> 0
52143 byteLength = byteLength >>> 0
52144 if (!noAssert) {
52145 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52146 checkInt(this, value, offset, byteLength, maxBytes, 0)
52147 }
52148
52149 var i = byteLength - 1
52150 var mul = 1
52151 this[offset + i] = value & 0xFF
52152 while (--i >= 0 && (mul *= 0x100)) {
52153 this[offset + i] = (value / mul) & 0xFF
52154 }
52155
52156 return offset + byteLength
52157 }
52158
52159 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
52160 value = +value
52161 offset = offset >>> 0
52162 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
52163 this[offset] = (value & 0xff)
52164 return offset + 1
52165 }
52166
52167 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
52168 value = +value
52169 offset = offset >>> 0
52170 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
52171 this[offset] = (value & 0xff)
52172 this[offset + 1] = (value >>> 8)
52173 return offset + 2
52174 }
52175
52176 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
52177 value = +value
52178 offset = offset >>> 0
52179 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
52180 this[offset] = (value >>> 8)
52181 this[offset + 1] = (value & 0xff)
52182 return offset + 2
52183 }
52184
52185 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
52186 value = +value
52187 offset = offset >>> 0
52188 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
52189 this[offset + 3] = (value >>> 24)
52190 this[offset + 2] = (value >>> 16)
52191 this[offset + 1] = (value >>> 8)
52192 this[offset] = (value & 0xff)
52193 return offset + 4
52194 }
52195
52196 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
52197 value = +value
52198 offset = offset >>> 0
52199 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
52200 this[offset] = (value >>> 24)
52201 this[offset + 1] = (value >>> 16)
52202 this[offset + 2] = (value >>> 8)
52203 this[offset + 3] = (value & 0xff)
52204 return offset + 4
52205 }
52206
52207 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
52208 value = +value
52209 offset = offset >>> 0
52210 if (!noAssert) {
52211 var limit = Math.pow(2, (8 * byteLength) - 1)
52212
52213 checkInt(this, value, offset, byteLength, limit - 1, -limit)
52214 }
52215
52216 var i = 0
52217 var mul = 1
52218 var sub = 0
52219 this[offset] = value & 0xFF
52220 while (++i < byteLength && (mul *= 0x100)) {
52221 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
52222 sub = 1
52223 }
52224 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
52225 }
52226
52227 return offset + byteLength
52228 }
52229
52230 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
52231 value = +value
52232 offset = offset >>> 0
52233 if (!noAssert) {
52234 var limit = Math.pow(2, (8 * byteLength) - 1)
52235
52236 checkInt(this, value, offset, byteLength, limit - 1, -limit)
52237 }
52238
52239 var i = byteLength - 1
52240 var mul = 1
52241 var sub = 0
52242 this[offset + i] = value & 0xFF
52243 while (--i >= 0 && (mul *= 0x100)) {
52244 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
52245 sub = 1
52246 }
52247 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
52248 }
52249
52250 return offset + byteLength
52251 }
52252
52253 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
52254 value = +value
52255 offset = offset >>> 0
52256 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
52257 if (value < 0) value = 0xff + value + 1
52258 this[offset] = (value & 0xff)
52259 return offset + 1
52260 }
52261
52262 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
52263 value = +value
52264 offset = offset >>> 0
52265 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
52266 this[offset] = (value & 0xff)
52267 this[offset + 1] = (value >>> 8)
52268 return offset + 2
52269 }
52270
52271 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
52272 value = +value
52273 offset = offset >>> 0
52274 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
52275 this[offset] = (value >>> 8)
52276 this[offset + 1] = (value & 0xff)
52277 return offset + 2
52278 }
52279
52280 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
52281 value = +value
52282 offset = offset >>> 0
52283 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
52284 this[offset] = (value & 0xff)
52285 this[offset + 1] = (value >>> 8)
52286 this[offset + 2] = (value >>> 16)
52287 this[offset + 3] = (value >>> 24)
52288 return offset + 4
52289 }
52290
52291 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
52292 value = +value
52293 offset = offset >>> 0
52294 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
52295 if (value < 0) value = 0xffffffff + value + 1
52296 this[offset] = (value >>> 24)
52297 this[offset + 1] = (value >>> 16)
52298 this[offset + 2] = (value >>> 8)
52299 this[offset + 3] = (value & 0xff)
52300 return offset + 4
52301 }
52302
52303 function checkIEEE754 (buf, value, offset, ext, max, min) {
52304 if (offset + ext > buf.length) throw new RangeError('Index out of range')
52305 if (offset < 0) throw new RangeError('Index out of range')
52306 }
52307
52308 function writeFloat (buf, value, offset, littleEndian, noAssert) {
52309 value = +value
52310 offset = offset >>> 0
52311 if (!noAssert) {
52312 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
52313 }
52314 ieee754.write(buf, value, offset, littleEndian, 23, 4)
52315 return offset + 4
52316 }
52317
52318 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
52319 return writeFloat(this, value, offset, true, noAssert)
52320 }
52321
52322 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
52323 return writeFloat(this, value, offset, false, noAssert)
52324 }
52325
52326 function writeDouble (buf, value, offset, littleEndian, noAssert) {
52327 value = +value
52328 offset = offset >>> 0
52329 if (!noAssert) {
52330 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
52331 }
52332 ieee754.write(buf, value, offset, littleEndian, 52, 8)
52333 return offset + 8
52334 }
52335
52336 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
52337 return writeDouble(this, value, offset, true, noAssert)
52338 }
52339
52340 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
52341 return writeDouble(this, value, offset, false, noAssert)
52342 }
52343
52344 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
52345 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
52346 if (!start) start = 0
52347 if (!end && end !== 0) end = this.length
52348 if (targetStart >= target.length) targetStart = target.length
52349 if (!targetStart) targetStart = 0
52350 if (end > 0 && end < start) end = start
52351
52352 // Copy 0 bytes; we're done
52353 if (end === start) return 0
52354 if (target.length === 0 || this.length === 0) return 0
52355
52356 // Fatal error conditions
52357 if (targetStart < 0) {
52358 throw new RangeError('targetStart out of bounds')
52359 }
52360 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
52361 if (end < 0) throw new RangeError('sourceEnd out of bounds')
52362
52363 // Are we oob?
52364 if (end > this.length) end = this.length
52365 if (target.length - targetStart < end - start) {
52366 end = target.length - targetStart + start
52367 }
52368
52369 var len = end - start
52370 var i
52371
52372 if (this === target && start < targetStart && targetStart < end) {
52373 // descending copy from end
52374 for (i = len - 1; i >= 0; --i) {
52375 target[i + targetStart] = this[i + start]
52376 }
52377 } else if (len < 1000) {
52378 // ascending copy from start
52379 for (i = 0; i < len; ++i) {
52380 target[i + targetStart] = this[i + start]
52381 }
52382 } else {
52383 Uint8Array.prototype.set.call(
52384 target,
52385 this.subarray(start, start + len),
52386 targetStart
52387 )
52388 }
52389
52390 return len
52391 }
52392
52393 // Usage:
52394 // buffer.fill(number[, offset[, end]])
52395 // buffer.fill(buffer[, offset[, end]])
52396 // buffer.fill(string[, offset[, end]][, encoding])
52397 Buffer.prototype.fill = function fill (val, start, end, encoding) {
52398 // Handle string cases:
52399 if (typeof val === 'string') {
52400 if (typeof start === 'string') {
52401 encoding = start
52402 start = 0
52403 end = this.length
52404 } else if (typeof end === 'string') {
52405 encoding = end
52406 end = this.length
52407 }
52408 if (val.length === 1) {
52409 var code = val.charCodeAt(0)
52410 if (code < 256) {
52411 val = code
52412 }
52413 }
52414 if (encoding !== undefined && typeof encoding !== 'string') {
52415 throw new TypeError('encoding must be a string')
52416 }
52417 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
52418 throw new TypeError('Unknown encoding: ' + encoding)
52419 }
52420 } else if (typeof val === 'number') {
52421 val = val & 255
52422 }
52423
52424 // Invalid ranges are not set to a default, so can range check early.
52425 if (start < 0 || this.length < start || this.length < end) {
52426 throw new RangeError('Out of range index')
52427 }
52428
52429 if (end <= start) {
52430 return this
52431 }
52432
52433 start = start >>> 0
52434 end = end === undefined ? this.length : end >>> 0
52435
52436 if (!val) val = 0
52437
52438 var i
52439 if (typeof val === 'number') {
52440 for (i = start; i < end; ++i) {
52441 this[i] = val
52442 }
52443 } else {
52444 var bytes = Buffer.isBuffer(val)
52445 ? val
52446 : new Buffer(val, encoding)
52447 var len = bytes.length
52448 for (i = 0; i < end - start; ++i) {
52449 this[i + start] = bytes[i % len]
52450 }
52451 }
52452
52453 return this
52454 }
52455
52456 // HELPER FUNCTIONS
52457 // ================
52458
52459 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
52460
52461 function base64clean (str) {
52462 // Node strips out invalid characters like \n and \t from the string, base64-js does not
52463 str = str.trim().replace(INVALID_BASE64_RE, '')
52464 // Node converts strings with length < 2 to ''
52465 if (str.length < 2) return ''
52466 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
52467 while (str.length % 4 !== 0) {
52468 str = str + '='
52469 }
52470 return str
52471 }
52472
52473 function toHex (n) {
52474 if (n < 16) return '0' + n.toString(16)
52475 return n.toString(16)
52476 }
52477
52478 function utf8ToBytes (string, units) {
52479 units = units || Infinity
52480 var codePoint
52481 var length = string.length
52482 var leadSurrogate = null
52483 var bytes = []
52484
52485 for (var i = 0; i < length; ++i) {
52486 codePoint = string.charCodeAt(i)
52487
52488 // is surrogate component
52489 if (codePoint > 0xD7FF && codePoint < 0xE000) {
52490 // last char was a lead
52491 if (!leadSurrogate) {
52492 // no lead yet
52493 if (codePoint > 0xDBFF) {
52494 // unexpected trail
52495 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52496 continue
52497 } else if (i + 1 === length) {
52498 // unpaired lead
52499 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52500 continue
52501 }
52502
52503 // valid lead
52504 leadSurrogate = codePoint
52505
52506 continue
52507 }
52508
52509 // 2 leads in a row
52510 if (codePoint < 0xDC00) {
52511 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52512 leadSurrogate = codePoint
52513 continue
52514 }
52515
52516 // valid surrogate pair
52517 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
52518 } else if (leadSurrogate) {
52519 // valid bmp char, but last char was a lead
52520 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52521 }
52522
52523 leadSurrogate = null
52524
52525 // encode utf8
52526 if (codePoint < 0x80) {
52527 if ((units -= 1) < 0) break
52528 bytes.push(codePoint)
52529 } else if (codePoint < 0x800) {
52530 if ((units -= 2) < 0) break
52531 bytes.push(
52532 codePoint >> 0x6 | 0xC0,
52533 codePoint & 0x3F | 0x80
52534 )
52535 } else if (codePoint < 0x10000) {
52536 if ((units -= 3) < 0) break
52537 bytes.push(
52538 codePoint >> 0xC | 0xE0,
52539 codePoint >> 0x6 & 0x3F | 0x80,
52540 codePoint & 0x3F | 0x80
52541 )
52542 } else if (codePoint < 0x110000) {
52543 if ((units -= 4) < 0) break
52544 bytes.push(
52545 codePoint >> 0x12 | 0xF0,
52546 codePoint >> 0xC & 0x3F | 0x80,
52547 codePoint >> 0x6 & 0x3F | 0x80,
52548 codePoint & 0x3F | 0x80
52549 )
52550 } else {
52551 throw new Error('Invalid code point')
52552 }
52553 }
52554
52555 return bytes
52556 }
52557
52558 function asciiToBytes (str) {
52559 var byteArray = []
52560 for (var i = 0; i < str.length; ++i) {
52561 // Node's code seems to be doing this and not & 0x7F..
52562 byteArray.push(str.charCodeAt(i) & 0xFF)
52563 }
52564 return byteArray
52565 }
52566
52567 function utf16leToBytes (str, units) {
52568 var c, hi, lo
52569 var byteArray = []
52570 for (var i = 0; i < str.length; ++i) {
52571 if ((units -= 2) < 0) break
52572
52573 c = str.charCodeAt(i)
52574 hi = c >> 8
52575 lo = c % 256
52576 byteArray.push(lo)
52577 byteArray.push(hi)
52578 }
52579
52580 return byteArray
52581 }
52582
52583 function base64ToBytes (str) {
52584 return base64.toByteArray(base64clean(str))
52585 }
52586
52587 function blitBuffer (src, dst, offset, length) {
52588 for (var i = 0; i < length; ++i) {
52589 if ((i + offset >= dst.length) || (i >= src.length)) break
52590 dst[i + offset] = src[i]
52591 }
52592 return i
52593 }
52594
52595 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
52596 function isArrayBufferView (obj) {
52597 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
52598 }
52599
52600 function numberIsNaN (obj) {
52601 return obj !== obj // eslint-disable-line no-self-compare
52602 }
52603
52604 },{"base64-js":16,"ieee754":93}],48:[function(require,module,exports){
52605 (function (Buffer){
52606 var Transform = require('stream').Transform
52607 var inherits = require('inherits')
52608 var StringDecoder = require('string_decoder').StringDecoder
52609 module.exports = CipherBase
52610 inherits(CipherBase, Transform)
52611 function CipherBase (hashMode) {
52612 Transform.call(this)
52613 this.hashMode = typeof hashMode === 'string'
52614 if (this.hashMode) {
52615 this[hashMode] = this._finalOrDigest
52616 } else {
52617 this.final = this._finalOrDigest
52618 }
52619 this._decoder = null
52620 this._encoding = null
52621 }
52622 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
52623 if (typeof data === 'string') {
52624 data = new Buffer(data, inputEnc)
52625 }
52626 var outData = this._update(data)
52627 if (this.hashMode) {
52628 return this
52629 }
52630 if (outputEnc) {
52631 outData = this._toString(outData, outputEnc)
52632 }
52633 return outData
52634 }
52635
52636 CipherBase.prototype.setAutoPadding = function () {}
52637
52638 CipherBase.prototype.getAuthTag = function () {
52639 throw new Error('trying to get auth tag in unsupported state')
52640 }
52641
52642 CipherBase.prototype.setAuthTag = function () {
52643 throw new Error('trying to set auth tag in unsupported state')
52644 }
52645
52646 CipherBase.prototype.setAAD = function () {
52647 throw new Error('trying to set aad in unsupported state')
52648 }
52649
52650 CipherBase.prototype._transform = function (data, _, next) {
52651 var err
52652 try {
52653 if (this.hashMode) {
52654 this._update(data)
52655 } else {
52656 this.push(this._update(data))
52657 }
52658 } catch (e) {
52659 err = e
52660 } finally {
52661 next(err)
52662 }
52663 }
52664 CipherBase.prototype._flush = function (done) {
52665 var err
52666 try {
52667 this.push(this._final())
52668 } catch (e) {
52669 err = e
52670 } finally {
52671 done(err)
52672 }
52673 }
52674 CipherBase.prototype._finalOrDigest = function (outputEnc) {
52675 var outData = this._final() || new Buffer('')
52676 if (outputEnc) {
52677 outData = this._toString(outData, outputEnc, true)
52678 }
52679 return outData
52680 }
52681
52682 CipherBase.prototype._toString = function (value, enc, fin) {
52683 if (!this._decoder) {
52684 this._decoder = new StringDecoder(enc)
52685 this._encoding = enc
52686 }
52687 if (this._encoding !== enc) {
52688 throw new Error('can\'t switch encodings')
52689 }
52690 var out = this._decoder.write(value)
52691 if (fin) {
52692 out += this._decoder.end()
52693 }
52694 return out
52695 }
52696
52697 }).call(this,require("buffer").Buffer)
52698 },{"buffer":47,"inherits":95,"stream":143,"string_decoder":144}],49:[function(require,module,exports){
52699 (function (Buffer){
52700 // Copyright Joyent, Inc. and other Node contributors.
52701 //
52702 // Permission is hereby granted, free of charge, to any person obtaining a
52703 // copy of this software and associated documentation files (the
52704 // "Software"), to deal in the Software without restriction, including
52705 // without limitation the rights to use, copy, modify, merge, publish,
52706 // distribute, sublicense, and/or sell copies of the Software, and to permit
52707 // persons to whom the Software is furnished to do so, subject to the
52708 // following conditions:
52709 //
52710 // The above copyright notice and this permission notice shall be included
52711 // in all copies or substantial portions of the Software.
52712 //
52713 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
52714 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
52715 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
52716 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
52717 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
52718 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
52719 // USE OR OTHER DEALINGS IN THE SOFTWARE.
52720
52721 // NOTE: These type checking functions intentionally don't use `instanceof`
52722 // because it is fragile and can be easily faked with `Object.create()`.
52723
52724 function isArray(arg) {
52725 if (Array.isArray) {
52726 return Array.isArray(arg);
52727 }
52728 return objectToString(arg) === '[object Array]';
52729 }
52730 exports.isArray = isArray;
52731
52732 function isBoolean(arg) {
52733 return typeof arg === 'boolean';
52734 }
52735 exports.isBoolean = isBoolean;
52736
52737 function isNull(arg) {
52738 return arg === null;
52739 }
52740 exports.isNull = isNull;
52741
52742 function isNullOrUndefined(arg) {
52743 return arg == null;
52744 }
52745 exports.isNullOrUndefined = isNullOrUndefined;
52746
52747 function isNumber(arg) {
52748 return typeof arg === 'number';
52749 }
52750 exports.isNumber = isNumber;
52751
52752 function isString(arg) {
52753 return typeof arg === 'string';
52754 }
52755 exports.isString = isString;
52756
52757 function isSymbol(arg) {
52758 return typeof arg === 'symbol';
52759 }
52760 exports.isSymbol = isSymbol;
52761
52762 function isUndefined(arg) {
52763 return arg === void 0;
52764 }
52765 exports.isUndefined = isUndefined;
52766
52767 function isRegExp(re) {
52768 return objectToString(re) === '[object RegExp]';
52769 }
52770 exports.isRegExp = isRegExp;
52771
52772 function isObject(arg) {
52773 return typeof arg === 'object' && arg !== null;
52774 }
52775 exports.isObject = isObject;
52776
52777 function isDate(d) {
52778 return objectToString(d) === '[object Date]';
52779 }
52780 exports.isDate = isDate;
52781
52782 function isError(e) {
52783 return (objectToString(e) === '[object Error]' || e instanceof Error);
52784 }
52785 exports.isError = isError;
52786
52787 function isFunction(arg) {
52788 return typeof arg === 'function';
52789 }
52790 exports.isFunction = isFunction;
52791
52792 function isPrimitive(arg) {
52793 return arg === null ||
52794 typeof arg === 'boolean' ||
52795 typeof arg === 'number' ||
52796 typeof arg === 'string' ||
52797 typeof arg === 'symbol' || // ES6 symbol
52798 typeof arg === 'undefined';
52799 }
52800 exports.isPrimitive = isPrimitive;
52801
52802 exports.isBuffer = Buffer.isBuffer;
52803
52804 function objectToString(o) {
52805 return Object.prototype.toString.call(o);
52806 }
52807
52808 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
52809 },{"../../is-buffer/index.js":96}],50:[function(require,module,exports){
52810 (function (Buffer){
52811 var elliptic = require('elliptic');
52812 var BN = require('bn.js');
52813
52814 module.exports = function createECDH(curve) {
52815 return new ECDH(curve);
52816 };
52817
52818 var aliases = {
52819 secp256k1: {
52820 name: 'secp256k1',
52821 byteLength: 32
52822 },
52823 secp224r1: {
52824 name: 'p224',
52825 byteLength: 28
52826 },
52827 prime256v1: {
52828 name: 'p256',
52829 byteLength: 32
52830 },
52831 prime192v1: {
52832 name: 'p192',
52833 byteLength: 24
52834 },
52835 ed25519: {
52836 name: 'ed25519',
52837 byteLength: 32
52838 },
52839 secp384r1: {
52840 name: 'p384',
52841 byteLength: 48
52842 },
52843 secp521r1: {
52844 name: 'p521',
52845 byteLength: 66
52846 }
52847 };
52848
52849 aliases.p224 = aliases.secp224r1;
52850 aliases.p256 = aliases.secp256r1 = aliases.prime256v1;
52851 aliases.p192 = aliases.secp192r1 = aliases.prime192v1;
52852 aliases.p384 = aliases.secp384r1;
52853 aliases.p521 = aliases.secp521r1;
52854
52855 function ECDH(curve) {
52856 this.curveType = aliases[curve];
52857 if (!this.curveType ) {
52858 this.curveType = {
52859 name: curve
52860 };
52861 }
52862 this.curve = new elliptic.ec(this.curveType.name);
52863 this.keys = void 0;
52864 }
52865
52866 ECDH.prototype.generateKeys = function (enc, format) {
52867 this.keys = this.curve.genKeyPair();
52868 return this.getPublicKey(enc, format);
52869 };
52870
52871 ECDH.prototype.computeSecret = function (other, inenc, enc) {
52872 inenc = inenc || 'utf8';
52873 if (!Buffer.isBuffer(other)) {
52874 other = new Buffer(other, inenc);
52875 }
52876 var otherPub = this.curve.keyFromPublic(other).getPublic();
52877 var out = otherPub.mul(this.keys.getPrivate()).getX();
52878 return formatReturnValue(out, enc, this.curveType.byteLength);
52879 };
52880
52881 ECDH.prototype.getPublicKey = function (enc, format) {
52882 var key = this.keys.getPublic(format === 'compressed', true);
52883 if (format === 'hybrid') {
52884 if (key[key.length - 1] % 2) {
52885 key[0] = 7;
52886 } else {
52887 key [0] = 6;
52888 }
52889 }
52890 return formatReturnValue(key, enc);
52891 };
52892
52893 ECDH.prototype.getPrivateKey = function (enc) {
52894 return formatReturnValue(this.keys.getPrivate(), enc);
52895 };
52896
52897 ECDH.prototype.setPublicKey = function (pub, enc) {
52898 enc = enc || 'utf8';
52899 if (!Buffer.isBuffer(pub)) {
52900 pub = new Buffer(pub, enc);
52901 }
52902 this.keys._importPublic(pub);
52903 return this;
52904 };
52905
52906 ECDH.prototype.setPrivateKey = function (priv, enc) {
52907 enc = enc || 'utf8';
52908 if (!Buffer.isBuffer(priv)) {
52909 priv = new Buffer(priv, enc);
52910 }
52911 var _priv = new BN(priv);
52912 _priv = _priv.toString(16);
52913 this.keys._importPrivate(_priv);
52914 return this;
52915 };
52916
52917 function formatReturnValue(bn, enc, len) {
52918 if (!Array.isArray(bn)) {
52919 bn = bn.toArray();
52920 }
52921 var buf = new Buffer(bn);
52922 if (len && buf.length < len) {
52923 var zeros = new Buffer(len - buf.length);
52924 zeros.fill(0);
52925 buf = Buffer.concat([zeros, buf]);
52926 }
52927 if (!enc) {
52928 return buf;
52929 } else {
52930 return buf.toString(enc);
52931 }
52932 }
52933
52934 }).call(this,require("buffer").Buffer)
52935 },{"bn.js":17,"buffer":47,"elliptic":67}],51:[function(require,module,exports){
52936 (function (Buffer){
52937 'use strict'
52938 var inherits = require('inherits')
52939 var md5 = require('./md5')
52940 var RIPEMD160 = require('ripemd160')
52941 var sha = require('sha.js')
52942
52943 var Base = require('cipher-base')
52944
52945 function HashNoConstructor (hash) {
52946 Base.call(this, 'digest')
52947
52948 this._hash = hash
52949 this.buffers = []
52950 }
52951
52952 inherits(HashNoConstructor, Base)
52953
52954 HashNoConstructor.prototype._update = function (data) {
52955 this.buffers.push(data)
52956 }
52957
52958 HashNoConstructor.prototype._final = function () {
52959 var buf = Buffer.concat(this.buffers)
52960 var r = this._hash(buf)
52961 this.buffers = null
52962
52963 return r
52964 }
52965
52966 function Hash (hash) {
52967 Base.call(this, 'digest')
52968
52969 this._hash = hash
52970 }
52971
52972 inherits(Hash, Base)
52973
52974 Hash.prototype._update = function (data) {
52975 this._hash.update(data)
52976 }
52977
52978 Hash.prototype._final = function () {
52979 return this._hash.digest()
52980 }
52981
52982 module.exports = function createHash (alg) {
52983 alg = alg.toLowerCase()
52984 if (alg === 'md5') return new HashNoConstructor(md5)
52985 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
52986
52987 return new Hash(sha(alg))
52988 }
52989
52990 }).call(this,require("buffer").Buffer)
52991 },{"./md5":53,"buffer":47,"cipher-base":48,"inherits":95,"ripemd160":133,"sha.js":136}],52:[function(require,module,exports){
52992 (function (Buffer){
52993 'use strict'
52994 var intSize = 4
52995 var zeroBuffer = new Buffer(intSize)
52996 zeroBuffer.fill(0)
52997
52998 var charSize = 8
52999 var hashSize = 16
53000
53001 function toArray (buf) {
53002 if ((buf.length % intSize) !== 0) {
53003 var len = buf.length + (intSize - (buf.length % intSize))
53004 buf = Buffer.concat([buf, zeroBuffer], len)
53005 }
53006
53007 var arr = new Array(buf.length >>> 2)
53008 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
53009 arr[j] = buf.readInt32LE(i)
53010 }
53011
53012 return arr
53013 }
53014
53015 module.exports = function hash (buf, fn) {
53016 var arr = fn(toArray(buf), buf.length * charSize)
53017 buf = new Buffer(hashSize)
53018 for (var i = 0; i < arr.length; i++) {
53019 buf.writeInt32LE(arr[i], i << 2, true)
53020 }
53021 return buf
53022 }
53023
53024 }).call(this,require("buffer").Buffer)
53025 },{"buffer":47}],53:[function(require,module,exports){
53026 'use strict'
53027 /*
53028 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
53029 * Digest Algorithm, as defined in RFC 1321.
53030 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
53031 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
53032 * Distributed under the BSD License
53033 * See http://pajhome.org.uk/crypt/md5 for more info.
53034 */
53035
53036 var makeHash = require('./make-hash')
53037
53038 /*
53039 * Calculate the MD5 of an array of little-endian words, and a bit length
53040 */
53041 function core_md5 (x, len) {
53042 /* append padding */
53043 x[len >> 5] |= 0x80 << ((len) % 32)
53044 x[(((len + 64) >>> 9) << 4) + 14] = len
53045
53046 var a = 1732584193
53047 var b = -271733879
53048 var c = -1732584194
53049 var d = 271733878
53050
53051 for (var i = 0; i < x.length; i += 16) {
53052 var olda = a
53053 var oldb = b
53054 var oldc = c
53055 var oldd = d
53056
53057 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
53058 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
53059 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
53060 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
53061 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
53062 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
53063 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
53064 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
53065 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
53066 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
53067 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
53068 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
53069 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
53070 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
53071 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
53072 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
53073
53074 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
53075 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
53076 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
53077 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
53078 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
53079 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
53080 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
53081 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
53082 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
53083 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
53084 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
53085 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
53086 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
53087 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
53088 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
53089 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
53090
53091 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
53092 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
53093 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
53094 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
53095 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
53096 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
53097 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
53098 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
53099 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
53100 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
53101 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
53102 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
53103 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
53104 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
53105 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
53106 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
53107
53108 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
53109 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
53110 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
53111 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
53112 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
53113 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
53114 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
53115 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
53116 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
53117 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
53118 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
53119 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
53120 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
53121 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
53122 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
53123 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
53124
53125 a = safe_add(a, olda)
53126 b = safe_add(b, oldb)
53127 c = safe_add(c, oldc)
53128 d = safe_add(d, oldd)
53129 }
53130
53131 return [a, b, c, d]
53132 }
53133
53134 /*
53135 * These functions implement the four basic operations the algorithm uses.
53136 */
53137 function md5_cmn (q, a, b, x, s, t) {
53138 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
53139 }
53140
53141 function md5_ff (a, b, c, d, x, s, t) {
53142 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
53143 }
53144
53145 function md5_gg (a, b, c, d, x, s, t) {
53146 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
53147 }
53148
53149 function md5_hh (a, b, c, d, x, s, t) {
53150 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
53151 }
53152
53153 function md5_ii (a, b, c, d, x, s, t) {
53154 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
53155 }
53156
53157 /*
53158 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
53159 * to work around bugs in some JS interpreters.
53160 */
53161 function safe_add (x, y) {
53162 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
53163 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
53164 return (msw << 16) | (lsw & 0xFFFF)
53165 }
53166
53167 /*
53168 * Bitwise rotate a 32-bit number to the left.
53169 */
53170 function bit_rol (num, cnt) {
53171 return (num << cnt) | (num >>> (32 - cnt))
53172 }
53173
53174 module.exports = function md5 (buf) {
53175 return makeHash(buf, core_md5)
53176 }
53177
53178 },{"./make-hash":52}],54:[function(require,module,exports){
53179 'use strict'
53180 var inherits = require('inherits')
53181 var Legacy = require('./legacy')
53182 var Base = require('cipher-base')
53183 var Buffer = require('safe-buffer').Buffer
53184 var md5 = require('create-hash/md5')
53185 var RIPEMD160 = require('ripemd160')
53186
53187 var sha = require('sha.js')
53188
53189 var ZEROS = Buffer.alloc(128)
53190
53191 function Hmac (alg, key) {
53192 Base.call(this, 'digest')
53193 if (typeof key === 'string') {
53194 key = Buffer.from(key)
53195 }
53196
53197 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
53198
53199 this._alg = alg
53200 this._key = key
53201 if (key.length > blocksize) {
53202 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
53203 key = hash.update(key).digest()
53204 } else if (key.length < blocksize) {
53205 key = Buffer.concat([key, ZEROS], blocksize)
53206 }
53207
53208 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
53209 var opad = this._opad = Buffer.allocUnsafe(blocksize)
53210
53211 for (var i = 0; i < blocksize; i++) {
53212 ipad[i] = key[i] ^ 0x36
53213 opad[i] = key[i] ^ 0x5C
53214 }
53215 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
53216 this._hash.update(ipad)
53217 }
53218
53219 inherits(Hmac, Base)
53220
53221 Hmac.prototype._update = function (data) {
53222 this._hash.update(data)
53223 }
53224
53225 Hmac.prototype._final = function () {
53226 var h = this._hash.digest()
53227 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
53228 return hash.update(this._opad).update(h).digest()
53229 }
53230
53231 module.exports = function createHmac (alg, key) {
53232 alg = alg.toLowerCase()
53233 if (alg === 'rmd160' || alg === 'ripemd160') {
53234 return new Hmac('rmd160', key)
53235 }
53236 if (alg === 'md5') {
53237 return new Legacy(md5, key)
53238 }
53239 return new Hmac(alg, key)
53240 }
53241
53242 },{"./legacy":55,"cipher-base":48,"create-hash/md5":53,"inherits":95,"ripemd160":133,"safe-buffer":134,"sha.js":136}],55:[function(require,module,exports){
53243 'use strict'
53244 var inherits = require('inherits')
53245 var Buffer = require('safe-buffer').Buffer
53246
53247 var Base = require('cipher-base')
53248
53249 var ZEROS = Buffer.alloc(128)
53250 var blocksize = 64
53251
53252 function Hmac (alg, key) {
53253 Base.call(this, 'digest')
53254 if (typeof key === 'string') {
53255 key = Buffer.from(key)
53256 }
53257
53258 this._alg = alg
53259 this._key = key
53260
53261 if (key.length > blocksize) {
53262 key = alg(key)
53263 } else if (key.length < blocksize) {
53264 key = Buffer.concat([key, ZEROS], blocksize)
53265 }
53266
53267 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
53268 var opad = this._opad = Buffer.allocUnsafe(blocksize)
53269
53270 for (var i = 0; i < blocksize; i++) {
53271 ipad[i] = key[i] ^ 0x36
53272 opad[i] = key[i] ^ 0x5C
53273 }
53274
53275 this._hash = [ipad]
53276 }
53277
53278 inherits(Hmac, Base)
53279
53280 Hmac.prototype._update = function (data) {
53281 this._hash.push(data)
53282 }
53283
53284 Hmac.prototype._final = function () {
53285 var h = this._alg(Buffer.concat(this._hash))
53286 return this._alg(Buffer.concat([this._opad, h]))
53287 }
53288 module.exports = Hmac
53289
53290 },{"cipher-base":48,"inherits":95,"safe-buffer":134}],56:[function(require,module,exports){
53291 'use strict'
53292
53293 exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')
53294 exports.createHash = exports.Hash = require('create-hash')
53295 exports.createHmac = exports.Hmac = require('create-hmac')
53296
53297 var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(Object.keys(require('browserify-sign/algos')))
53298 exports.getHashes = function () {
53299 return hashes
53300 }
53301
53302 var p = require('pbkdf2')
53303 exports.pbkdf2 = p.pbkdf2
53304 exports.pbkdf2Sync = p.pbkdf2Sync
53305
53306 var aes = require('browserify-cipher')
53307 ;[
53308 'Cipher',
53309 'createCipher',
53310 'Cipheriv',
53311 'createCipheriv',
53312 'Decipher',
53313 'createDecipher',
53314 'Decipheriv',
53315 'createDecipheriv',
53316 'getCiphers',
53317 'listCiphers'
53318 ].forEach(function (key) {
53319 exports[key] = aes[key]
53320 })
53321
53322 var dh = require('diffie-hellman')
53323 ;[
53324 'DiffieHellmanGroup',
53325 'createDiffieHellmanGroup',
53326 'getDiffieHellman',
53327 'createDiffieHellman',
53328 'DiffieHellman'
53329 ].forEach(function (key) {
53330 exports[key] = dh[key]
53331 })
53332
53333 var sign = require('browserify-sign')
53334 ;[
53335 'createSign',
53336 'Sign',
53337 'createVerify',
53338 'Verify'
53339 ].forEach(function (key) {
53340 exports[key] = sign[key]
53341 })
53342
53343 exports.createECDH = require('create-ecdh')
53344
53345 var publicEncrypt = require('public-encrypt')
53346
53347 ;[
53348 'publicEncrypt',
53349 'privateEncrypt',
53350 'publicDecrypt',
53351 'privateDecrypt'
53352 ].forEach(function (key) {
53353 exports[key] = publicEncrypt[key]
53354 })
53355
53356 // the least I can do is make error messages for the rest of the node.js/crypto api.
53357 ;[
53358 'createCredentials'
53359 ].forEach(function (name) {
53360 exports[name] = function () {
53361 throw new Error([
53362 'sorry, ' + name + ' is not implemented yet',
53363 'we accept pull requests',
53364 'https://github.com/crypto-browserify/crypto-browserify'
53365 ].join('\n'))
53366 }
53367 })
53368
53369 },{"browserify-cipher":35,"browserify-sign":42,"browserify-sign/algos":39,"create-ecdh":50,"create-hash":51,"create-hmac":54,"diffie-hellman":63,"pbkdf2":106,"public-encrypt":113,"randombytes":119}],57:[function(require,module,exports){
53370 'use strict';
53371
53372 exports.utils = require('./des/utils');
53373 exports.Cipher = require('./des/cipher');
53374 exports.DES = require('./des/des');
53375 exports.CBC = require('./des/cbc');
53376 exports.EDE = require('./des/ede');
53377
53378 },{"./des/cbc":58,"./des/cipher":59,"./des/des":60,"./des/ede":61,"./des/utils":62}],58:[function(require,module,exports){
53379 'use strict';
53380
53381 var assert = require('minimalistic-assert');
53382 var inherits = require('inherits');
53383
53384 var proto = {};
53385
53386 function CBCState(iv) {
53387 assert.equal(iv.length, 8, 'Invalid IV length');
53388
53389 this.iv = new Array(8);
53390 for (var i = 0; i < this.iv.length; i++)
53391 this.iv[i] = iv[i];
53392 }
53393
53394 function instantiate(Base) {
53395 function CBC(options) {
53396 Base.call(this, options);
53397 this._cbcInit();
53398 }
53399 inherits(CBC, Base);
53400
53401 var keys = Object.keys(proto);
53402 for (var i = 0; i < keys.length; i++) {
53403 var key = keys[i];
53404 CBC.prototype[key] = proto[key];
53405 }
53406
53407 CBC.create = function create(options) {
53408 return new CBC(options);
53409 };
53410
53411 return CBC;
53412 }
53413
53414 exports.instantiate = instantiate;
53415
53416 proto._cbcInit = function _cbcInit() {
53417 var state = new CBCState(this.options.iv);
53418 this._cbcState = state;
53419 };
53420
53421 proto._update = function _update(inp, inOff, out, outOff) {
53422 var state = this._cbcState;
53423 var superProto = this.constructor.super_.prototype;
53424
53425 var iv = state.iv;
53426 if (this.type === 'encrypt') {
53427 for (var i = 0; i < this.blockSize; i++)
53428 iv[i] ^= inp[inOff + i];
53429
53430 superProto._update.call(this, iv, 0, out, outOff);
53431
53432 for (var i = 0; i < this.blockSize; i++)
53433 iv[i] = out[outOff + i];
53434 } else {
53435 superProto._update.call(this, inp, inOff, out, outOff);
53436
53437 for (var i = 0; i < this.blockSize; i++)
53438 out[outOff + i] ^= iv[i];
53439
53440 for (var i = 0; i < this.blockSize; i++)
53441 iv[i] = inp[inOff + i];
53442 }
53443 };
53444
53445 },{"inherits":95,"minimalistic-assert":99}],59:[function(require,module,exports){
53446 'use strict';
53447
53448 var assert = require('minimalistic-assert');
53449
53450 function Cipher(options) {
53451 this.options = options;
53452
53453 this.type = this.options.type;
53454 this.blockSize = 8;
53455 this._init();
53456
53457 this.buffer = new Array(this.blockSize);
53458 this.bufferOff = 0;
53459 }
53460 module.exports = Cipher;
53461
53462 Cipher.prototype._init = function _init() {
53463 // Might be overrided
53464 };
53465
53466 Cipher.prototype.update = function update(data) {
53467 if (data.length === 0)
53468 return [];
53469
53470 if (this.type === 'decrypt')
53471 return this._updateDecrypt(data);
53472 else
53473 return this._updateEncrypt(data);
53474 };
53475
53476 Cipher.prototype._buffer = function _buffer(data, off) {
53477 // Append data to buffer
53478 var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
53479 for (var i = 0; i < min; i++)
53480 this.buffer[this.bufferOff + i] = data[off + i];
53481 this.bufferOff += min;
53482
53483 // Shift next
53484 return min;
53485 };
53486
53487 Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
53488 this._update(this.buffer, 0, out, off);
53489 this.bufferOff = 0;
53490 return this.blockSize;
53491 };
53492
53493 Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
53494 var inputOff = 0;
53495 var outputOff = 0;
53496
53497 var count = ((this.bufferOff + data.length) / this.blockSize) | 0;
53498 var out = new Array(count * this.blockSize);
53499
53500 if (this.bufferOff !== 0) {
53501 inputOff += this._buffer(data, inputOff);
53502
53503 if (this.bufferOff === this.buffer.length)
53504 outputOff += this._flushBuffer(out, outputOff);
53505 }
53506
53507 // Write blocks
53508 var max = data.length - ((data.length - inputOff) % this.blockSize);
53509 for (; inputOff < max; inputOff += this.blockSize) {
53510 this._update(data, inputOff, out, outputOff);
53511 outputOff += this.blockSize;
53512 }
53513
53514 // Queue rest
53515 for (; inputOff < data.length; inputOff++, this.bufferOff++)
53516 this.buffer[this.bufferOff] = data[inputOff];
53517
53518 return out;
53519 };
53520
53521 Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
53522 var inputOff = 0;
53523 var outputOff = 0;
53524
53525 var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
53526 var out = new Array(count * this.blockSize);
53527
53528 // TODO(indutny): optimize it, this is far from optimal
53529 for (; count > 0; count--) {
53530 inputOff += this._buffer(data, inputOff);
53531 outputOff += this._flushBuffer(out, outputOff);
53532 }
53533
53534 // Buffer rest of the input
53535 inputOff += this._buffer(data, inputOff);
53536
53537 return out;
53538 };
53539
53540 Cipher.prototype.final = function final(buffer) {
53541 var first;
53542 if (buffer)
53543 first = this.update(buffer);
53544
53545 var last;
53546 if (this.type === 'encrypt')
53547 last = this._finalEncrypt();
53548 else
53549 last = this._finalDecrypt();
53550
53551 if (first)
53552 return first.concat(last);
53553 else
53554 return last;
53555 };
53556
53557 Cipher.prototype._pad = function _pad(buffer, off) {
53558 if (off === 0)
53559 return false;
53560
53561 while (off < buffer.length)
53562 buffer[off++] = 0;
53563
53564 return true;
53565 };
53566
53567 Cipher.prototype._finalEncrypt = function _finalEncrypt() {
53568 if (!this._pad(this.buffer, this.bufferOff))
53569 return [];
53570
53571 var out = new Array(this.blockSize);
53572 this._update(this.buffer, 0, out, 0);
53573 return out;
53574 };
53575
53576 Cipher.prototype._unpad = function _unpad(buffer) {
53577 return buffer;
53578 };
53579
53580 Cipher.prototype._finalDecrypt = function _finalDecrypt() {
53581 assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
53582 var out = new Array(this.blockSize);
53583 this._flushBuffer(out, 0);
53584
53585 return this._unpad(out);
53586 };
53587
53588 },{"minimalistic-assert":99}],60:[function(require,module,exports){
53589 'use strict';
53590
53591 var assert = require('minimalistic-assert');
53592 var inherits = require('inherits');
53593
53594 var des = require('../des');
53595 var utils = des.utils;
53596 var Cipher = des.Cipher;
53597
53598 function DESState() {
53599 this.tmp = new Array(2);
53600 this.keys = null;
53601 }
53602
53603 function DES(options) {
53604 Cipher.call(this, options);
53605
53606 var state = new DESState();
53607 this._desState = state;
53608
53609 this.deriveKeys(state, options.key);
53610 }
53611 inherits(DES, Cipher);
53612 module.exports = DES;
53613
53614 DES.create = function create(options) {
53615 return new DES(options);
53616 };
53617
53618 var shiftTable = [
53619 1, 1, 2, 2, 2, 2, 2, 2,
53620 1, 2, 2, 2, 2, 2, 2, 1
53621 ];
53622
53623 DES.prototype.deriveKeys = function deriveKeys(state, key) {
53624 state.keys = new Array(16 * 2);
53625
53626 assert.equal(key.length, this.blockSize, 'Invalid key length');
53627
53628 var kL = utils.readUInt32BE(key, 0);
53629 var kR = utils.readUInt32BE(key, 4);
53630
53631 utils.pc1(kL, kR, state.tmp, 0);
53632 kL = state.tmp[0];
53633 kR = state.tmp[1];
53634 for (var i = 0; i < state.keys.length; i += 2) {
53635 var shift = shiftTable[i >>> 1];
53636 kL = utils.r28shl(kL, shift);
53637 kR = utils.r28shl(kR, shift);
53638 utils.pc2(kL, kR, state.keys, i);
53639 }
53640 };
53641
53642 DES.prototype._update = function _update(inp, inOff, out, outOff) {
53643 var state = this._desState;
53644
53645 var l = utils.readUInt32BE(inp, inOff);
53646 var r = utils.readUInt32BE(inp, inOff + 4);
53647
53648 // Initial Permutation
53649 utils.ip(l, r, state.tmp, 0);
53650 l = state.tmp[0];
53651 r = state.tmp[1];
53652
53653 if (this.type === 'encrypt')
53654 this._encrypt(state, l, r, state.tmp, 0);
53655 else
53656 this._decrypt(state, l, r, state.tmp, 0);
53657
53658 l = state.tmp[0];
53659 r = state.tmp[1];
53660
53661 utils.writeUInt32BE(out, l, outOff);
53662 utils.writeUInt32BE(out, r, outOff + 4);
53663 };
53664
53665 DES.prototype._pad = function _pad(buffer, off) {
53666 var value = buffer.length - off;
53667 for (var i = off; i < buffer.length; i++)
53668 buffer[i] = value;
53669
53670 return true;
53671 };
53672
53673 DES.prototype._unpad = function _unpad(buffer) {
53674 var pad = buffer[buffer.length - 1];
53675 for (var i = buffer.length - pad; i < buffer.length; i++)
53676 assert.equal(buffer[i], pad);
53677
53678 return buffer.slice(0, buffer.length - pad);
53679 };
53680
53681 DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
53682 var l = lStart;
53683 var r = rStart;
53684
53685 // Apply f() x16 times
53686 for (var i = 0; i < state.keys.length; i += 2) {
53687 var keyL = state.keys[i];
53688 var keyR = state.keys[i + 1];
53689
53690 // f(r, k)
53691 utils.expand(r, state.tmp, 0);
53692
53693 keyL ^= state.tmp[0];
53694 keyR ^= state.tmp[1];
53695 var s = utils.substitute(keyL, keyR);
53696 var f = utils.permute(s);
53697
53698 var t = r;
53699 r = (l ^ f) >>> 0;
53700 l = t;
53701 }
53702
53703 // Reverse Initial Permutation
53704 utils.rip(r, l, out, off);
53705 };
53706
53707 DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
53708 var l = rStart;
53709 var r = lStart;
53710
53711 // Apply f() x16 times
53712 for (var i = state.keys.length - 2; i >= 0; i -= 2) {
53713 var keyL = state.keys[i];
53714 var keyR = state.keys[i + 1];
53715
53716 // f(r, k)
53717 utils.expand(l, state.tmp, 0);
53718
53719 keyL ^= state.tmp[0];
53720 keyR ^= state.tmp[1];
53721 var s = utils.substitute(keyL, keyR);
53722 var f = utils.permute(s);
53723
53724 var t = l;
53725 l = (r ^ f) >>> 0;
53726 r = t;
53727 }
53728
53729 // Reverse Initial Permutation
53730 utils.rip(l, r, out, off);
53731 };
53732
53733 },{"../des":57,"inherits":95,"minimalistic-assert":99}],61:[function(require,module,exports){
53734 'use strict';
53735
53736 var assert = require('minimalistic-assert');
53737 var inherits = require('inherits');
53738
53739 var des = require('../des');
53740 var Cipher = des.Cipher;
53741 var DES = des.DES;
53742
53743 function EDEState(type, key) {
53744 assert.equal(key.length, 24, 'Invalid key length');
53745
53746 var k1 = key.slice(0, 8);
53747 var k2 = key.slice(8, 16);
53748 var k3 = key.slice(16, 24);
53749
53750 if (type === 'encrypt') {
53751 this.ciphers = [
53752 DES.create({ type: 'encrypt', key: k1 }),
53753 DES.create({ type: 'decrypt', key: k2 }),
53754 DES.create({ type: 'encrypt', key: k3 })
53755 ];
53756 } else {
53757 this.ciphers = [
53758 DES.create({ type: 'decrypt', key: k3 }),
53759 DES.create({ type: 'encrypt', key: k2 }),
53760 DES.create({ type: 'decrypt', key: k1 })
53761 ];
53762 }
53763 }
53764
53765 function EDE(options) {
53766 Cipher.call(this, options);
53767
53768 var state = new EDEState(this.type, this.options.key);
53769 this._edeState = state;
53770 }
53771 inherits(EDE, Cipher);
53772
53773 module.exports = EDE;
53774
53775 EDE.create = function create(options) {
53776 return new EDE(options);
53777 };
53778
53779 EDE.prototype._update = function _update(inp, inOff, out, outOff) {
53780 var state = this._edeState;
53781
53782 state.ciphers[0]._update(inp, inOff, out, outOff);
53783 state.ciphers[1]._update(out, outOff, out, outOff);
53784 state.ciphers[2]._update(out, outOff, out, outOff);
53785 };
53786
53787 EDE.prototype._pad = DES.prototype._pad;
53788 EDE.prototype._unpad = DES.prototype._unpad;
53789
53790 },{"../des":57,"inherits":95,"minimalistic-assert":99}],62:[function(require,module,exports){
53791 'use strict';
53792
53793 exports.readUInt32BE = function readUInt32BE(bytes, off) {
53794 var res = (bytes[0 + off] << 24) |
53795 (bytes[1 + off] << 16) |
53796 (bytes[2 + off] << 8) |
53797 bytes[3 + off];
53798 return res >>> 0;
53799 };
53800
53801 exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
53802 bytes[0 + off] = value >>> 24;
53803 bytes[1 + off] = (value >>> 16) & 0xff;
53804 bytes[2 + off] = (value >>> 8) & 0xff;
53805 bytes[3 + off] = value & 0xff;
53806 };
53807
53808 exports.ip = function ip(inL, inR, out, off) {
53809 var outL = 0;
53810 var outR = 0;
53811
53812 for (var i = 6; i >= 0; i -= 2) {
53813 for (var j = 0; j <= 24; j += 8) {
53814 outL <<= 1;
53815 outL |= (inR >>> (j + i)) & 1;
53816 }
53817 for (var j = 0; j <= 24; j += 8) {
53818 outL <<= 1;
53819 outL |= (inL >>> (j + i)) & 1;
53820 }
53821 }
53822
53823 for (var i = 6; i >= 0; i -= 2) {
53824 for (var j = 1; j <= 25; j += 8) {
53825 outR <<= 1;
53826 outR |= (inR >>> (j + i)) & 1;
53827 }
53828 for (var j = 1; j <= 25; j += 8) {
53829 outR <<= 1;
53830 outR |= (inL >>> (j + i)) & 1;
53831 }
53832 }
53833
53834 out[off + 0] = outL >>> 0;
53835 out[off + 1] = outR >>> 0;
53836 };
53837
53838 exports.rip = function rip(inL, inR, out, off) {
53839 var outL = 0;
53840 var outR = 0;
53841
53842 for (var i = 0; i < 4; i++) {
53843 for (var j = 24; j >= 0; j -= 8) {
53844 outL <<= 1;
53845 outL |= (inR >>> (j + i)) & 1;
53846 outL <<= 1;
53847 outL |= (inL >>> (j + i)) & 1;
53848 }
53849 }
53850 for (var i = 4; i < 8; i++) {
53851 for (var j = 24; j >= 0; j -= 8) {
53852 outR <<= 1;
53853 outR |= (inR >>> (j + i)) & 1;
53854 outR <<= 1;
53855 outR |= (inL >>> (j + i)) & 1;
53856 }
53857 }
53858
53859 out[off + 0] = outL >>> 0;
53860 out[off + 1] = outR >>> 0;
53861 };
53862
53863 exports.pc1 = function pc1(inL, inR, out, off) {
53864 var outL = 0;
53865 var outR = 0;
53866
53867 // 7, 15, 23, 31, 39, 47, 55, 63
53868 // 6, 14, 22, 30, 39, 47, 55, 63
53869 // 5, 13, 21, 29, 39, 47, 55, 63
53870 // 4, 12, 20, 28
53871 for (var i = 7; i >= 5; i--) {
53872 for (var j = 0; j <= 24; j += 8) {
53873 outL <<= 1;
53874 outL |= (inR >> (j + i)) & 1;
53875 }
53876 for (var j = 0; j <= 24; j += 8) {
53877 outL <<= 1;
53878 outL |= (inL >> (j + i)) & 1;
53879 }
53880 }
53881 for (var j = 0; j <= 24; j += 8) {
53882 outL <<= 1;
53883 outL |= (inR >> (j + i)) & 1;
53884 }
53885
53886 // 1, 9, 17, 25, 33, 41, 49, 57
53887 // 2, 10, 18, 26, 34, 42, 50, 58
53888 // 3, 11, 19, 27, 35, 43, 51, 59
53889 // 36, 44, 52, 60
53890 for (var i = 1; i <= 3; i++) {
53891 for (var j = 0; j <= 24; j += 8) {
53892 outR <<= 1;
53893 outR |= (inR >> (j + i)) & 1;
53894 }
53895 for (var j = 0; j <= 24; j += 8) {
53896 outR <<= 1;
53897 outR |= (inL >> (j + i)) & 1;
53898 }
53899 }
53900 for (var j = 0; j <= 24; j += 8) {
53901 outR <<= 1;
53902 outR |= (inL >> (j + i)) & 1;
53903 }
53904
53905 out[off + 0] = outL >>> 0;
53906 out[off + 1] = outR >>> 0;
53907 };
53908
53909 exports.r28shl = function r28shl(num, shift) {
53910 return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));
53911 };
53912
53913 var pc2table = [
53914 // inL => outL
53915 14, 11, 17, 4, 27, 23, 25, 0,
53916 13, 22, 7, 18, 5, 9, 16, 24,
53917 2, 20, 12, 21, 1, 8, 15, 26,
53918
53919 // inR => outR
53920 15, 4, 25, 19, 9, 1, 26, 16,
53921 5, 11, 23, 8, 12, 7, 17, 0,
53922 22, 3, 10, 14, 6, 20, 27, 24
53923 ];
53924
53925 exports.pc2 = function pc2(inL, inR, out, off) {
53926 var outL = 0;
53927 var outR = 0;
53928
53929 var len = pc2table.length >>> 1;
53930 for (var i = 0; i < len; i++) {
53931 outL <<= 1;
53932 outL |= (inL >>> pc2table[i]) & 0x1;
53933 }
53934 for (var i = len; i < pc2table.length; i++) {
53935 outR <<= 1;
53936 outR |= (inR >>> pc2table[i]) & 0x1;
53937 }
53938
53939 out[off + 0] = outL >>> 0;
53940 out[off + 1] = outR >>> 0;
53941 };
53942
53943 exports.expand = function expand(r, out, off) {
53944 var outL = 0;
53945 var outR = 0;
53946
53947 outL = ((r & 1) << 5) | (r >>> 27);
53948 for (var i = 23; i >= 15; i -= 4) {
53949 outL <<= 6;
53950 outL |= (r >>> i) & 0x3f;
53951 }
53952 for (var i = 11; i >= 3; i -= 4) {
53953 outR |= (r >>> i) & 0x3f;
53954 outR <<= 6;
53955 }
53956 outR |= ((r & 0x1f) << 1) | (r >>> 31);
53957
53958 out[off + 0] = outL >>> 0;
53959 out[off + 1] = outR >>> 0;
53960 };
53961
53962 var sTable = [
53963 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
53964 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
53965 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
53966 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,
53967
53968 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
53969 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
53970 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
53971 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,
53972
53973 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
53974 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
53975 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
53976 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,
53977
53978 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
53979 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
53980 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
53981 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,
53982
53983 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
53984 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
53985 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
53986 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,
53987
53988 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
53989 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
53990 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
53991 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,
53992
53993 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
53994 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
53995 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
53996 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,
53997
53998 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
53999 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
54000 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
54001 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
54002 ];
54003
54004 exports.substitute = function substitute(inL, inR) {
54005 var out = 0;
54006 for (var i = 0; i < 4; i++) {
54007 var b = (inL >>> (18 - i * 6)) & 0x3f;
54008 var sb = sTable[i * 0x40 + b];
54009
54010 out <<= 4;
54011 out |= sb;
54012 }
54013 for (var i = 0; i < 4; i++) {
54014 var b = (inR >>> (18 - i * 6)) & 0x3f;
54015 var sb = sTable[4 * 0x40 + i * 0x40 + b];
54016
54017 out <<= 4;
54018 out |= sb;
54019 }
54020 return out >>> 0;
54021 };
54022
54023 var permuteTable = [
54024 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,
54025 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7
54026 ];
54027
54028 exports.permute = function permute(num) {
54029 var out = 0;
54030 for (var i = 0; i < permuteTable.length; i++) {
54031 out <<= 1;
54032 out |= (num >>> permuteTable[i]) & 0x1;
54033 }
54034 return out >>> 0;
54035 };
54036
54037 exports.padSplit = function padSplit(num, size, group) {
54038 var str = num.toString(2);
54039 while (str.length < size)
54040 str = '0' + str;
54041
54042 var out = [];
54043 for (var i = 0; i < size; i += group)
54044 out.push(str.slice(i, i + group));
54045 return out.join(' ');
54046 };
54047
54048 },{}],63:[function(require,module,exports){
54049 (function (Buffer){
54050 var generatePrime = require('./lib/generatePrime')
54051 var primes = require('./lib/primes.json')
54052
54053 var DH = require('./lib/dh')
54054
54055 function getDiffieHellman (mod) {
54056 var prime = new Buffer(primes[mod].prime, 'hex')
54057 var gen = new Buffer(primes[mod].gen, 'hex')
54058
54059 return new DH(prime, gen)
54060 }
54061
54062 var ENCODINGS = {
54063 'binary': true, 'hex': true, 'base64': true
54064 }
54065
54066 function createDiffieHellman (prime, enc, generator, genc) {
54067 if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
54068 return createDiffieHellman(prime, 'binary', enc, generator)
54069 }
54070
54071 enc = enc || 'binary'
54072 genc = genc || 'binary'
54073 generator = generator || new Buffer([2])
54074
54075 if (!Buffer.isBuffer(generator)) {
54076 generator = new Buffer(generator, genc)
54077 }
54078
54079 if (typeof prime === 'number') {
54080 return new DH(generatePrime(prime, generator), generator, true)
54081 }
54082
54083 if (!Buffer.isBuffer(prime)) {
54084 prime = new Buffer(prime, enc)
54085 }
54086
54087 return new DH(prime, generator, true)
54088 }
54089
54090 exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman
54091 exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman
54092
54093 }).call(this,require("buffer").Buffer)
54094 },{"./lib/dh":64,"./lib/generatePrime":65,"./lib/primes.json":66,"buffer":47}],64:[function(require,module,exports){
54095 (function (Buffer){
54096 var BN = require('bn.js');
54097 var MillerRabin = require('miller-rabin');
54098 var millerRabin = new MillerRabin();
54099 var TWENTYFOUR = new BN(24);
54100 var ELEVEN = new BN(11);
54101 var TEN = new BN(10);
54102 var THREE = new BN(3);
54103 var SEVEN = new BN(7);
54104 var primes = require('./generatePrime');
54105 var randomBytes = require('randombytes');
54106 module.exports = DH;
54107
54108 function setPublicKey(pub, enc) {
54109 enc = enc || 'utf8';
54110 if (!Buffer.isBuffer(pub)) {
54111 pub = new Buffer(pub, enc);
54112 }
54113 this._pub = new BN(pub);
54114 return this;
54115 }
54116
54117 function setPrivateKey(priv, enc) {
54118 enc = enc || 'utf8';
54119 if (!Buffer.isBuffer(priv)) {
54120 priv = new Buffer(priv, enc);
54121 }
54122 this._priv = new BN(priv);
54123 return this;
54124 }
54125
54126 var primeCache = {};
54127 function checkPrime(prime, generator) {
54128 var gen = generator.toString('hex');
54129 var hex = [gen, prime.toString(16)].join('_');
54130 if (hex in primeCache) {
54131 return primeCache[hex];
54132 }
54133 var error = 0;
54134
54135 if (prime.isEven() ||
54136 !primes.simpleSieve ||
54137 !primes.fermatTest(prime) ||
54138 !millerRabin.test(prime)) {
54139 //not a prime so +1
54140 error += 1;
54141
54142 if (gen === '02' || gen === '05') {
54143 // we'd be able to check the generator
54144 // it would fail so +8
54145 error += 8;
54146 } else {
54147 //we wouldn't be able to test the generator
54148 // so +4
54149 error += 4;
54150 }
54151 primeCache[hex] = error;
54152 return error;
54153 }
54154 if (!millerRabin.test(prime.shrn(1))) {
54155 //not a safe prime
54156 error += 2;
54157 }
54158 var rem;
54159 switch (gen) {
54160 case '02':
54161 if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
54162 // unsuidable generator
54163 error += 8;
54164 }
54165 break;
54166 case '05':
54167 rem = prime.mod(TEN);
54168 if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
54169 // prime mod 10 needs to equal 3 or 7
54170 error += 8;
54171 }
54172 break;
54173 default:
54174 error += 4;
54175 }
54176 primeCache[hex] = error;
54177 return error;
54178 }
54179
54180 function DH(prime, generator, malleable) {
54181 this.setGenerator(generator);
54182 this.__prime = new BN(prime);
54183 this._prime = BN.mont(this.__prime);
54184 this._primeLen = prime.length;
54185 this._pub = undefined;
54186 this._priv = undefined;
54187 this._primeCode = undefined;
54188 if (malleable) {
54189 this.setPublicKey = setPublicKey;
54190 this.setPrivateKey = setPrivateKey;
54191 } else {
54192 this._primeCode = 8;
54193 }
54194 }
54195 Object.defineProperty(DH.prototype, 'verifyError', {
54196 enumerable: true,
54197 get: function () {
54198 if (typeof this._primeCode !== 'number') {
54199 this._primeCode = checkPrime(this.__prime, this.__gen);
54200 }
54201 return this._primeCode;
54202 }
54203 });
54204 DH.prototype.generateKeys = function () {
54205 if (!this._priv) {
54206 this._priv = new BN(randomBytes(this._primeLen));
54207 }
54208 this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
54209 return this.getPublicKey();
54210 };
54211
54212 DH.prototype.computeSecret = function (other) {
54213 other = new BN(other);
54214 other = other.toRed(this._prime);
54215 var secret = other.redPow(this._priv).fromRed();
54216 var out = new Buffer(secret.toArray());
54217 var prime = this.getPrime();
54218 if (out.length < prime.length) {
54219 var front = new Buffer(prime.length - out.length);
54220 front.fill(0);
54221 out = Buffer.concat([front, out]);
54222 }
54223 return out;
54224 };
54225
54226 DH.prototype.getPublicKey = function getPublicKey(enc) {
54227 return formatReturnValue(this._pub, enc);
54228 };
54229
54230 DH.prototype.getPrivateKey = function getPrivateKey(enc) {
54231 return formatReturnValue(this._priv, enc);
54232 };
54233
54234 DH.prototype.getPrime = function (enc) {
54235 return formatReturnValue(this.__prime, enc);
54236 };
54237
54238 DH.prototype.getGenerator = function (enc) {
54239 return formatReturnValue(this._gen, enc);
54240 };
54241
54242 DH.prototype.setGenerator = function (gen, enc) {
54243 enc = enc || 'utf8';
54244 if (!Buffer.isBuffer(gen)) {
54245 gen = new Buffer(gen, enc);
54246 }
54247 this.__gen = gen;
54248 this._gen = new BN(gen);
54249 return this;
54250 };
54251
54252 function formatReturnValue(bn, enc) {
54253 var buf = new Buffer(bn.toArray());
54254 if (!enc) {
54255 return buf;
54256 } else {
54257 return buf.toString(enc);
54258 }
54259 }
54260
54261 }).call(this,require("buffer").Buffer)
54262 },{"./generatePrime":65,"bn.js":17,"buffer":47,"miller-rabin":98,"randombytes":119}],65:[function(require,module,exports){
54263 var randomBytes = require('randombytes');
54264 module.exports = findPrime;
54265 findPrime.simpleSieve = simpleSieve;
54266 findPrime.fermatTest = fermatTest;
54267 var BN = require('bn.js');
54268 var TWENTYFOUR = new BN(24);
54269 var MillerRabin = require('miller-rabin');
54270 var millerRabin = new MillerRabin();
54271 var ONE = new BN(1);
54272 var TWO = new BN(2);
54273 var FIVE = new BN(5);
54274 var SIXTEEN = new BN(16);
54275 var EIGHT = new BN(8);
54276 var TEN = new BN(10);
54277 var THREE = new BN(3);
54278 var SEVEN = new BN(7);
54279 var ELEVEN = new BN(11);
54280 var FOUR = new BN(4);
54281 var TWELVE = new BN(12);
54282 var primes = null;
54283
54284 function _getPrimes() {
54285 if (primes !== null)
54286 return primes;
54287
54288 var limit = 0x100000;
54289 var res = [];
54290 res[0] = 2;
54291 for (var i = 1, k = 3; k < limit; k += 2) {
54292 var sqrt = Math.ceil(Math.sqrt(k));
54293 for (var j = 0; j < i && res[j] <= sqrt; j++)
54294 if (k % res[j] === 0)
54295 break;
54296
54297 if (i !== j && res[j] <= sqrt)
54298 continue;
54299
54300 res[i++] = k;
54301 }
54302 primes = res;
54303 return res;
54304 }
54305
54306 function simpleSieve(p) {
54307 var primes = _getPrimes();
54308
54309 for (var i = 0; i < primes.length; i++)
54310 if (p.modn(primes[i]) === 0) {
54311 if (p.cmpn(primes[i]) === 0) {
54312 return true;
54313 } else {
54314 return false;
54315 }
54316 }
54317
54318 return true;
54319 }
54320
54321 function fermatTest(p) {
54322 var red = BN.mont(p);
54323 return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
54324 }
54325
54326 function findPrime(bits, gen) {
54327 if (bits < 16) {
54328 // this is what openssl does
54329 if (gen === 2 || gen === 5) {
54330 return new BN([0x8c, 0x7b]);
54331 } else {
54332 return new BN([0x8c, 0x27]);
54333 }
54334 }
54335 gen = new BN(gen);
54336
54337 var num, n2;
54338
54339 while (true) {
54340 num = new BN(randomBytes(Math.ceil(bits / 8)));
54341 while (num.bitLength() > bits) {
54342 num.ishrn(1);
54343 }
54344 if (num.isEven()) {
54345 num.iadd(ONE);
54346 }
54347 if (!num.testn(1)) {
54348 num.iadd(TWO);
54349 }
54350 if (!gen.cmp(TWO)) {
54351 while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
54352 num.iadd(FOUR);
54353 }
54354 } else if (!gen.cmp(FIVE)) {
54355 while (num.mod(TEN).cmp(THREE)) {
54356 num.iadd(FOUR);
54357 }
54358 }
54359 n2 = num.shrn(1);
54360 if (simpleSieve(n2) && simpleSieve(num) &&
54361 fermatTest(n2) && fermatTest(num) &&
54362 millerRabin.test(n2) && millerRabin.test(num)) {
54363 return num;
54364 }
54365 }
54366
54367 }
54368
54369 },{"bn.js":17,"miller-rabin":98,"randombytes":119}],66:[function(require,module,exports){
54370 module.exports={
54371 "modp1": {
54372 "gen": "02",
54373 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"
54374 },
54375 "modp2": {
54376 "gen": "02",
54377 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"
54378 },
54379 "modp5": {
54380 "gen": "02",
54381 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"
54382 },
54383 "modp14": {
54384 "gen": "02",
54385 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"
54386 },
54387 "modp15": {
54388 "gen": "02",
54389 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"
54390 },
54391 "modp16": {
54392 "gen": "02",
54393 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
54394 },
54395 "modp17": {
54396 "gen": "02",
54397 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"
54398 },
54399 "modp18": {
54400 "gen": "02",
54401 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"
54402 }
54403 }
54404 },{}],67:[function(require,module,exports){
54405 'use strict';
54406
54407 var elliptic = exports;
54408
54409 elliptic.version = require('../package.json').version;
54410 elliptic.utils = require('./elliptic/utils');
54411 elliptic.rand = require('brorand');
54412 elliptic.curve = require('./elliptic/curve');
54413 elliptic.curves = require('./elliptic/curves');
54414
54415 // Protocols
54416 elliptic.ec = require('./elliptic/ec');
54417 elliptic.eddsa = require('./elliptic/eddsa');
54418
54419 },{"../package.json":82,"./elliptic/curve":70,"./elliptic/curves":73,"./elliptic/ec":74,"./elliptic/eddsa":77,"./elliptic/utils":81,"brorand":18}],68:[function(require,module,exports){
54420 'use strict';
54421
54422 var BN = require('bn.js');
54423 var elliptic = require('../../elliptic');
54424 var utils = elliptic.utils;
54425 var getNAF = utils.getNAF;
54426 var getJSF = utils.getJSF;
54427 var assert = utils.assert;
54428
54429 function BaseCurve(type, conf) {
54430 this.type = type;
54431 this.p = new BN(conf.p, 16);
54432
54433 // Use Montgomery, when there is no fast reduction for the prime
54434 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
54435
54436 // Useful for many curves
54437 this.zero = new BN(0).toRed(this.red);
54438 this.one = new BN(1).toRed(this.red);
54439 this.two = new BN(2).toRed(this.red);
54440
54441 // Curve configuration, optional
54442 this.n = conf.n && new BN(conf.n, 16);
54443 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
54444
54445 // Temporary arrays
54446 this._wnafT1 = new Array(4);
54447 this._wnafT2 = new Array(4);
54448 this._wnafT3 = new Array(4);
54449 this._wnafT4 = new Array(4);
54450
54451 // Generalized Greg Maxwell's trick
54452 var adjustCount = this.n && this.p.div(this.n);
54453 if (!adjustCount || adjustCount.cmpn(100) > 0) {
54454 this.redN = null;
54455 } else {
54456 this._maxwellTrick = true;
54457 this.redN = this.n.toRed(this.red);
54458 }
54459 }
54460 module.exports = BaseCurve;
54461
54462 BaseCurve.prototype.point = function point() {
54463 throw new Error('Not implemented');
54464 };
54465
54466 BaseCurve.prototype.validate = function validate() {
54467 throw new Error('Not implemented');
54468 };
54469
54470 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
54471 assert(p.precomputed);
54472 var doubles = p._getDoubles();
54473
54474 var naf = getNAF(k, 1);
54475 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
54476 I /= 3;
54477
54478 // Translate into more windowed form
54479 var repr = [];
54480 for (var j = 0; j < naf.length; j += doubles.step) {
54481 var nafW = 0;
54482 for (var k = j + doubles.step - 1; k >= j; k--)
54483 nafW = (nafW << 1) + naf[k];
54484 repr.push(nafW);
54485 }
54486
54487 var a = this.jpoint(null, null, null);
54488 var b = this.jpoint(null, null, null);
54489 for (var i = I; i > 0; i--) {
54490 for (var j = 0; j < repr.length; j++) {
54491 var nafW = repr[j];
54492 if (nafW === i)
54493 b = b.mixedAdd(doubles.points[j]);
54494 else if (nafW === -i)
54495 b = b.mixedAdd(doubles.points[j].neg());
54496 }
54497 a = a.add(b);
54498 }
54499 return a.toP();
54500 };
54501
54502 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
54503 var w = 4;
54504
54505 // Precompute window
54506 var nafPoints = p._getNAFPoints(w);
54507 w = nafPoints.wnd;
54508 var wnd = nafPoints.points;
54509
54510 // Get NAF form
54511 var naf = getNAF(k, w);
54512
54513 // Add `this`*(N+1) for every w-NAF index
54514 var acc = this.jpoint(null, null, null);
54515 for (var i = naf.length - 1; i >= 0; i--) {
54516 // Count zeroes
54517 for (var k = 0; i >= 0 && naf[i] === 0; i--)
54518 k++;
54519 if (i >= 0)
54520 k++;
54521 acc = acc.dblp(k);
54522
54523 if (i < 0)
54524 break;
54525 var z = naf[i];
54526 assert(z !== 0);
54527 if (p.type === 'affine') {
54528 // J +- P
54529 if (z > 0)
54530 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
54531 else
54532 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
54533 } else {
54534 // J +- J
54535 if (z > 0)
54536 acc = acc.add(wnd[(z - 1) >> 1]);
54537 else
54538 acc = acc.add(wnd[(-z - 1) >> 1].neg());
54539 }
54540 }
54541 return p.type === 'affine' ? acc.toP() : acc;
54542 };
54543
54544 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
54545 points,
54546 coeffs,
54547 len,
54548 jacobianResult) {
54549 var wndWidth = this._wnafT1;
54550 var wnd = this._wnafT2;
54551 var naf = this._wnafT3;
54552
54553 // Fill all arrays
54554 var max = 0;
54555 for (var i = 0; i < len; i++) {
54556 var p = points[i];
54557 var nafPoints = p._getNAFPoints(defW);
54558 wndWidth[i] = nafPoints.wnd;
54559 wnd[i] = nafPoints.points;
54560 }
54561
54562 // Comb small window NAFs
54563 for (var i = len - 1; i >= 1; i -= 2) {
54564 var a = i - 1;
54565 var b = i;
54566 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
54567 naf[a] = getNAF(coeffs[a], wndWidth[a]);
54568 naf[b] = getNAF(coeffs[b], wndWidth[b]);
54569 max = Math.max(naf[a].length, max);
54570 max = Math.max(naf[b].length, max);
54571 continue;
54572 }
54573
54574 var comb = [
54575 points[a], /* 1 */
54576 null, /* 3 */
54577 null, /* 5 */
54578 points[b] /* 7 */
54579 ];
54580
54581 // Try to avoid Projective points, if possible
54582 if (points[a].y.cmp(points[b].y) === 0) {
54583 comb[1] = points[a].add(points[b]);
54584 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
54585 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
54586 comb[1] = points[a].toJ().mixedAdd(points[b]);
54587 comb[2] = points[a].add(points[b].neg());
54588 } else {
54589 comb[1] = points[a].toJ().mixedAdd(points[b]);
54590 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
54591 }
54592
54593 var index = [
54594 -3, /* -1 -1 */
54595 -1, /* -1 0 */
54596 -5, /* -1 1 */
54597 -7, /* 0 -1 */
54598 0, /* 0 0 */
54599 7, /* 0 1 */
54600 5, /* 1 -1 */
54601 1, /* 1 0 */
54602 3 /* 1 1 */
54603 ];
54604
54605 var jsf = getJSF(coeffs[a], coeffs[b]);
54606 max = Math.max(jsf[0].length, max);
54607 naf[a] = new Array(max);
54608 naf[b] = new Array(max);
54609 for (var j = 0; j < max; j++) {
54610 var ja = jsf[0][j] | 0;
54611 var jb = jsf[1][j] | 0;
54612
54613 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
54614 naf[b][j] = 0;
54615 wnd[a] = comb;
54616 }
54617 }
54618
54619 var acc = this.jpoint(null, null, null);
54620 var tmp = this._wnafT4;
54621 for (var i = max; i >= 0; i--) {
54622 var k = 0;
54623
54624 while (i >= 0) {
54625 var zero = true;
54626 for (var j = 0; j < len; j++) {
54627 tmp[j] = naf[j][i] | 0;
54628 if (tmp[j] !== 0)
54629 zero = false;
54630 }
54631 if (!zero)
54632 break;
54633 k++;
54634 i--;
54635 }
54636 if (i >= 0)
54637 k++;
54638 acc = acc.dblp(k);
54639 if (i < 0)
54640 break;
54641
54642 for (var j = 0; j < len; j++) {
54643 var z = tmp[j];
54644 var p;
54645 if (z === 0)
54646 continue;
54647 else if (z > 0)
54648 p = wnd[j][(z - 1) >> 1];
54649 else if (z < 0)
54650 p = wnd[j][(-z - 1) >> 1].neg();
54651
54652 if (p.type === 'affine')
54653 acc = acc.mixedAdd(p);
54654 else
54655 acc = acc.add(p);
54656 }
54657 }
54658 // Zeroify references
54659 for (var i = 0; i < len; i++)
54660 wnd[i] = null;
54661
54662 if (jacobianResult)
54663 return acc;
54664 else
54665 return acc.toP();
54666 };
54667
54668 function BasePoint(curve, type) {
54669 this.curve = curve;
54670 this.type = type;
54671 this.precomputed = null;
54672 }
54673 BaseCurve.BasePoint = BasePoint;
54674
54675 BasePoint.prototype.eq = function eq(/*other*/) {
54676 throw new Error('Not implemented');
54677 };
54678
54679 BasePoint.prototype.validate = function validate() {
54680 return this.curve.validate(this);
54681 };
54682
54683 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
54684 bytes = utils.toArray(bytes, enc);
54685
54686 var len = this.p.byteLength();
54687
54688 // uncompressed, hybrid-odd, hybrid-even
54689 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
54690 bytes.length - 1 === 2 * len) {
54691 if (bytes[0] === 0x06)
54692 assert(bytes[bytes.length - 1] % 2 === 0);
54693 else if (bytes[0] === 0x07)
54694 assert(bytes[bytes.length - 1] % 2 === 1);
54695
54696 var res = this.point(bytes.slice(1, 1 + len),
54697 bytes.slice(1 + len, 1 + 2 * len));
54698
54699 return res;
54700 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
54701 bytes.length - 1 === len) {
54702 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
54703 }
54704 throw new Error('Unknown point format');
54705 };
54706
54707 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
54708 return this.encode(enc, true);
54709 };
54710
54711 BasePoint.prototype._encode = function _encode(compact) {
54712 var len = this.curve.p.byteLength();
54713 var x = this.getX().toArray('be', len);
54714
54715 if (compact)
54716 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
54717
54718 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
54719 };
54720
54721 BasePoint.prototype.encode = function encode(enc, compact) {
54722 return utils.encode(this._encode(compact), enc);
54723 };
54724
54725 BasePoint.prototype.precompute = function precompute(power) {
54726 if (this.precomputed)
54727 return this;
54728
54729 var precomputed = {
54730 doubles: null,
54731 naf: null,
54732 beta: null
54733 };
54734 precomputed.naf = this._getNAFPoints(8);
54735 precomputed.doubles = this._getDoubles(4, power);
54736 precomputed.beta = this._getBeta();
54737 this.precomputed = precomputed;
54738
54739 return this;
54740 };
54741
54742 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
54743 if (!this.precomputed)
54744 return false;
54745
54746 var doubles = this.precomputed.doubles;
54747 if (!doubles)
54748 return false;
54749
54750 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
54751 };
54752
54753 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
54754 if (this.precomputed && this.precomputed.doubles)
54755 return this.precomputed.doubles;
54756
54757 var doubles = [ this ];
54758 var acc = this;
54759 for (var i = 0; i < power; i += step) {
54760 for (var j = 0; j < step; j++)
54761 acc = acc.dbl();
54762 doubles.push(acc);
54763 }
54764 return {
54765 step: step,
54766 points: doubles
54767 };
54768 };
54769
54770 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
54771 if (this.precomputed && this.precomputed.naf)
54772 return this.precomputed.naf;
54773
54774 var res = [ this ];
54775 var max = (1 << wnd) - 1;
54776 var dbl = max === 1 ? null : this.dbl();
54777 for (var i = 1; i < max; i++)
54778 res[i] = res[i - 1].add(dbl);
54779 return {
54780 wnd: wnd,
54781 points: res
54782 };
54783 };
54784
54785 BasePoint.prototype._getBeta = function _getBeta() {
54786 return null;
54787 };
54788
54789 BasePoint.prototype.dblp = function dblp(k) {
54790 var r = this;
54791 for (var i = 0; i < k; i++)
54792 r = r.dbl();
54793 return r;
54794 };
54795
54796 },{"../../elliptic":67,"bn.js":17}],69:[function(require,module,exports){
54797 'use strict';
54798
54799 var curve = require('../curve');
54800 var elliptic = require('../../elliptic');
54801 var BN = require('bn.js');
54802 var inherits = require('inherits');
54803 var Base = curve.base;
54804
54805 var assert = elliptic.utils.assert;
54806
54807 function EdwardsCurve(conf) {
54808 // NOTE: Important as we are creating point in Base.call()
54809 this.twisted = (conf.a | 0) !== 1;
54810 this.mOneA = this.twisted && (conf.a | 0) === -1;
54811 this.extended = this.mOneA;
54812
54813 Base.call(this, 'edwards', conf);
54814
54815 this.a = new BN(conf.a, 16).umod(this.red.m);
54816 this.a = this.a.toRed(this.red);
54817 this.c = new BN(conf.c, 16).toRed(this.red);
54818 this.c2 = this.c.redSqr();
54819 this.d = new BN(conf.d, 16).toRed(this.red);
54820 this.dd = this.d.redAdd(this.d);
54821
54822 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
54823 this.oneC = (conf.c | 0) === 1;
54824 }
54825 inherits(EdwardsCurve, Base);
54826 module.exports = EdwardsCurve;
54827
54828 EdwardsCurve.prototype._mulA = function _mulA(num) {
54829 if (this.mOneA)
54830 return num.redNeg();
54831 else
54832 return this.a.redMul(num);
54833 };
54834
54835 EdwardsCurve.prototype._mulC = function _mulC(num) {
54836 if (this.oneC)
54837 return num;
54838 else
54839 return this.c.redMul(num);
54840 };
54841
54842 // Just for compatibility with Short curve
54843 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
54844 return this.point(x, y, z, t);
54845 };
54846
54847 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
54848 x = new BN(x, 16);
54849 if (!x.red)
54850 x = x.toRed(this.red);
54851
54852 var x2 = x.redSqr();
54853 var rhs = this.c2.redSub(this.a.redMul(x2));
54854 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
54855
54856 var y2 = rhs.redMul(lhs.redInvm());
54857 var y = y2.redSqrt();
54858 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
54859 throw new Error('invalid point');
54860
54861 var isOdd = y.fromRed().isOdd();
54862 if (odd && !isOdd || !odd && isOdd)
54863 y = y.redNeg();
54864
54865 return this.point(x, y);
54866 };
54867
54868 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
54869 y = new BN(y, 16);
54870 if (!y.red)
54871 y = y.toRed(this.red);
54872
54873 // x^2 = (y^2 - 1) / (d y^2 + 1)
54874 var y2 = y.redSqr();
54875 var lhs = y2.redSub(this.one);
54876 var rhs = y2.redMul(this.d).redAdd(this.one);
54877 var x2 = lhs.redMul(rhs.redInvm());
54878
54879 if (x2.cmp(this.zero) === 0) {
54880 if (odd)
54881 throw new Error('invalid point');
54882 else
54883 return this.point(this.zero, y);
54884 }
54885
54886 var x = x2.redSqrt();
54887 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
54888 throw new Error('invalid point');
54889
54890 if (x.isOdd() !== odd)
54891 x = x.redNeg();
54892
54893 return this.point(x, y);
54894 };
54895
54896 EdwardsCurve.prototype.validate = function validate(point) {
54897 if (point.isInfinity())
54898 return true;
54899
54900 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
54901 point.normalize();
54902
54903 var x2 = point.x.redSqr();
54904 var y2 = point.y.redSqr();
54905 var lhs = x2.redMul(this.a).redAdd(y2);
54906 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
54907
54908 return lhs.cmp(rhs) === 0;
54909 };
54910
54911 function Point(curve, x, y, z, t) {
54912 Base.BasePoint.call(this, curve, 'projective');
54913 if (x === null && y === null && z === null) {
54914 this.x = this.curve.zero;
54915 this.y = this.curve.one;
54916 this.z = this.curve.one;
54917 this.t = this.curve.zero;
54918 this.zOne = true;
54919 } else {
54920 this.x = new BN(x, 16);
54921 this.y = new BN(y, 16);
54922 this.z = z ? new BN(z, 16) : this.curve.one;
54923 this.t = t && new BN(t, 16);
54924 if (!this.x.red)
54925 this.x = this.x.toRed(this.curve.red);
54926 if (!this.y.red)
54927 this.y = this.y.toRed(this.curve.red);
54928 if (!this.z.red)
54929 this.z = this.z.toRed(this.curve.red);
54930 if (this.t && !this.t.red)
54931 this.t = this.t.toRed(this.curve.red);
54932 this.zOne = this.z === this.curve.one;
54933
54934 // Use extended coordinates
54935 if (this.curve.extended && !this.t) {
54936 this.t = this.x.redMul(this.y);
54937 if (!this.zOne)
54938 this.t = this.t.redMul(this.z.redInvm());
54939 }
54940 }
54941 }
54942 inherits(Point, Base.BasePoint);
54943
54944 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
54945 return Point.fromJSON(this, obj);
54946 };
54947
54948 EdwardsCurve.prototype.point = function point(x, y, z, t) {
54949 return new Point(this, x, y, z, t);
54950 };
54951
54952 Point.fromJSON = function fromJSON(curve, obj) {
54953 return new Point(curve, obj[0], obj[1], obj[2]);
54954 };
54955
54956 Point.prototype.inspect = function inspect() {
54957 if (this.isInfinity())
54958 return '<EC Point Infinity>';
54959 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
54960 ' y: ' + this.y.fromRed().toString(16, 2) +
54961 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
54962 };
54963
54964 Point.prototype.isInfinity = function isInfinity() {
54965 // XXX This code assumes that zero is always zero in red
54966 return this.x.cmpn(0) === 0 &&
54967 this.y.cmp(this.z) === 0;
54968 };
54969
54970 Point.prototype._extDbl = function _extDbl() {
54971 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
54972 // #doubling-dbl-2008-hwcd
54973 // 4M + 4S
54974
54975 // A = X1^2
54976 var a = this.x.redSqr();
54977 // B = Y1^2
54978 var b = this.y.redSqr();
54979 // C = 2 * Z1^2
54980 var c = this.z.redSqr();
54981 c = c.redIAdd(c);
54982 // D = a * A
54983 var d = this.curve._mulA(a);
54984 // E = (X1 + Y1)^2 - A - B
54985 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
54986 // G = D + B
54987 var g = d.redAdd(b);
54988 // F = G - C
54989 var f = g.redSub(c);
54990 // H = D - B
54991 var h = d.redSub(b);
54992 // X3 = E * F
54993 var nx = e.redMul(f);
54994 // Y3 = G * H
54995 var ny = g.redMul(h);
54996 // T3 = E * H
54997 var nt = e.redMul(h);
54998 // Z3 = F * G
54999 var nz = f.redMul(g);
55000 return this.curve.point(nx, ny, nz, nt);
55001 };
55002
55003 Point.prototype._projDbl = function _projDbl() {
55004 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
55005 // #doubling-dbl-2008-bbjlp
55006 // #doubling-dbl-2007-bl
55007 // and others
55008 // Generally 3M + 4S or 2M + 4S
55009
55010 // B = (X1 + Y1)^2
55011 var b = this.x.redAdd(this.y).redSqr();
55012 // C = X1^2
55013 var c = this.x.redSqr();
55014 // D = Y1^2
55015 var d = this.y.redSqr();
55016
55017 var nx;
55018 var ny;
55019 var nz;
55020 if (this.curve.twisted) {
55021 // E = a * C
55022 var e = this.curve._mulA(c);
55023 // F = E + D
55024 var f = e.redAdd(d);
55025 if (this.zOne) {
55026 // X3 = (B - C - D) * (F - 2)
55027 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
55028 // Y3 = F * (E - D)
55029 ny = f.redMul(e.redSub(d));
55030 // Z3 = F^2 - 2 * F
55031 nz = f.redSqr().redSub(f).redSub(f);
55032 } else {
55033 // H = Z1^2
55034 var h = this.z.redSqr();
55035 // J = F - 2 * H
55036 var j = f.redSub(h).redISub(h);
55037 // X3 = (B-C-D)*J
55038 nx = b.redSub(c).redISub(d).redMul(j);
55039 // Y3 = F * (E - D)
55040 ny = f.redMul(e.redSub(d));
55041 // Z3 = F * J
55042 nz = f.redMul(j);
55043 }
55044 } else {
55045 // E = C + D
55046 var e = c.redAdd(d);
55047 // H = (c * Z1)^2
55048 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
55049 // J = E - 2 * H
55050 var j = e.redSub(h).redSub(h);
55051 // X3 = c * (B - E) * J
55052 nx = this.curve._mulC(b.redISub(e)).redMul(j);
55053 // Y3 = c * E * (C - D)
55054 ny = this.curve._mulC(e).redMul(c.redISub(d));
55055 // Z3 = E * J
55056 nz = e.redMul(j);
55057 }
55058 return this.curve.point(nx, ny, nz);
55059 };
55060
55061 Point.prototype.dbl = function dbl() {
55062 if (this.isInfinity())
55063 return this;
55064
55065 // Double in extended coordinates
55066 if (this.curve.extended)
55067 return this._extDbl();
55068 else
55069 return this._projDbl();
55070 };
55071
55072 Point.prototype._extAdd = function _extAdd(p) {
55073 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
55074 // #addition-add-2008-hwcd-3
55075 // 8M
55076
55077 // A = (Y1 - X1) * (Y2 - X2)
55078 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
55079 // B = (Y1 + X1) * (Y2 + X2)
55080 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
55081 // C = T1 * k * T2
55082 var c = this.t.redMul(this.curve.dd).redMul(p.t);
55083 // D = Z1 * 2 * Z2
55084 var d = this.z.redMul(p.z.redAdd(p.z));
55085 // E = B - A
55086 var e = b.redSub(a);
55087 // F = D - C
55088 var f = d.redSub(c);
55089 // G = D + C
55090 var g = d.redAdd(c);
55091 // H = B + A
55092 var h = b.redAdd(a);
55093 // X3 = E * F
55094 var nx = e.redMul(f);
55095 // Y3 = G * H
55096 var ny = g.redMul(h);
55097 // T3 = E * H
55098 var nt = e.redMul(h);
55099 // Z3 = F * G
55100 var nz = f.redMul(g);
55101 return this.curve.point(nx, ny, nz, nt);
55102 };
55103
55104 Point.prototype._projAdd = function _projAdd(p) {
55105 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
55106 // #addition-add-2008-bbjlp
55107 // #addition-add-2007-bl
55108 // 10M + 1S
55109
55110 // A = Z1 * Z2
55111 var a = this.z.redMul(p.z);
55112 // B = A^2
55113 var b = a.redSqr();
55114 // C = X1 * X2
55115 var c = this.x.redMul(p.x);
55116 // D = Y1 * Y2
55117 var d = this.y.redMul(p.y);
55118 // E = d * C * D
55119 var e = this.curve.d.redMul(c).redMul(d);
55120 // F = B - E
55121 var f = b.redSub(e);
55122 // G = B + E
55123 var g = b.redAdd(e);
55124 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
55125 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
55126 var nx = a.redMul(f).redMul(tmp);
55127 var ny;
55128 var nz;
55129 if (this.curve.twisted) {
55130 // Y3 = A * G * (D - a * C)
55131 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
55132 // Z3 = F * G
55133 nz = f.redMul(g);
55134 } else {
55135 // Y3 = A * G * (D - C)
55136 ny = a.redMul(g).redMul(d.redSub(c));
55137 // Z3 = c * F * G
55138 nz = this.curve._mulC(f).redMul(g);
55139 }
55140 return this.curve.point(nx, ny, nz);
55141 };
55142
55143 Point.prototype.add = function add(p) {
55144 if (this.isInfinity())
55145 return p;
55146 if (p.isInfinity())
55147 return this;
55148
55149 if (this.curve.extended)
55150 return this._extAdd(p);
55151 else
55152 return this._projAdd(p);
55153 };
55154
55155 Point.prototype.mul = function mul(k) {
55156 if (this._hasDoubles(k))
55157 return this.curve._fixedNafMul(this, k);
55158 else
55159 return this.curve._wnafMul(this, k);
55160 };
55161
55162 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
55163 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
55164 };
55165
55166 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
55167 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
55168 };
55169
55170 Point.prototype.normalize = function normalize() {
55171 if (this.zOne)
55172 return this;
55173
55174 // Normalize coordinates
55175 var zi = this.z.redInvm();
55176 this.x = this.x.redMul(zi);
55177 this.y = this.y.redMul(zi);
55178 if (this.t)
55179 this.t = this.t.redMul(zi);
55180 this.z = this.curve.one;
55181 this.zOne = true;
55182 return this;
55183 };
55184
55185 Point.prototype.neg = function neg() {
55186 return this.curve.point(this.x.redNeg(),
55187 this.y,
55188 this.z,
55189 this.t && this.t.redNeg());
55190 };
55191
55192 Point.prototype.getX = function getX() {
55193 this.normalize();
55194 return this.x.fromRed();
55195 };
55196
55197 Point.prototype.getY = function getY() {
55198 this.normalize();
55199 return this.y.fromRed();
55200 };
55201
55202 Point.prototype.eq = function eq(other) {
55203 return this === other ||
55204 this.getX().cmp(other.getX()) === 0 &&
55205 this.getY().cmp(other.getY()) === 0;
55206 };
55207
55208 Point.prototype.eqXToP = function eqXToP(x) {
55209 var rx = x.toRed(this.curve.red).redMul(this.z);
55210 if (this.x.cmp(rx) === 0)
55211 return true;
55212
55213 var xc = x.clone();
55214 var t = this.curve.redN.redMul(this.z);
55215 for (;;) {
55216 xc.iadd(this.curve.n);
55217 if (xc.cmp(this.curve.p) >= 0)
55218 return false;
55219
55220 rx.redIAdd(t);
55221 if (this.x.cmp(rx) === 0)
55222 return true;
55223 }
55224 return false;
55225 };
55226
55227 // Compatibility with BaseCurve
55228 Point.prototype.toP = Point.prototype.normalize;
55229 Point.prototype.mixedAdd = Point.prototype.add;
55230
55231 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],70:[function(require,module,exports){
55232 'use strict';
55233
55234 var curve = exports;
55235
55236 curve.base = require('./base');
55237 curve.short = require('./short');
55238 curve.mont = require('./mont');
55239 curve.edwards = require('./edwards');
55240
55241 },{"./base":68,"./edwards":69,"./mont":71,"./short":72}],71:[function(require,module,exports){
55242 'use strict';
55243
55244 var curve = require('../curve');
55245 var BN = require('bn.js');
55246 var inherits = require('inherits');
55247 var Base = curve.base;
55248
55249 var elliptic = require('../../elliptic');
55250 var utils = elliptic.utils;
55251
55252 function MontCurve(conf) {
55253 Base.call(this, 'mont', conf);
55254
55255 this.a = new BN(conf.a, 16).toRed(this.red);
55256 this.b = new BN(conf.b, 16).toRed(this.red);
55257 this.i4 = new BN(4).toRed(this.red).redInvm();
55258 this.two = new BN(2).toRed(this.red);
55259 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
55260 }
55261 inherits(MontCurve, Base);
55262 module.exports = MontCurve;
55263
55264 MontCurve.prototype.validate = function validate(point) {
55265 var x = point.normalize().x;
55266 var x2 = x.redSqr();
55267 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
55268 var y = rhs.redSqrt();
55269
55270 return y.redSqr().cmp(rhs) === 0;
55271 };
55272
55273 function Point(curve, x, z) {
55274 Base.BasePoint.call(this, curve, 'projective');
55275 if (x === null && z === null) {
55276 this.x = this.curve.one;
55277 this.z = this.curve.zero;
55278 } else {
55279 this.x = new BN(x, 16);
55280 this.z = new BN(z, 16);
55281 if (!this.x.red)
55282 this.x = this.x.toRed(this.curve.red);
55283 if (!this.z.red)
55284 this.z = this.z.toRed(this.curve.red);
55285 }
55286 }
55287 inherits(Point, Base.BasePoint);
55288
55289 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
55290 return this.point(utils.toArray(bytes, enc), 1);
55291 };
55292
55293 MontCurve.prototype.point = function point(x, z) {
55294 return new Point(this, x, z);
55295 };
55296
55297 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
55298 return Point.fromJSON(this, obj);
55299 };
55300
55301 Point.prototype.precompute = function precompute() {
55302 // No-op
55303 };
55304
55305 Point.prototype._encode = function _encode() {
55306 return this.getX().toArray('be', this.curve.p.byteLength());
55307 };
55308
55309 Point.fromJSON = function fromJSON(curve, obj) {
55310 return new Point(curve, obj[0], obj[1] || curve.one);
55311 };
55312
55313 Point.prototype.inspect = function inspect() {
55314 if (this.isInfinity())
55315 return '<EC Point Infinity>';
55316 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
55317 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
55318 };
55319
55320 Point.prototype.isInfinity = function isInfinity() {
55321 // XXX This code assumes that zero is always zero in red
55322 return this.z.cmpn(0) === 0;
55323 };
55324
55325 Point.prototype.dbl = function dbl() {
55326 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
55327 // 2M + 2S + 4A
55328
55329 // A = X1 + Z1
55330 var a = this.x.redAdd(this.z);
55331 // AA = A^2
55332 var aa = a.redSqr();
55333 // B = X1 - Z1
55334 var b = this.x.redSub(this.z);
55335 // BB = B^2
55336 var bb = b.redSqr();
55337 // C = AA - BB
55338 var c = aa.redSub(bb);
55339 // X3 = AA * BB
55340 var nx = aa.redMul(bb);
55341 // Z3 = C * (BB + A24 * C)
55342 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
55343 return this.curve.point(nx, nz);
55344 };
55345
55346 Point.prototype.add = function add() {
55347 throw new Error('Not supported on Montgomery curve');
55348 };
55349
55350 Point.prototype.diffAdd = function diffAdd(p, diff) {
55351 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
55352 // 4M + 2S + 6A
55353
55354 // A = X2 + Z2
55355 var a = this.x.redAdd(this.z);
55356 // B = X2 - Z2
55357 var b = this.x.redSub(this.z);
55358 // C = X3 + Z3
55359 var c = p.x.redAdd(p.z);
55360 // D = X3 - Z3
55361 var d = p.x.redSub(p.z);
55362 // DA = D * A
55363 var da = d.redMul(a);
55364 // CB = C * B
55365 var cb = c.redMul(b);
55366 // X5 = Z1 * (DA + CB)^2
55367 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
55368 // Z5 = X1 * (DA - CB)^2
55369 var nz = diff.x.redMul(da.redISub(cb).redSqr());
55370 return this.curve.point(nx, nz);
55371 };
55372
55373 Point.prototype.mul = function mul(k) {
55374 var t = k.clone();
55375 var a = this; // (N / 2) * Q + Q
55376 var b = this.curve.point(null, null); // (N / 2) * Q
55377 var c = this; // Q
55378
55379 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
55380 bits.push(t.andln(1));
55381
55382 for (var i = bits.length - 1; i >= 0; i--) {
55383 if (bits[i] === 0) {
55384 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
55385 a = a.diffAdd(b, c);
55386 // N * Q = 2 * ((N / 2) * Q + Q))
55387 b = b.dbl();
55388 } else {
55389 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
55390 b = a.diffAdd(b, c);
55391 // N * Q + Q = 2 * ((N / 2) * Q + Q)
55392 a = a.dbl();
55393 }
55394 }
55395 return b;
55396 };
55397
55398 Point.prototype.mulAdd = function mulAdd() {
55399 throw new Error('Not supported on Montgomery curve');
55400 };
55401
55402 Point.prototype.jumlAdd = function jumlAdd() {
55403 throw new Error('Not supported on Montgomery curve');
55404 };
55405
55406 Point.prototype.eq = function eq(other) {
55407 return this.getX().cmp(other.getX()) === 0;
55408 };
55409
55410 Point.prototype.normalize = function normalize() {
55411 this.x = this.x.redMul(this.z.redInvm());
55412 this.z = this.curve.one;
55413 return this;
55414 };
55415
55416 Point.prototype.getX = function getX() {
55417 // Normalize coordinates
55418 this.normalize();
55419
55420 return this.x.fromRed();
55421 };
55422
55423 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],72:[function(require,module,exports){
55424 'use strict';
55425
55426 var curve = require('../curve');
55427 var elliptic = require('../../elliptic');
55428 var BN = require('bn.js');
55429 var inherits = require('inherits');
55430 var Base = curve.base;
55431
55432 var assert = elliptic.utils.assert;
55433
55434 function ShortCurve(conf) {
55435 Base.call(this, 'short', conf);
55436
55437 this.a = new BN(conf.a, 16).toRed(this.red);
55438 this.b = new BN(conf.b, 16).toRed(this.red);
55439 this.tinv = this.two.redInvm();
55440
55441 this.zeroA = this.a.fromRed().cmpn(0) === 0;
55442 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
55443
55444 // If the curve is endomorphic, precalculate beta and lambda
55445 this.endo = this._getEndomorphism(conf);
55446 this._endoWnafT1 = new Array(4);
55447 this._endoWnafT2 = new Array(4);
55448 }
55449 inherits(ShortCurve, Base);
55450 module.exports = ShortCurve;
55451
55452 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
55453 // No efficient endomorphism
55454 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
55455 return;
55456
55457 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
55458 var beta;
55459 var lambda;
55460 if (conf.beta) {
55461 beta = new BN(conf.beta, 16).toRed(this.red);
55462 } else {
55463 var betas = this._getEndoRoots(this.p);
55464 // Choose the smallest beta
55465 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
55466 beta = beta.toRed(this.red);
55467 }
55468 if (conf.lambda) {
55469 lambda = new BN(conf.lambda, 16);
55470 } else {
55471 // Choose the lambda that is matching selected beta
55472 var lambdas = this._getEndoRoots(this.n);
55473 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
55474 lambda = lambdas[0];
55475 } else {
55476 lambda = lambdas[1];
55477 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
55478 }
55479 }
55480
55481 // Get basis vectors, used for balanced length-two representation
55482 var basis;
55483 if (conf.basis) {
55484 basis = conf.basis.map(function(vec) {
55485 return {
55486 a: new BN(vec.a, 16),
55487 b: new BN(vec.b, 16)
55488 };
55489 });
55490 } else {
55491 basis = this._getEndoBasis(lambda);
55492 }
55493
55494 return {
55495 beta: beta,
55496 lambda: lambda,
55497 basis: basis
55498 };
55499 };
55500
55501 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
55502 // Find roots of for x^2 + x + 1 in F
55503 // Root = (-1 +- Sqrt(-3)) / 2
55504 //
55505 var red = num === this.p ? this.red : BN.mont(num);
55506 var tinv = new BN(2).toRed(red).redInvm();
55507 var ntinv = tinv.redNeg();
55508
55509 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
55510
55511 var l1 = ntinv.redAdd(s).fromRed();
55512 var l2 = ntinv.redSub(s).fromRed();
55513 return [ l1, l2 ];
55514 };
55515
55516 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
55517 // aprxSqrt >= sqrt(this.n)
55518 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
55519
55520 // 3.74
55521 // Run EGCD, until r(L + 1) < aprxSqrt
55522 var u = lambda;
55523 var v = this.n.clone();
55524 var x1 = new BN(1);
55525 var y1 = new BN(0);
55526 var x2 = new BN(0);
55527 var y2 = new BN(1);
55528
55529 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
55530 var a0;
55531 var b0;
55532 // First vector
55533 var a1;
55534 var b1;
55535 // Second vector
55536 var a2;
55537 var b2;
55538
55539 var prevR;
55540 var i = 0;
55541 var r;
55542 var x;
55543 while (u.cmpn(0) !== 0) {
55544 var q = v.div(u);
55545 r = v.sub(q.mul(u));
55546 x = x2.sub(q.mul(x1));
55547 var y = y2.sub(q.mul(y1));
55548
55549 if (!a1 && r.cmp(aprxSqrt) < 0) {
55550 a0 = prevR.neg();
55551 b0 = x1;
55552 a1 = r.neg();
55553 b1 = x;
55554 } else if (a1 && ++i === 2) {
55555 break;
55556 }
55557 prevR = r;
55558
55559 v = u;
55560 u = r;
55561 x2 = x1;
55562 x1 = x;
55563 y2 = y1;
55564 y1 = y;
55565 }
55566 a2 = r.neg();
55567 b2 = x;
55568
55569 var len1 = a1.sqr().add(b1.sqr());
55570 var len2 = a2.sqr().add(b2.sqr());
55571 if (len2.cmp(len1) >= 0) {
55572 a2 = a0;
55573 b2 = b0;
55574 }
55575
55576 // Normalize signs
55577 if (a1.negative) {
55578 a1 = a1.neg();
55579 b1 = b1.neg();
55580 }
55581 if (a2.negative) {
55582 a2 = a2.neg();
55583 b2 = b2.neg();
55584 }
55585
55586 return [
55587 { a: a1, b: b1 },
55588 { a: a2, b: b2 }
55589 ];
55590 };
55591
55592 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
55593 var basis = this.endo.basis;
55594 var v1 = basis[0];
55595 var v2 = basis[1];
55596
55597 var c1 = v2.b.mul(k).divRound(this.n);
55598 var c2 = v1.b.neg().mul(k).divRound(this.n);
55599
55600 var p1 = c1.mul(v1.a);
55601 var p2 = c2.mul(v2.a);
55602 var q1 = c1.mul(v1.b);
55603 var q2 = c2.mul(v2.b);
55604
55605 // Calculate answer
55606 var k1 = k.sub(p1).sub(p2);
55607 var k2 = q1.add(q2).neg();
55608 return { k1: k1, k2: k2 };
55609 };
55610
55611 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
55612 x = new BN(x, 16);
55613 if (!x.red)
55614 x = x.toRed(this.red);
55615
55616 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
55617 var y = y2.redSqrt();
55618 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
55619 throw new Error('invalid point');
55620
55621 // XXX Is there any way to tell if the number is odd without converting it
55622 // to non-red form?
55623 var isOdd = y.fromRed().isOdd();
55624 if (odd && !isOdd || !odd && isOdd)
55625 y = y.redNeg();
55626
55627 return this.point(x, y);
55628 };
55629
55630 ShortCurve.prototype.validate = function validate(point) {
55631 if (point.inf)
55632 return true;
55633
55634 var x = point.x;
55635 var y = point.y;
55636
55637 var ax = this.a.redMul(x);
55638 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
55639 return y.redSqr().redISub(rhs).cmpn(0) === 0;
55640 };
55641
55642 ShortCurve.prototype._endoWnafMulAdd =
55643 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
55644 var npoints = this._endoWnafT1;
55645 var ncoeffs = this._endoWnafT2;
55646 for (var i = 0; i < points.length; i++) {
55647 var split = this._endoSplit(coeffs[i]);
55648 var p = points[i];
55649 var beta = p._getBeta();
55650
55651 if (split.k1.negative) {
55652 split.k1.ineg();
55653 p = p.neg(true);
55654 }
55655 if (split.k2.negative) {
55656 split.k2.ineg();
55657 beta = beta.neg(true);
55658 }
55659
55660 npoints[i * 2] = p;
55661 npoints[i * 2 + 1] = beta;
55662 ncoeffs[i * 2] = split.k1;
55663 ncoeffs[i * 2 + 1] = split.k2;
55664 }
55665 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
55666
55667 // Clean-up references to points and coefficients
55668 for (var j = 0; j < i * 2; j++) {
55669 npoints[j] = null;
55670 ncoeffs[j] = null;
55671 }
55672 return res;
55673 };
55674
55675 function Point(curve, x, y, isRed) {
55676 Base.BasePoint.call(this, curve, 'affine');
55677 if (x === null && y === null) {
55678 this.x = null;
55679 this.y = null;
55680 this.inf = true;
55681 } else {
55682 this.x = new BN(x, 16);
55683 this.y = new BN(y, 16);
55684 // Force redgomery representation when loading from JSON
55685 if (isRed) {
55686 this.x.forceRed(this.curve.red);
55687 this.y.forceRed(this.curve.red);
55688 }
55689 if (!this.x.red)
55690 this.x = this.x.toRed(this.curve.red);
55691 if (!this.y.red)
55692 this.y = this.y.toRed(this.curve.red);
55693 this.inf = false;
55694 }
55695 }
55696 inherits(Point, Base.BasePoint);
55697
55698 ShortCurve.prototype.point = function point(x, y, isRed) {
55699 return new Point(this, x, y, isRed);
55700 };
55701
55702 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
55703 return Point.fromJSON(this, obj, red);
55704 };
55705
55706 Point.prototype._getBeta = function _getBeta() {
55707 if (!this.curve.endo)
55708 return;
55709
55710 var pre = this.precomputed;
55711 if (pre && pre.beta)
55712 return pre.beta;
55713
55714 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
55715 if (pre) {
55716 var curve = this.curve;
55717 var endoMul = function(p) {
55718 return curve.point(p.x.redMul(curve.endo.beta), p.y);
55719 };
55720 pre.beta = beta;
55721 beta.precomputed = {
55722 beta: null,
55723 naf: pre.naf && {
55724 wnd: pre.naf.wnd,
55725 points: pre.naf.points.map(endoMul)
55726 },
55727 doubles: pre.doubles && {
55728 step: pre.doubles.step,
55729 points: pre.doubles.points.map(endoMul)
55730 }
55731 };
55732 }
55733 return beta;
55734 };
55735
55736 Point.prototype.toJSON = function toJSON() {
55737 if (!this.precomputed)
55738 return [ this.x, this.y ];
55739
55740 return [ this.x, this.y, this.precomputed && {
55741 doubles: this.precomputed.doubles && {
55742 step: this.precomputed.doubles.step,
55743 points: this.precomputed.doubles.points.slice(1)
55744 },
55745 naf: this.precomputed.naf && {
55746 wnd: this.precomputed.naf.wnd,
55747 points: this.precomputed.naf.points.slice(1)
55748 }
55749 } ];
55750 };
55751
55752 Point.fromJSON = function fromJSON(curve, obj, red) {
55753 if (typeof obj === 'string')
55754 obj = JSON.parse(obj);
55755 var res = curve.point(obj[0], obj[1], red);
55756 if (!obj[2])
55757 return res;
55758
55759 function obj2point(obj) {
55760 return curve.point(obj[0], obj[1], red);
55761 }
55762
55763 var pre = obj[2];
55764 res.precomputed = {
55765 beta: null,
55766 doubles: pre.doubles && {
55767 step: pre.doubles.step,
55768 points: [ res ].concat(pre.doubles.points.map(obj2point))
55769 },
55770 naf: pre.naf && {
55771 wnd: pre.naf.wnd,
55772 points: [ res ].concat(pre.naf.points.map(obj2point))
55773 }
55774 };
55775 return res;
55776 };
55777
55778 Point.prototype.inspect = function inspect() {
55779 if (this.isInfinity())
55780 return '<EC Point Infinity>';
55781 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
55782 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
55783 };
55784
55785 Point.prototype.isInfinity = function isInfinity() {
55786 return this.inf;
55787 };
55788
55789 Point.prototype.add = function add(p) {
55790 // O + P = P
55791 if (this.inf)
55792 return p;
55793
55794 // P + O = P
55795 if (p.inf)
55796 return this;
55797
55798 // P + P = 2P
55799 if (this.eq(p))
55800 return this.dbl();
55801
55802 // P + (-P) = O
55803 if (this.neg().eq(p))
55804 return this.curve.point(null, null);
55805
55806 // P + Q = O
55807 if (this.x.cmp(p.x) === 0)
55808 return this.curve.point(null, null);
55809
55810 var c = this.y.redSub(p.y);
55811 if (c.cmpn(0) !== 0)
55812 c = c.redMul(this.x.redSub(p.x).redInvm());
55813 var nx = c.redSqr().redISub(this.x).redISub(p.x);
55814 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
55815 return this.curve.point(nx, ny);
55816 };
55817
55818 Point.prototype.dbl = function dbl() {
55819 if (this.inf)
55820 return this;
55821
55822 // 2P = O
55823 var ys1 = this.y.redAdd(this.y);
55824 if (ys1.cmpn(0) === 0)
55825 return this.curve.point(null, null);
55826
55827 var a = this.curve.a;
55828
55829 var x2 = this.x.redSqr();
55830 var dyinv = ys1.redInvm();
55831 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
55832
55833 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
55834 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
55835 return this.curve.point(nx, ny);
55836 };
55837
55838 Point.prototype.getX = function getX() {
55839 return this.x.fromRed();
55840 };
55841
55842 Point.prototype.getY = function getY() {
55843 return this.y.fromRed();
55844 };
55845
55846 Point.prototype.mul = function mul(k) {
55847 k = new BN(k, 16);
55848
55849 if (this._hasDoubles(k))
55850 return this.curve._fixedNafMul(this, k);
55851 else if (this.curve.endo)
55852 return this.curve._endoWnafMulAdd([ this ], [ k ]);
55853 else
55854 return this.curve._wnafMul(this, k);
55855 };
55856
55857 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
55858 var points = [ this, p2 ];
55859 var coeffs = [ k1, k2 ];
55860 if (this.curve.endo)
55861 return this.curve._endoWnafMulAdd(points, coeffs);
55862 else
55863 return this.curve._wnafMulAdd(1, points, coeffs, 2);
55864 };
55865
55866 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
55867 var points = [ this, p2 ];
55868 var coeffs = [ k1, k2 ];
55869 if (this.curve.endo)
55870 return this.curve._endoWnafMulAdd(points, coeffs, true);
55871 else
55872 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
55873 };
55874
55875 Point.prototype.eq = function eq(p) {
55876 return this === p ||
55877 this.inf === p.inf &&
55878 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
55879 };
55880
55881 Point.prototype.neg = function neg(_precompute) {
55882 if (this.inf)
55883 return this;
55884
55885 var res = this.curve.point(this.x, this.y.redNeg());
55886 if (_precompute && this.precomputed) {
55887 var pre = this.precomputed;
55888 var negate = function(p) {
55889 return p.neg();
55890 };
55891 res.precomputed = {
55892 naf: pre.naf && {
55893 wnd: pre.naf.wnd,
55894 points: pre.naf.points.map(negate)
55895 },
55896 doubles: pre.doubles && {
55897 step: pre.doubles.step,
55898 points: pre.doubles.points.map(negate)
55899 }
55900 };
55901 }
55902 return res;
55903 };
55904
55905 Point.prototype.toJ = function toJ() {
55906 if (this.inf)
55907 return this.curve.jpoint(null, null, null);
55908
55909 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
55910 return res;
55911 };
55912
55913 function JPoint(curve, x, y, z) {
55914 Base.BasePoint.call(this, curve, 'jacobian');
55915 if (x === null && y === null && z === null) {
55916 this.x = this.curve.one;
55917 this.y = this.curve.one;
55918 this.z = new BN(0);
55919 } else {
55920 this.x = new BN(x, 16);
55921 this.y = new BN(y, 16);
55922 this.z = new BN(z, 16);
55923 }
55924 if (!this.x.red)
55925 this.x = this.x.toRed(this.curve.red);
55926 if (!this.y.red)
55927 this.y = this.y.toRed(this.curve.red);
55928 if (!this.z.red)
55929 this.z = this.z.toRed(this.curve.red);
55930
55931 this.zOne = this.z === this.curve.one;
55932 }
55933 inherits(JPoint, Base.BasePoint);
55934
55935 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
55936 return new JPoint(this, x, y, z);
55937 };
55938
55939 JPoint.prototype.toP = function toP() {
55940 if (this.isInfinity())
55941 return this.curve.point(null, null);
55942
55943 var zinv = this.z.redInvm();
55944 var zinv2 = zinv.redSqr();
55945 var ax = this.x.redMul(zinv2);
55946 var ay = this.y.redMul(zinv2).redMul(zinv);
55947
55948 return this.curve.point(ax, ay);
55949 };
55950
55951 JPoint.prototype.neg = function neg() {
55952 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
55953 };
55954
55955 JPoint.prototype.add = function add(p) {
55956 // O + P = P
55957 if (this.isInfinity())
55958 return p;
55959
55960 // P + O = P
55961 if (p.isInfinity())
55962 return this;
55963
55964 // 12M + 4S + 7A
55965 var pz2 = p.z.redSqr();
55966 var z2 = this.z.redSqr();
55967 var u1 = this.x.redMul(pz2);
55968 var u2 = p.x.redMul(z2);
55969 var s1 = this.y.redMul(pz2.redMul(p.z));
55970 var s2 = p.y.redMul(z2.redMul(this.z));
55971
55972 var h = u1.redSub(u2);
55973 var r = s1.redSub(s2);
55974 if (h.cmpn(0) === 0) {
55975 if (r.cmpn(0) !== 0)
55976 return this.curve.jpoint(null, null, null);
55977 else
55978 return this.dbl();
55979 }
55980
55981 var h2 = h.redSqr();
55982 var h3 = h2.redMul(h);
55983 var v = u1.redMul(h2);
55984
55985 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
55986 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
55987 var nz = this.z.redMul(p.z).redMul(h);
55988
55989 return this.curve.jpoint(nx, ny, nz);
55990 };
55991
55992 JPoint.prototype.mixedAdd = function mixedAdd(p) {
55993 // O + P = P
55994 if (this.isInfinity())
55995 return p.toJ();
55996
55997 // P + O = P
55998 if (p.isInfinity())
55999 return this;
56000
56001 // 8M + 3S + 7A
56002 var z2 = this.z.redSqr();
56003 var u1 = this.x;
56004 var u2 = p.x.redMul(z2);
56005 var s1 = this.y;
56006 var s2 = p.y.redMul(z2).redMul(this.z);
56007
56008 var h = u1.redSub(u2);
56009 var r = s1.redSub(s2);
56010 if (h.cmpn(0) === 0) {
56011 if (r.cmpn(0) !== 0)
56012 return this.curve.jpoint(null, null, null);
56013 else
56014 return this.dbl();
56015 }
56016
56017 var h2 = h.redSqr();
56018 var h3 = h2.redMul(h);
56019 var v = u1.redMul(h2);
56020
56021 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
56022 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
56023 var nz = this.z.redMul(h);
56024
56025 return this.curve.jpoint(nx, ny, nz);
56026 };
56027
56028 JPoint.prototype.dblp = function dblp(pow) {
56029 if (pow === 0)
56030 return this;
56031 if (this.isInfinity())
56032 return this;
56033 if (!pow)
56034 return this.dbl();
56035
56036 if (this.curve.zeroA || this.curve.threeA) {
56037 var r = this;
56038 for (var i = 0; i < pow; i++)
56039 r = r.dbl();
56040 return r;
56041 }
56042
56043 // 1M + 2S + 1A + N * (4S + 5M + 8A)
56044 // N = 1 => 6M + 6S + 9A
56045 var a = this.curve.a;
56046 var tinv = this.curve.tinv;
56047
56048 var jx = this.x;
56049 var jy = this.y;
56050 var jz = this.z;
56051 var jz4 = jz.redSqr().redSqr();
56052
56053 // Reuse results
56054 var jyd = jy.redAdd(jy);
56055 for (var i = 0; i < pow; i++) {
56056 var jx2 = jx.redSqr();
56057 var jyd2 = jyd.redSqr();
56058 var jyd4 = jyd2.redSqr();
56059 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
56060
56061 var t1 = jx.redMul(jyd2);
56062 var nx = c.redSqr().redISub(t1.redAdd(t1));
56063 var t2 = t1.redISub(nx);
56064 var dny = c.redMul(t2);
56065 dny = dny.redIAdd(dny).redISub(jyd4);
56066 var nz = jyd.redMul(jz);
56067 if (i + 1 < pow)
56068 jz4 = jz4.redMul(jyd4);
56069
56070 jx = nx;
56071 jz = nz;
56072 jyd = dny;
56073 }
56074
56075 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
56076 };
56077
56078 JPoint.prototype.dbl = function dbl() {
56079 if (this.isInfinity())
56080 return this;
56081
56082 if (this.curve.zeroA)
56083 return this._zeroDbl();
56084 else if (this.curve.threeA)
56085 return this._threeDbl();
56086 else
56087 return this._dbl();
56088 };
56089
56090 JPoint.prototype._zeroDbl = function _zeroDbl() {
56091 var nx;
56092 var ny;
56093 var nz;
56094 // Z = 1
56095 if (this.zOne) {
56096 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
56097 // #doubling-mdbl-2007-bl
56098 // 1M + 5S + 14A
56099
56100 // XX = X1^2
56101 var xx = this.x.redSqr();
56102 // YY = Y1^2
56103 var yy = this.y.redSqr();
56104 // YYYY = YY^2
56105 var yyyy = yy.redSqr();
56106 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
56107 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
56108 s = s.redIAdd(s);
56109 // M = 3 * XX + a; a = 0
56110 var m = xx.redAdd(xx).redIAdd(xx);
56111 // T = M ^ 2 - 2*S
56112 var t = m.redSqr().redISub(s).redISub(s);
56113
56114 // 8 * YYYY
56115 var yyyy8 = yyyy.redIAdd(yyyy);
56116 yyyy8 = yyyy8.redIAdd(yyyy8);
56117 yyyy8 = yyyy8.redIAdd(yyyy8);
56118
56119 // X3 = T
56120 nx = t;
56121 // Y3 = M * (S - T) - 8 * YYYY
56122 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
56123 // Z3 = 2*Y1
56124 nz = this.y.redAdd(this.y);
56125 } else {
56126 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
56127 // #doubling-dbl-2009-l
56128 // 2M + 5S + 13A
56129
56130 // A = X1^2
56131 var a = this.x.redSqr();
56132 // B = Y1^2
56133 var b = this.y.redSqr();
56134 // C = B^2
56135 var c = b.redSqr();
56136 // D = 2 * ((X1 + B)^2 - A - C)
56137 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
56138 d = d.redIAdd(d);
56139 // E = 3 * A
56140 var e = a.redAdd(a).redIAdd(a);
56141 // F = E^2
56142 var f = e.redSqr();
56143
56144 // 8 * C
56145 var c8 = c.redIAdd(c);
56146 c8 = c8.redIAdd(c8);
56147 c8 = c8.redIAdd(c8);
56148
56149 // X3 = F - 2 * D
56150 nx = f.redISub(d).redISub(d);
56151 // Y3 = E * (D - X3) - 8 * C
56152 ny = e.redMul(d.redISub(nx)).redISub(c8);
56153 // Z3 = 2 * Y1 * Z1
56154 nz = this.y.redMul(this.z);
56155 nz = nz.redIAdd(nz);
56156 }
56157
56158 return this.curve.jpoint(nx, ny, nz);
56159 };
56160
56161 JPoint.prototype._threeDbl = function _threeDbl() {
56162 var nx;
56163 var ny;
56164 var nz;
56165 // Z = 1
56166 if (this.zOne) {
56167 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
56168 // #doubling-mdbl-2007-bl
56169 // 1M + 5S + 15A
56170
56171 // XX = X1^2
56172 var xx = this.x.redSqr();
56173 // YY = Y1^2
56174 var yy = this.y.redSqr();
56175 // YYYY = YY^2
56176 var yyyy = yy.redSqr();
56177 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
56178 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
56179 s = s.redIAdd(s);
56180 // M = 3 * XX + a
56181 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
56182 // T = M^2 - 2 * S
56183 var t = m.redSqr().redISub(s).redISub(s);
56184 // X3 = T
56185 nx = t;
56186 // Y3 = M * (S - T) - 8 * YYYY
56187 var yyyy8 = yyyy.redIAdd(yyyy);
56188 yyyy8 = yyyy8.redIAdd(yyyy8);
56189 yyyy8 = yyyy8.redIAdd(yyyy8);
56190 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
56191 // Z3 = 2 * Y1
56192 nz = this.y.redAdd(this.y);
56193 } else {
56194 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
56195 // 3M + 5S
56196
56197 // delta = Z1^2
56198 var delta = this.z.redSqr();
56199 // gamma = Y1^2
56200 var gamma = this.y.redSqr();
56201 // beta = X1 * gamma
56202 var beta = this.x.redMul(gamma);
56203 // alpha = 3 * (X1 - delta) * (X1 + delta)
56204 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
56205 alpha = alpha.redAdd(alpha).redIAdd(alpha);
56206 // X3 = alpha^2 - 8 * beta
56207 var beta4 = beta.redIAdd(beta);
56208 beta4 = beta4.redIAdd(beta4);
56209 var beta8 = beta4.redAdd(beta4);
56210 nx = alpha.redSqr().redISub(beta8);
56211 // Z3 = (Y1 + Z1)^2 - gamma - delta
56212 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
56213 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
56214 var ggamma8 = gamma.redSqr();
56215 ggamma8 = ggamma8.redIAdd(ggamma8);
56216 ggamma8 = ggamma8.redIAdd(ggamma8);
56217 ggamma8 = ggamma8.redIAdd(ggamma8);
56218 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
56219 }
56220
56221 return this.curve.jpoint(nx, ny, nz);
56222 };
56223
56224 JPoint.prototype._dbl = function _dbl() {
56225 var a = this.curve.a;
56226
56227 // 4M + 6S + 10A
56228 var jx = this.x;
56229 var jy = this.y;
56230 var jz = this.z;
56231 var jz4 = jz.redSqr().redSqr();
56232
56233 var jx2 = jx.redSqr();
56234 var jy2 = jy.redSqr();
56235
56236 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
56237
56238 var jxd4 = jx.redAdd(jx);
56239 jxd4 = jxd4.redIAdd(jxd4);
56240 var t1 = jxd4.redMul(jy2);
56241 var nx = c.redSqr().redISub(t1.redAdd(t1));
56242 var t2 = t1.redISub(nx);
56243
56244 var jyd8 = jy2.redSqr();
56245 jyd8 = jyd8.redIAdd(jyd8);
56246 jyd8 = jyd8.redIAdd(jyd8);
56247 jyd8 = jyd8.redIAdd(jyd8);
56248 var ny = c.redMul(t2).redISub(jyd8);
56249 var nz = jy.redAdd(jy).redMul(jz);
56250
56251 return this.curve.jpoint(nx, ny, nz);
56252 };
56253
56254 JPoint.prototype.trpl = function trpl() {
56255 if (!this.curve.zeroA)
56256 return this.dbl().add(this);
56257
56258 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
56259 // 5M + 10S + ...
56260
56261 // XX = X1^2
56262 var xx = this.x.redSqr();
56263 // YY = Y1^2
56264 var yy = this.y.redSqr();
56265 // ZZ = Z1^2
56266 var zz = this.z.redSqr();
56267 // YYYY = YY^2
56268 var yyyy = yy.redSqr();
56269 // M = 3 * XX + a * ZZ2; a = 0
56270 var m = xx.redAdd(xx).redIAdd(xx);
56271 // MM = M^2
56272 var mm = m.redSqr();
56273 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
56274 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
56275 e = e.redIAdd(e);
56276 e = e.redAdd(e).redIAdd(e);
56277 e = e.redISub(mm);
56278 // EE = E^2
56279 var ee = e.redSqr();
56280 // T = 16*YYYY
56281 var t = yyyy.redIAdd(yyyy);
56282 t = t.redIAdd(t);
56283 t = t.redIAdd(t);
56284 t = t.redIAdd(t);
56285 // U = (M + E)^2 - MM - EE - T
56286 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
56287 // X3 = 4 * (X1 * EE - 4 * YY * U)
56288 var yyu4 = yy.redMul(u);
56289 yyu4 = yyu4.redIAdd(yyu4);
56290 yyu4 = yyu4.redIAdd(yyu4);
56291 var nx = this.x.redMul(ee).redISub(yyu4);
56292 nx = nx.redIAdd(nx);
56293 nx = nx.redIAdd(nx);
56294 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
56295 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
56296 ny = ny.redIAdd(ny);
56297 ny = ny.redIAdd(ny);
56298 ny = ny.redIAdd(ny);
56299 // Z3 = (Z1 + E)^2 - ZZ - EE
56300 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
56301
56302 return this.curve.jpoint(nx, ny, nz);
56303 };
56304
56305 JPoint.prototype.mul = function mul(k, kbase) {
56306 k = new BN(k, kbase);
56307
56308 return this.curve._wnafMul(this, k);
56309 };
56310
56311 JPoint.prototype.eq = function eq(p) {
56312 if (p.type === 'affine')
56313 return this.eq(p.toJ());
56314
56315 if (this === p)
56316 return true;
56317
56318 // x1 * z2^2 == x2 * z1^2
56319 var z2 = this.z.redSqr();
56320 var pz2 = p.z.redSqr();
56321 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
56322 return false;
56323
56324 // y1 * z2^3 == y2 * z1^3
56325 var z3 = z2.redMul(this.z);
56326 var pz3 = pz2.redMul(p.z);
56327 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
56328 };
56329
56330 JPoint.prototype.eqXToP = function eqXToP(x) {
56331 var zs = this.z.redSqr();
56332 var rx = x.toRed(this.curve.red).redMul(zs);
56333 if (this.x.cmp(rx) === 0)
56334 return true;
56335
56336 var xc = x.clone();
56337 var t = this.curve.redN.redMul(zs);
56338 for (;;) {
56339 xc.iadd(this.curve.n);
56340 if (xc.cmp(this.curve.p) >= 0)
56341 return false;
56342
56343 rx.redIAdd(t);
56344 if (this.x.cmp(rx) === 0)
56345 return true;
56346 }
56347 return false;
56348 };
56349
56350 JPoint.prototype.inspect = function inspect() {
56351 if (this.isInfinity())
56352 return '<EC JPoint Infinity>';
56353 return '<EC JPoint x: ' + this.x.toString(16, 2) +
56354 ' y: ' + this.y.toString(16, 2) +
56355 ' z: ' + this.z.toString(16, 2) + '>';
56356 };
56357
56358 JPoint.prototype.isInfinity = function isInfinity() {
56359 // XXX This code assumes that zero is always zero in red
56360 return this.z.cmpn(0) === 0;
56361 };
56362
56363 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],73:[function(require,module,exports){
56364 'use strict';
56365
56366 var curves = exports;
56367
56368 var hash = require('hash.js');
56369 var elliptic = require('../elliptic');
56370
56371 var assert = elliptic.utils.assert;
56372
56373 function PresetCurve(options) {
56374 if (options.type === 'short')
56375 this.curve = new elliptic.curve.short(options);
56376 else if (options.type === 'edwards')
56377 this.curve = new elliptic.curve.edwards(options);
56378 else
56379 this.curve = new elliptic.curve.mont(options);
56380 this.g = this.curve.g;
56381 this.n = this.curve.n;
56382 this.hash = options.hash;
56383
56384 assert(this.g.validate(), 'Invalid curve');
56385 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
56386 }
56387 curves.PresetCurve = PresetCurve;
56388
56389 function defineCurve(name, options) {
56390 Object.defineProperty(curves, name, {
56391 configurable: true,
56392 enumerable: true,
56393 get: function() {
56394 var curve = new PresetCurve(options);
56395 Object.defineProperty(curves, name, {
56396 configurable: true,
56397 enumerable: true,
56398 value: curve
56399 });
56400 return curve;
56401 }
56402 });
56403 }
56404
56405 defineCurve('p192', {
56406 type: 'short',
56407 prime: 'p192',
56408 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
56409 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
56410 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
56411 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
56412 hash: hash.sha256,
56413 gRed: false,
56414 g: [
56415 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
56416 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
56417 ]
56418 });
56419
56420 defineCurve('p224', {
56421 type: 'short',
56422 prime: 'p224',
56423 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
56424 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
56425 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
56426 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
56427 hash: hash.sha256,
56428 gRed: false,
56429 g: [
56430 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
56431 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
56432 ]
56433 });
56434
56435 defineCurve('p256', {
56436 type: 'short',
56437 prime: null,
56438 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
56439 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
56440 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
56441 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
56442 hash: hash.sha256,
56443 gRed: false,
56444 g: [
56445 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
56446 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
56447 ]
56448 });
56449
56450 defineCurve('p384', {
56451 type: 'short',
56452 prime: null,
56453 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56454 'fffffffe ffffffff 00000000 00000000 ffffffff',
56455 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56456 'fffffffe ffffffff 00000000 00000000 fffffffc',
56457 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
56458 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
56459 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
56460 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
56461 hash: hash.sha384,
56462 gRed: false,
56463 g: [
56464 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
56465 '5502f25d bf55296c 3a545e38 72760ab7',
56466 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
56467 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
56468 ]
56469 });
56470
56471 defineCurve('p521', {
56472 type: 'short',
56473 prime: null,
56474 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56475 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56476 'ffffffff ffffffff ffffffff ffffffff ffffffff',
56477 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56478 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56479 'ffffffff ffffffff ffffffff ffffffff fffffffc',
56480 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
56481 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
56482 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
56483 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56484 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
56485 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
56486 hash: hash.sha512,
56487 gRed: false,
56488 g: [
56489 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
56490 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
56491 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
56492 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
56493 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
56494 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
56495 ]
56496 });
56497
56498 defineCurve('curve25519', {
56499 type: 'mont',
56500 prime: 'p25519',
56501 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
56502 a: '76d06',
56503 b: '1',
56504 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
56505 hash: hash.sha256,
56506 gRed: false,
56507 g: [
56508 '9'
56509 ]
56510 });
56511
56512 defineCurve('ed25519', {
56513 type: 'edwards',
56514 prime: 'p25519',
56515 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
56516 a: '-1',
56517 c: '1',
56518 // -121665 * (121666^(-1)) (mod P)
56519 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
56520 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
56521 hash: hash.sha256,
56522 gRed: false,
56523 g: [
56524 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
56525
56526 // 4/5
56527 '6666666666666666666666666666666666666666666666666666666666666658'
56528 ]
56529 });
56530
56531 var pre;
56532 try {
56533 pre = require('./precomputed/secp256k1');
56534 } catch (e) {
56535 pre = undefined;
56536 }
56537
56538 defineCurve('secp256k1', {
56539 type: 'short',
56540 prime: 'k256',
56541 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
56542 a: '0',
56543 b: '7',
56544 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
56545 h: '1',
56546 hash: hash.sha256,
56547
56548 // Precomputed endomorphism
56549 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
56550 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
56551 basis: [
56552 {
56553 a: '3086d221a7d46bcde86c90e49284eb15',
56554 b: '-e4437ed6010e88286f547fa90abfe4c3'
56555 },
56556 {
56557 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
56558 b: '3086d221a7d46bcde86c90e49284eb15'
56559 }
56560 ],
56561
56562 gRed: false,
56563 g: [
56564 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
56565 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
56566 pre
56567 ]
56568 });
56569
56570 },{"../elliptic":67,"./precomputed/secp256k1":80,"hash.js":86}],74:[function(require,module,exports){
56571 'use strict';
56572
56573 var BN = require('bn.js');
56574 var HmacDRBG = require('hmac-drbg');
56575 var elliptic = require('../../elliptic');
56576 var utils = elliptic.utils;
56577 var assert = utils.assert;
56578
56579 var KeyPair = require('./key');
56580 var Signature = require('./signature');
56581
56582 function EC(options) {
56583 if (!(this instanceof EC))
56584 return new EC(options);
56585
56586 // Shortcut `elliptic.ec(curve-name)`
56587 if (typeof options === 'string') {
56588 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
56589
56590 options = elliptic.curves[options];
56591 }
56592
56593 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
56594 if (options instanceof elliptic.curves.PresetCurve)
56595 options = { curve: options };
56596
56597 this.curve = options.curve.curve;
56598 this.n = this.curve.n;
56599 this.nh = this.n.ushrn(1);
56600 this.g = this.curve.g;
56601
56602 // Point on curve
56603 this.g = options.curve.g;
56604 this.g.precompute(options.curve.n.bitLength() + 1);
56605
56606 // Hash for function for DRBG
56607 this.hash = options.hash || options.curve.hash;
56608 }
56609 module.exports = EC;
56610
56611 EC.prototype.keyPair = function keyPair(options) {
56612 return new KeyPair(this, options);
56613 };
56614
56615 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
56616 return KeyPair.fromPrivate(this, priv, enc);
56617 };
56618
56619 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
56620 return KeyPair.fromPublic(this, pub, enc);
56621 };
56622
56623 EC.prototype.genKeyPair = function genKeyPair(options) {
56624 if (!options)
56625 options = {};
56626
56627 // Instantiate Hmac_DRBG
56628 var drbg = new HmacDRBG({
56629 hash: this.hash,
56630 pers: options.pers,
56631 persEnc: options.persEnc || 'utf8',
56632 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
56633 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
56634 nonce: this.n.toArray()
56635 });
56636
56637 var bytes = this.n.byteLength();
56638 var ns2 = this.n.sub(new BN(2));
56639 do {
56640 var priv = new BN(drbg.generate(bytes));
56641 if (priv.cmp(ns2) > 0)
56642 continue;
56643
56644 priv.iaddn(1);
56645 return this.keyFromPrivate(priv);
56646 } while (true);
56647 };
56648
56649 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
56650 var delta = msg.byteLength() * 8 - this.n.bitLength();
56651 if (delta > 0)
56652 msg = msg.ushrn(delta);
56653 if (!truncOnly && msg.cmp(this.n) >= 0)
56654 return msg.sub(this.n);
56655 else
56656 return msg;
56657 };
56658
56659 EC.prototype.sign = function sign(msg, key, enc, options) {
56660 if (typeof enc === 'object') {
56661 options = enc;
56662 enc = null;
56663 }
56664 if (!options)
56665 options = {};
56666
56667 key = this.keyFromPrivate(key, enc);
56668 msg = this._truncateToN(new BN(msg, 16));
56669
56670 // Zero-extend key to provide enough entropy
56671 var bytes = this.n.byteLength();
56672 var bkey = key.getPrivate().toArray('be', bytes);
56673
56674 // Zero-extend nonce to have the same byte size as N
56675 var nonce = msg.toArray('be', bytes);
56676
56677 // Instantiate Hmac_DRBG
56678 var drbg = new HmacDRBG({
56679 hash: this.hash,
56680 entropy: bkey,
56681 nonce: nonce,
56682 pers: options.pers,
56683 persEnc: options.persEnc || 'utf8'
56684 });
56685
56686 // Number of bytes to generate
56687 var ns1 = this.n.sub(new BN(1));
56688
56689 for (var iter = 0; true; iter++) {
56690 var k = options.k ?
56691 options.k(iter) :
56692 new BN(drbg.generate(this.n.byteLength()));
56693 k = this._truncateToN(k, true);
56694 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
56695 continue;
56696
56697 var kp = this.g.mul(k);
56698 if (kp.isInfinity())
56699 continue;
56700
56701 var kpX = kp.getX();
56702 var r = kpX.umod(this.n);
56703 if (r.cmpn(0) === 0)
56704 continue;
56705
56706 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
56707 s = s.umod(this.n);
56708 if (s.cmpn(0) === 0)
56709 continue;
56710
56711 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
56712 (kpX.cmp(r) !== 0 ? 2 : 0);
56713
56714 // Use complement of `s`, if it is > `n / 2`
56715 if (options.canonical && s.cmp(this.nh) > 0) {
56716 s = this.n.sub(s);
56717 recoveryParam ^= 1;
56718 }
56719
56720 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
56721 }
56722 };
56723
56724 EC.prototype.verify = function verify(msg, signature, key, enc) {
56725 msg = this._truncateToN(new BN(msg, 16));
56726 key = this.keyFromPublic(key, enc);
56727 signature = new Signature(signature, 'hex');
56728
56729 // Perform primitive values validation
56730 var r = signature.r;
56731 var s = signature.s;
56732 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
56733 return false;
56734 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
56735 return false;
56736
56737 // Validate signature
56738 var sinv = s.invm(this.n);
56739 var u1 = sinv.mul(msg).umod(this.n);
56740 var u2 = sinv.mul(r).umod(this.n);
56741
56742 if (!this.curve._maxwellTrick) {
56743 var p = this.g.mulAdd(u1, key.getPublic(), u2);
56744 if (p.isInfinity())
56745 return false;
56746
56747 return p.getX().umod(this.n).cmp(r) === 0;
56748 }
56749
56750 // NOTE: Greg Maxwell's trick, inspired by:
56751 // https://git.io/vad3K
56752
56753 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
56754 if (p.isInfinity())
56755 return false;
56756
56757 // Compare `p.x` of Jacobian point with `r`,
56758 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
56759 // inverse of `p.z^2`
56760 return p.eqXToP(r);
56761 };
56762
56763 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
56764 assert((3 & j) === j, 'The recovery param is more than two bits');
56765 signature = new Signature(signature, enc);
56766
56767 var n = this.n;
56768 var e = new BN(msg);
56769 var r = signature.r;
56770 var s = signature.s;
56771
56772 // A set LSB signifies that the y-coordinate is odd
56773 var isYOdd = j & 1;
56774 var isSecondKey = j >> 1;
56775 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
56776 throw new Error('Unable to find sencond key candinate');
56777
56778 // 1.1. Let x = r + jn.
56779 if (isSecondKey)
56780 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
56781 else
56782 r = this.curve.pointFromX(r, isYOdd);
56783
56784 var rInv = signature.r.invm(n);
56785 var s1 = n.sub(e).mul(rInv).umod(n);
56786 var s2 = s.mul(rInv).umod(n);
56787
56788 // 1.6.1 Compute Q = r^-1 (sR - eG)
56789 // Q = r^-1 (sR + -eG)
56790 return this.g.mulAdd(s1, r, s2);
56791 };
56792
56793 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
56794 signature = new Signature(signature, enc);
56795 if (signature.recoveryParam !== null)
56796 return signature.recoveryParam;
56797
56798 for (var i = 0; i < 4; i++) {
56799 var Qprime;
56800 try {
56801 Qprime = this.recoverPubKey(e, signature, i);
56802 } catch (e) {
56803 continue;
56804 }
56805
56806 if (Qprime.eq(Q))
56807 return i;
56808 }
56809 throw new Error('Unable to find valid recovery factor');
56810 };
56811
56812 },{"../../elliptic":67,"./key":75,"./signature":76,"bn.js":17,"hmac-drbg":92}],75:[function(require,module,exports){
56813 'use strict';
56814
56815 var BN = require('bn.js');
56816 var elliptic = require('../../elliptic');
56817 var utils = elliptic.utils;
56818 var assert = utils.assert;
56819
56820 function KeyPair(ec, options) {
56821 this.ec = ec;
56822 this.priv = null;
56823 this.pub = null;
56824
56825 // KeyPair(ec, { priv: ..., pub: ... })
56826 if (options.priv)
56827 this._importPrivate(options.priv, options.privEnc);
56828 if (options.pub)
56829 this._importPublic(options.pub, options.pubEnc);
56830 }
56831 module.exports = KeyPair;
56832
56833 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
56834 if (pub instanceof KeyPair)
56835 return pub;
56836
56837 return new KeyPair(ec, {
56838 pub: pub,
56839 pubEnc: enc
56840 });
56841 };
56842
56843 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
56844 if (priv instanceof KeyPair)
56845 return priv;
56846
56847 return new KeyPair(ec, {
56848 priv: priv,
56849 privEnc: enc
56850 });
56851 };
56852
56853 KeyPair.prototype.validate = function validate() {
56854 var pub = this.getPublic();
56855
56856 if (pub.isInfinity())
56857 return { result: false, reason: 'Invalid public key' };
56858 if (!pub.validate())
56859 return { result: false, reason: 'Public key is not a point' };
56860 if (!pub.mul(this.ec.curve.n).isInfinity())
56861 return { result: false, reason: 'Public key * N != O' };
56862
56863 return { result: true, reason: null };
56864 };
56865
56866 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
56867 // compact is optional argument
56868 if (typeof compact === 'string') {
56869 enc = compact;
56870 compact = null;
56871 }
56872
56873 if (!this.pub)
56874 this.pub = this.ec.g.mul(this.priv);
56875
56876 if (!enc)
56877 return this.pub;
56878
56879 return this.pub.encode(enc, compact);
56880 };
56881
56882 KeyPair.prototype.getPrivate = function getPrivate(enc) {
56883 if (enc === 'hex')
56884 return this.priv.toString(16, 2);
56885 else
56886 return this.priv;
56887 };
56888
56889 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
56890 this.priv = new BN(key, enc || 16);
56891
56892 // Ensure that the priv won't be bigger than n, otherwise we may fail
56893 // in fixed multiplication method
56894 this.priv = this.priv.umod(this.ec.curve.n);
56895 };
56896
56897 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
56898 if (key.x || key.y) {
56899 // Montgomery points only have an `x` coordinate.
56900 // Weierstrass/Edwards points on the other hand have both `x` and
56901 // `y` coordinates.
56902 if (this.ec.curve.type === 'mont') {
56903 assert(key.x, 'Need x coordinate');
56904 } else if (this.ec.curve.type === 'short' ||
56905 this.ec.curve.type === 'edwards') {
56906 assert(key.x && key.y, 'Need both x and y coordinate');
56907 }
56908 this.pub = this.ec.curve.point(key.x, key.y);
56909 return;
56910 }
56911 this.pub = this.ec.curve.decodePoint(key, enc);
56912 };
56913
56914 // ECDH
56915 KeyPair.prototype.derive = function derive(pub) {
56916 return pub.mul(this.priv).getX();
56917 };
56918
56919 // ECDSA
56920 KeyPair.prototype.sign = function sign(msg, enc, options) {
56921 return this.ec.sign(msg, this, enc, options);
56922 };
56923
56924 KeyPair.prototype.verify = function verify(msg, signature) {
56925 return this.ec.verify(msg, signature, this);
56926 };
56927
56928 KeyPair.prototype.inspect = function inspect() {
56929 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
56930 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
56931 };
56932
56933 },{"../../elliptic":67,"bn.js":17}],76:[function(require,module,exports){
56934 'use strict';
56935
56936 var BN = require('bn.js');
56937
56938 var elliptic = require('../../elliptic');
56939 var utils = elliptic.utils;
56940 var assert = utils.assert;
56941
56942 function Signature(options, enc) {
56943 if (options instanceof Signature)
56944 return options;
56945
56946 if (this._importDER(options, enc))
56947 return;
56948
56949 assert(options.r && options.s, 'Signature without r or s');
56950 this.r = new BN(options.r, 16);
56951 this.s = new BN(options.s, 16);
56952 if (options.recoveryParam === undefined)
56953 this.recoveryParam = null;
56954 else
56955 this.recoveryParam = options.recoveryParam;
56956 }
56957 module.exports = Signature;
56958
56959 function Position() {
56960 this.place = 0;
56961 }
56962
56963 function getLength(buf, p) {
56964 var initial = buf[p.place++];
56965 if (!(initial & 0x80)) {
56966 return initial;
56967 }
56968 var octetLen = initial & 0xf;
56969 var val = 0;
56970 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
56971 val <<= 8;
56972 val |= buf[off];
56973 }
56974 p.place = off;
56975 return val;
56976 }
56977
56978 function rmPadding(buf) {
56979 var i = 0;
56980 var len = buf.length - 1;
56981 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
56982 i++;
56983 }
56984 if (i === 0) {
56985 return buf;
56986 }
56987 return buf.slice(i);
56988 }
56989
56990 Signature.prototype._importDER = function _importDER(data, enc) {
56991 data = utils.toArray(data, enc);
56992 var p = new Position();
56993 if (data[p.place++] !== 0x30) {
56994 return false;
56995 }
56996 var len = getLength(data, p);
56997 if ((len + p.place) !== data.length) {
56998 return false;
56999 }
57000 if (data[p.place++] !== 0x02) {
57001 return false;
57002 }
57003 var rlen = getLength(data, p);
57004 var r = data.slice(p.place, rlen + p.place);
57005 p.place += rlen;
57006 if (data[p.place++] !== 0x02) {
57007 return false;
57008 }
57009 var slen = getLength(data, p);
57010 if (data.length !== slen + p.place) {
57011 return false;
57012 }
57013 var s = data.slice(p.place, slen + p.place);
57014 if (r[0] === 0 && (r[1] & 0x80)) {
57015 r = r.slice(1);
57016 }
57017 if (s[0] === 0 && (s[1] & 0x80)) {
57018 s = s.slice(1);
57019 }
57020
57021 this.r = new BN(r);
57022 this.s = new BN(s);
57023 this.recoveryParam = null;
57024
57025 return true;
57026 };
57027
57028 function constructLength(arr, len) {
57029 if (len < 0x80) {
57030 arr.push(len);
57031 return;
57032 }
57033 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
57034 arr.push(octets | 0x80);
57035 while (--octets) {
57036 arr.push((len >>> (octets << 3)) & 0xff);
57037 }
57038 arr.push(len);
57039 }
57040
57041 Signature.prototype.toDER = function toDER(enc) {
57042 var r = this.r.toArray();
57043 var s = this.s.toArray();
57044
57045 // Pad values
57046 if (r[0] & 0x80)
57047 r = [ 0 ].concat(r);
57048 // Pad values
57049 if (s[0] & 0x80)
57050 s = [ 0 ].concat(s);
57051
57052 r = rmPadding(r);
57053 s = rmPadding(s);
57054
57055 while (!s[0] && !(s[1] & 0x80)) {
57056 s = s.slice(1);
57057 }
57058 var arr = [ 0x02 ];
57059 constructLength(arr, r.length);
57060 arr = arr.concat(r);
57061 arr.push(0x02);
57062 constructLength(arr, s.length);
57063 var backHalf = arr.concat(s);
57064 var res = [ 0x30 ];
57065 constructLength(res, backHalf.length);
57066 res = res.concat(backHalf);
57067 return utils.encode(res, enc);
57068 };
57069
57070 },{"../../elliptic":67,"bn.js":17}],77:[function(require,module,exports){
57071 'use strict';
57072
57073 var hash = require('hash.js');
57074 var elliptic = require('../../elliptic');
57075 var utils = elliptic.utils;
57076 var assert = utils.assert;
57077 var parseBytes = utils.parseBytes;
57078 var KeyPair = require('./key');
57079 var Signature = require('./signature');
57080
57081 function EDDSA(curve) {
57082 assert(curve === 'ed25519', 'only tested with ed25519 so far');
57083
57084 if (!(this instanceof EDDSA))
57085 return new EDDSA(curve);
57086
57087 var curve = elliptic.curves[curve].curve;
57088 this.curve = curve;
57089 this.g = curve.g;
57090 this.g.precompute(curve.n.bitLength() + 1);
57091
57092 this.pointClass = curve.point().constructor;
57093 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
57094 this.hash = hash.sha512;
57095 }
57096
57097 module.exports = EDDSA;
57098
57099 /**
57100 * @param {Array|String} message - message bytes
57101 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
57102 * @returns {Signature} - signature
57103 */
57104 EDDSA.prototype.sign = function sign(message, secret) {
57105 message = parseBytes(message);
57106 var key = this.keyFromSecret(secret);
57107 var r = this.hashInt(key.messagePrefix(), message);
57108 var R = this.g.mul(r);
57109 var Rencoded = this.encodePoint(R);
57110 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
57111 .mul(key.priv());
57112 var S = r.add(s_).umod(this.curve.n);
57113 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
57114 };
57115
57116 /**
57117 * @param {Array} message - message bytes
57118 * @param {Array|String|Signature} sig - sig bytes
57119 * @param {Array|String|Point|KeyPair} pub - public key
57120 * @returns {Boolean} - true if public key matches sig of message
57121 */
57122 EDDSA.prototype.verify = function verify(message, sig, pub) {
57123 message = parseBytes(message);
57124 sig = this.makeSignature(sig);
57125 var key = this.keyFromPublic(pub);
57126 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
57127 var SG = this.g.mul(sig.S());
57128 var RplusAh = sig.R().add(key.pub().mul(h));
57129 return RplusAh.eq(SG);
57130 };
57131
57132 EDDSA.prototype.hashInt = function hashInt() {
57133 var hash = this.hash();
57134 for (var i = 0; i < arguments.length; i++)
57135 hash.update(arguments[i]);
57136 return utils.intFromLE(hash.digest()).umod(this.curve.n);
57137 };
57138
57139 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
57140 return KeyPair.fromPublic(this, pub);
57141 };
57142
57143 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
57144 return KeyPair.fromSecret(this, secret);
57145 };
57146
57147 EDDSA.prototype.makeSignature = function makeSignature(sig) {
57148 if (sig instanceof Signature)
57149 return sig;
57150 return new Signature(this, sig);
57151 };
57152
57153 /**
57154 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
57155 *
57156 * EDDSA defines methods for encoding and decoding points and integers. These are
57157 * helper convenience methods, that pass along to utility functions implied
57158 * parameters.
57159 *
57160 */
57161 EDDSA.prototype.encodePoint = function encodePoint(point) {
57162 var enc = point.getY().toArray('le', this.encodingLength);
57163 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
57164 return enc;
57165 };
57166
57167 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
57168 bytes = utils.parseBytes(bytes);
57169
57170 var lastIx = bytes.length - 1;
57171 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
57172 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
57173
57174 var y = utils.intFromLE(normed);
57175 return this.curve.pointFromY(y, xIsOdd);
57176 };
57177
57178 EDDSA.prototype.encodeInt = function encodeInt(num) {
57179 return num.toArray('le', this.encodingLength);
57180 };
57181
57182 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
57183 return utils.intFromLE(bytes);
57184 };
57185
57186 EDDSA.prototype.isPoint = function isPoint(val) {
57187 return val instanceof this.pointClass;
57188 };
57189
57190 },{"../../elliptic":67,"./key":78,"./signature":79,"hash.js":86}],78:[function(require,module,exports){
57191 'use strict';
57192
57193 var elliptic = require('../../elliptic');
57194 var utils = elliptic.utils;
57195 var assert = utils.assert;
57196 var parseBytes = utils.parseBytes;
57197 var cachedProperty = utils.cachedProperty;
57198
57199 /**
57200 * @param {EDDSA} eddsa - instance
57201 * @param {Object} params - public/private key parameters
57202 *
57203 * @param {Array<Byte>} [params.secret] - secret seed bytes
57204 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
57205 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
57206 *
57207 */
57208 function KeyPair(eddsa, params) {
57209 this.eddsa = eddsa;
57210 this._secret = parseBytes(params.secret);
57211 if (eddsa.isPoint(params.pub))
57212 this._pub = params.pub;
57213 else
57214 this._pubBytes = parseBytes(params.pub);
57215 }
57216
57217 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
57218 if (pub instanceof KeyPair)
57219 return pub;
57220 return new KeyPair(eddsa, { pub: pub });
57221 };
57222
57223 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
57224 if (secret instanceof KeyPair)
57225 return secret;
57226 return new KeyPair(eddsa, { secret: secret });
57227 };
57228
57229 KeyPair.prototype.secret = function secret() {
57230 return this._secret;
57231 };
57232
57233 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
57234 return this.eddsa.encodePoint(this.pub());
57235 });
57236
57237 cachedProperty(KeyPair, 'pub', function pub() {
57238 if (this._pubBytes)
57239 return this.eddsa.decodePoint(this._pubBytes);
57240 return this.eddsa.g.mul(this.priv());
57241 });
57242
57243 cachedProperty(KeyPair, 'privBytes', function privBytes() {
57244 var eddsa = this.eddsa;
57245 var hash = this.hash();
57246 var lastIx = eddsa.encodingLength - 1;
57247
57248 var a = hash.slice(0, eddsa.encodingLength);
57249 a[0] &= 248;
57250 a[lastIx] &= 127;
57251 a[lastIx] |= 64;
57252
57253 return a;
57254 });
57255
57256 cachedProperty(KeyPair, 'priv', function priv() {
57257 return this.eddsa.decodeInt(this.privBytes());
57258 });
57259
57260 cachedProperty(KeyPair, 'hash', function hash() {
57261 return this.eddsa.hash().update(this.secret()).digest();
57262 });
57263
57264 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
57265 return this.hash().slice(this.eddsa.encodingLength);
57266 });
57267
57268 KeyPair.prototype.sign = function sign(message) {
57269 assert(this._secret, 'KeyPair can only verify');
57270 return this.eddsa.sign(message, this);
57271 };
57272
57273 KeyPair.prototype.verify = function verify(message, sig) {
57274 return this.eddsa.verify(message, sig, this);
57275 };
57276
57277 KeyPair.prototype.getSecret = function getSecret(enc) {
57278 assert(this._secret, 'KeyPair is public only');
57279 return utils.encode(this.secret(), enc);
57280 };
57281
57282 KeyPair.prototype.getPublic = function getPublic(enc) {
57283 return utils.encode(this.pubBytes(), enc);
57284 };
57285
57286 module.exports = KeyPair;
57287
57288 },{"../../elliptic":67}],79:[function(require,module,exports){
57289 'use strict';
57290
57291 var BN = require('bn.js');
57292 var elliptic = require('../../elliptic');
57293 var utils = elliptic.utils;
57294 var assert = utils.assert;
57295 var cachedProperty = utils.cachedProperty;
57296 var parseBytes = utils.parseBytes;
57297
57298 /**
57299 * @param {EDDSA} eddsa - eddsa instance
57300 * @param {Array<Bytes>|Object} sig -
57301 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
57302 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
57303 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
57304 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
57305 */
57306 function Signature(eddsa, sig) {
57307 this.eddsa = eddsa;
57308
57309 if (typeof sig !== 'object')
57310 sig = parseBytes(sig);
57311
57312 if (Array.isArray(sig)) {
57313 sig = {
57314 R: sig.slice(0, eddsa.encodingLength),
57315 S: sig.slice(eddsa.encodingLength)
57316 };
57317 }
57318
57319 assert(sig.R && sig.S, 'Signature without R or S');
57320
57321 if (eddsa.isPoint(sig.R))
57322 this._R = sig.R;
57323 if (sig.S instanceof BN)
57324 this._S = sig.S;
57325
57326 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
57327 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
57328 }
57329
57330 cachedProperty(Signature, 'S', function S() {
57331 return this.eddsa.decodeInt(this.Sencoded());
57332 });
57333
57334 cachedProperty(Signature, 'R', function R() {
57335 return this.eddsa.decodePoint(this.Rencoded());
57336 });
57337
57338 cachedProperty(Signature, 'Rencoded', function Rencoded() {
57339 return this.eddsa.encodePoint(this.R());
57340 });
57341
57342 cachedProperty(Signature, 'Sencoded', function Sencoded() {
57343 return this.eddsa.encodeInt(this.S());
57344 });
57345
57346 Signature.prototype.toBytes = function toBytes() {
57347 return this.Rencoded().concat(this.Sencoded());
57348 };
57349
57350 Signature.prototype.toHex = function toHex() {
57351 return utils.encode(this.toBytes(), 'hex').toUpperCase();
57352 };
57353
57354 module.exports = Signature;
57355
57356 },{"../../elliptic":67,"bn.js":17}],80:[function(require,module,exports){
57357 module.exports = {
57358 doubles: {
57359 step: 4,
57360 points: [
57361 [
57362 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
57363 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
57364 ],
57365 [
57366 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
57367 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
57368 ],
57369 [
57370 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
57371 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
57372 ],
57373 [
57374 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
57375 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
57376 ],
57377 [
57378 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
57379 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
57380 ],
57381 [
57382 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
57383 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
57384 ],
57385 [
57386 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
57387 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
57388 ],
57389 [
57390 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
57391 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
57392 ],
57393 [
57394 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
57395 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
57396 ],
57397 [
57398 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
57399 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
57400 ],
57401 [
57402 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
57403 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
57404 ],
57405 [
57406 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
57407 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
57408 ],
57409 [
57410 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
57411 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
57412 ],
57413 [
57414 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
57415 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
57416 ],
57417 [
57418 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
57419 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
57420 ],
57421 [
57422 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
57423 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
57424 ],
57425 [
57426 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
57427 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
57428 ],
57429 [
57430 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
57431 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
57432 ],
57433 [
57434 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
57435 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
57436 ],
57437 [
57438 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
57439 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
57440 ],
57441 [
57442 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
57443 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
57444 ],
57445 [
57446 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
57447 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
57448 ],
57449 [
57450 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
57451 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
57452 ],
57453 [
57454 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
57455 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
57456 ],
57457 [
57458 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
57459 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
57460 ],
57461 [
57462 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
57463 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
57464 ],
57465 [
57466 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
57467 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
57468 ],
57469 [
57470 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
57471 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
57472 ],
57473 [
57474 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
57475 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
57476 ],
57477 [
57478 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
57479 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
57480 ],
57481 [
57482 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
57483 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
57484 ],
57485 [
57486 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
57487 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
57488 ],
57489 [
57490 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
57491 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
57492 ],
57493 [
57494 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
57495 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
57496 ],
57497 [
57498 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
57499 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
57500 ],
57501 [
57502 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
57503 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
57504 ],
57505 [
57506 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
57507 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
57508 ],
57509 [
57510 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
57511 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
57512 ],
57513 [
57514 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
57515 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
57516 ],
57517 [
57518 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
57519 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
57520 ],
57521 [
57522 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
57523 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
57524 ],
57525 [
57526 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
57527 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
57528 ],
57529 [
57530 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
57531 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
57532 ],
57533 [
57534 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
57535 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
57536 ],
57537 [
57538 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
57539 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
57540 ],
57541 [
57542 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
57543 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
57544 ],
57545 [
57546 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
57547 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
57548 ],
57549 [
57550 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
57551 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
57552 ],
57553 [
57554 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
57555 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
57556 ],
57557 [
57558 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
57559 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
57560 ],
57561 [
57562 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
57563 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
57564 ],
57565 [
57566 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
57567 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
57568 ],
57569 [
57570 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
57571 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
57572 ],
57573 [
57574 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
57575 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
57576 ],
57577 [
57578 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
57579 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
57580 ],
57581 [
57582 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
57583 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
57584 ],
57585 [
57586 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
57587 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
57588 ],
57589 [
57590 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
57591 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
57592 ],
57593 [
57594 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
57595 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
57596 ],
57597 [
57598 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
57599 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
57600 ],
57601 [
57602 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
57603 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
57604 ],
57605 [
57606 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
57607 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
57608 ],
57609 [
57610 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
57611 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
57612 ],
57613 [
57614 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
57615 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
57616 ],
57617 [
57618 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
57619 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
57620 ]
57621 ]
57622 },
57623 naf: {
57624 wnd: 7,
57625 points: [
57626 [
57627 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
57628 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
57629 ],
57630 [
57631 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
57632 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
57633 ],
57634 [
57635 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
57636 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
57637 ],
57638 [
57639 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
57640 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
57641 ],
57642 [
57643 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
57644 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
57645 ],
57646 [
57647 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
57648 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
57649 ],
57650 [
57651 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
57652 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
57653 ],
57654 [
57655 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
57656 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
57657 ],
57658 [
57659 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
57660 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
57661 ],
57662 [
57663 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
57664 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
57665 ],
57666 [
57667 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
57668 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
57669 ],
57670 [
57671 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
57672 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
57673 ],
57674 [
57675 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
57676 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
57677 ],
57678 [
57679 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
57680 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
57681 ],
57682 [
57683 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
57684 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
57685 ],
57686 [
57687 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
57688 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
57689 ],
57690 [
57691 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
57692 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
57693 ],
57694 [
57695 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
57696 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
57697 ],
57698 [
57699 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
57700 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
57701 ],
57702 [
57703 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
57704 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
57705 ],
57706 [
57707 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
57708 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
57709 ],
57710 [
57711 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
57712 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
57713 ],
57714 [
57715 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
57716 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
57717 ],
57718 [
57719 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
57720 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
57721 ],
57722 [
57723 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
57724 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
57725 ],
57726 [
57727 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
57728 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
57729 ],
57730 [
57731 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
57732 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
57733 ],
57734 [
57735 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
57736 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
57737 ],
57738 [
57739 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
57740 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
57741 ],
57742 [
57743 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
57744 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
57745 ],
57746 [
57747 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
57748 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
57749 ],
57750 [
57751 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
57752 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
57753 ],
57754 [
57755 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
57756 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
57757 ],
57758 [
57759 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
57760 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
57761 ],
57762 [
57763 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
57764 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
57765 ],
57766 [
57767 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
57768 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
57769 ],
57770 [
57771 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
57772 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
57773 ],
57774 [
57775 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
57776 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
57777 ],
57778 [
57779 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
57780 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
57781 ],
57782 [
57783 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
57784 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
57785 ],
57786 [
57787 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
57788 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
57789 ],
57790 [
57791 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
57792 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
57793 ],
57794 [
57795 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
57796 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
57797 ],
57798 [
57799 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
57800 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
57801 ],
57802 [
57803 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
57804 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
57805 ],
57806 [
57807 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
57808 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
57809 ],
57810 [
57811 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
57812 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
57813 ],
57814 [
57815 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
57816 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
57817 ],
57818 [
57819 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
57820 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
57821 ],
57822 [
57823 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
57824 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
57825 ],
57826 [
57827 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
57828 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
57829 ],
57830 [
57831 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
57832 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
57833 ],
57834 [
57835 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
57836 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
57837 ],
57838 [
57839 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
57840 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
57841 ],
57842 [
57843 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
57844 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
57845 ],
57846 [
57847 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
57848 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
57849 ],
57850 [
57851 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
57852 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
57853 ],
57854 [
57855 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
57856 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
57857 ],
57858 [
57859 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
57860 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
57861 ],
57862 [
57863 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
57864 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
57865 ],
57866 [
57867 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
57868 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
57869 ],
57870 [
57871 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
57872 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
57873 ],
57874 [
57875 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
57876 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
57877 ],
57878 [
57879 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
57880 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
57881 ],
57882 [
57883 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
57884 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
57885 ],
57886 [
57887 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
57888 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
57889 ],
57890 [
57891 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
57892 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
57893 ],
57894 [
57895 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
57896 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
57897 ],
57898 [
57899 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
57900 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
57901 ],
57902 [
57903 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
57904 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
57905 ],
57906 [
57907 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
57908 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
57909 ],
57910 [
57911 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
57912 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
57913 ],
57914 [
57915 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
57916 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
57917 ],
57918 [
57919 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
57920 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
57921 ],
57922 [
57923 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
57924 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
57925 ],
57926 [
57927 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
57928 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
57929 ],
57930 [
57931 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
57932 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
57933 ],
57934 [
57935 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
57936 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
57937 ],
57938 [
57939 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
57940 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
57941 ],
57942 [
57943 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
57944 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
57945 ],
57946 [
57947 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
57948 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
57949 ],
57950 [
57951 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
57952 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
57953 ],
57954 [
57955 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
57956 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
57957 ],
57958 [
57959 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
57960 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
57961 ],
57962 [
57963 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
57964 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
57965 ],
57966 [
57967 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
57968 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
57969 ],
57970 [
57971 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
57972 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
57973 ],
57974 [
57975 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
57976 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
57977 ],
57978 [
57979 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
57980 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
57981 ],
57982 [
57983 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
57984 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
57985 ],
57986 [
57987 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
57988 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
57989 ],
57990 [
57991 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
57992 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
57993 ],
57994 [
57995 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
57996 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
57997 ],
57998 [
57999 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
58000 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
58001 ],
58002 [
58003 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
58004 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
58005 ],
58006 [
58007 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
58008 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
58009 ],
58010 [
58011 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
58012 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
58013 ],
58014 [
58015 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
58016 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
58017 ],
58018 [
58019 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
58020 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
58021 ],
58022 [
58023 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
58024 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
58025 ],
58026 [
58027 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
58028 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
58029 ],
58030 [
58031 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
58032 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
58033 ],
58034 [
58035 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
58036 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
58037 ],
58038 [
58039 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
58040 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
58041 ],
58042 [
58043 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
58044 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
58045 ],
58046 [
58047 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
58048 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
58049 ],
58050 [
58051 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
58052 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
58053 ],
58054 [
58055 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
58056 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
58057 ],
58058 [
58059 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
58060 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
58061 ],
58062 [
58063 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
58064 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
58065 ],
58066 [
58067 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
58068 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
58069 ],
58070 [
58071 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
58072 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
58073 ],
58074 [
58075 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
58076 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
58077 ],
58078 [
58079 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
58080 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
58081 ],
58082 [
58083 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
58084 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
58085 ],
58086 [
58087 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
58088 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
58089 ],
58090 [
58091 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
58092 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
58093 ],
58094 [
58095 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
58096 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
58097 ],
58098 [
58099 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
58100 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
58101 ],
58102 [
58103 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
58104 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
58105 ],
58106 [
58107 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
58108 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
58109 ],
58110 [
58111 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
58112 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
58113 ],
58114 [
58115 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
58116 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
58117 ],
58118 [
58119 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
58120 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
58121 ],
58122 [
58123 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
58124 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
58125 ],
58126 [
58127 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
58128 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
58129 ],
58130 [
58131 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
58132 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
58133 ]
58134 ]
58135 }
58136 };
58137
58138 },{}],81:[function(require,module,exports){
58139 'use strict';
58140
58141 var utils = exports;
58142 var BN = require('bn.js');
58143 var minAssert = require('minimalistic-assert');
58144 var minUtils = require('minimalistic-crypto-utils');
58145
58146 utils.assert = minAssert;
58147 utils.toArray = minUtils.toArray;
58148 utils.zero2 = minUtils.zero2;
58149 utils.toHex = minUtils.toHex;
58150 utils.encode = minUtils.encode;
58151
58152 // Represent num in a w-NAF form
58153 function getNAF(num, w) {
58154 var naf = [];
58155 var ws = 1 << (w + 1);
58156 var k = num.clone();
58157 while (k.cmpn(1) >= 0) {
58158 var z;
58159 if (k.isOdd()) {
58160 var mod = k.andln(ws - 1);
58161 if (mod > (ws >> 1) - 1)
58162 z = (ws >> 1) - mod;
58163 else
58164 z = mod;
58165 k.isubn(z);
58166 } else {
58167 z = 0;
58168 }
58169 naf.push(z);
58170
58171 // Optimization, shift by word if possible
58172 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
58173 for (var i = 1; i < shift; i++)
58174 naf.push(0);
58175 k.iushrn(shift);
58176 }
58177
58178 return naf;
58179 }
58180 utils.getNAF = getNAF;
58181
58182 // Represent k1, k2 in a Joint Sparse Form
58183 function getJSF(k1, k2) {
58184 var jsf = [
58185 [],
58186 []
58187 ];
58188
58189 k1 = k1.clone();
58190 k2 = k2.clone();
58191 var d1 = 0;
58192 var d2 = 0;
58193 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
58194
58195 // First phase
58196 var m14 = (k1.andln(3) + d1) & 3;
58197 var m24 = (k2.andln(3) + d2) & 3;
58198 if (m14 === 3)
58199 m14 = -1;
58200 if (m24 === 3)
58201 m24 = -1;
58202 var u1;
58203 if ((m14 & 1) === 0) {
58204 u1 = 0;
58205 } else {
58206 var m8 = (k1.andln(7) + d1) & 7;
58207 if ((m8 === 3 || m8 === 5) && m24 === 2)
58208 u1 = -m14;
58209 else
58210 u1 = m14;
58211 }
58212 jsf[0].push(u1);
58213
58214 var u2;
58215 if ((m24 & 1) === 0) {
58216 u2 = 0;
58217 } else {
58218 var m8 = (k2.andln(7) + d2) & 7;
58219 if ((m8 === 3 || m8 === 5) && m14 === 2)
58220 u2 = -m24;
58221 else
58222 u2 = m24;
58223 }
58224 jsf[1].push(u2);
58225
58226 // Second phase
58227 if (2 * d1 === u1 + 1)
58228 d1 = 1 - d1;
58229 if (2 * d2 === u2 + 1)
58230 d2 = 1 - d2;
58231 k1.iushrn(1);
58232 k2.iushrn(1);
58233 }
58234
58235 return jsf;
58236 }
58237 utils.getJSF = getJSF;
58238
58239 function cachedProperty(obj, name, computer) {
58240 var key = '_' + name;
58241 obj.prototype[name] = function cachedProperty() {
58242 return this[key] !== undefined ? this[key] :
58243 this[key] = computer.call(this);
58244 };
58245 }
58246 utils.cachedProperty = cachedProperty;
58247
58248 function parseBytes(bytes) {
58249 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
58250 bytes;
58251 }
58252 utils.parseBytes = parseBytes;
58253
58254 function intFromLE(bytes) {
58255 return new BN(bytes, 'hex', 'le');
58256 }
58257 utils.intFromLE = intFromLE;
58258
58259
58260 },{"bn.js":17,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],82:[function(require,module,exports){
58261 module.exports={
58262 "_args": [
58263 [
58264 "elliptic@^6.0.0",
58265 "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign"
58266 ]
58267 ],
58268 "_from": "elliptic@>=6.0.0 <7.0.0",
58269 "_id": "elliptic@6.4.0",
58270 "_inCache": true,
58271 "_installable": true,
58272 "_location": "/browserify/elliptic",
58273 "_nodeVersion": "7.0.0",
58274 "_npmOperationalInternal": {
58275 "host": "packages-18-east.internal.npmjs.com",
58276 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
58277 },
58278 "_npmUser": {
58279 "email": "fedor@indutny.com",
58280 "name": "indutny"
58281 },
58282 "_npmVersion": "3.10.8",
58283 "_phantomChildren": {},
58284 "_requested": {
58285 "name": "elliptic",
58286 "raw": "elliptic@^6.0.0",
58287 "rawSpec": "^6.0.0",
58288 "scope": null,
58289 "spec": ">=6.0.0 <7.0.0",
58290 "type": "range"
58291 },
58292 "_requiredBy": [
58293 "/browserify/browserify-sign",
58294 "/browserify/create-ecdh"
58295 ],
58296 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
58297 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
58298 "_shrinkwrap": null,
58299 "_spec": "elliptic@^6.0.0",
58300 "_where": "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign",
58301 "author": {
58302 "email": "fedor@indutny.com",
58303 "name": "Fedor Indutny"
58304 },
58305 "bugs": {
58306 "url": "https://github.com/indutny/elliptic/issues"
58307 },
58308 "dependencies": {
58309 "bn.js": "^4.4.0",
58310 "brorand": "^1.0.1",
58311 "hash.js": "^1.0.0",
58312 "hmac-drbg": "^1.0.0",
58313 "inherits": "^2.0.1",
58314 "minimalistic-assert": "^1.0.0",
58315 "minimalistic-crypto-utils": "^1.0.0"
58316 },
58317 "description": "EC cryptography",
58318 "devDependencies": {
58319 "brfs": "^1.4.3",
58320 "coveralls": "^2.11.3",
58321 "grunt": "^0.4.5",
58322 "grunt-browserify": "^5.0.0",
58323 "grunt-cli": "^1.2.0",
58324 "grunt-contrib-connect": "^1.0.0",
58325 "grunt-contrib-copy": "^1.0.0",
58326 "grunt-contrib-uglify": "^1.0.1",
58327 "grunt-mocha-istanbul": "^3.0.1",
58328 "grunt-saucelabs": "^8.6.2",
58329 "istanbul": "^0.4.2",
58330 "jscs": "^2.9.0",
58331 "jshint": "^2.6.0",
58332 "mocha": "^2.1.0"
58333 },
58334 "directories": {},
58335 "dist": {
58336 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
58337 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
58338 },
58339 "files": [
58340 "lib"
58341 ],
58342 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
58343 "homepage": "https://github.com/indutny/elliptic",
58344 "keywords": [
58345 "EC",
58346 "Elliptic",
58347 "curve",
58348 "Cryptography"
58349 ],
58350 "license": "MIT",
58351 "main": "lib/elliptic.js",
58352 "maintainers": [
58353 {
58354 "email": "fedor@indutny.com",
58355 "name": "indutny"
58356 }
58357 ],
58358 "name": "elliptic",
58359 "optionalDependencies": {},
58360 "readme": "ERROR: No README data found!",
58361 "repository": {
58362 "type": "git",
58363 "url": "git+ssh://git@github.com/indutny/elliptic.git"
58364 },
58365 "scripts": {
58366 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
58367 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
58368 "lint": "npm run jscs && npm run jshint",
58369 "test": "npm run lint && npm run unit",
58370 "unit": "istanbul test _mocha --reporter=spec test/index.js",
58371 "version": "grunt dist && git add dist/"
58372 },
58373 "version": "6.4.0"
58374 }
58375
58376 },{}],83:[function(require,module,exports){
58377 // Copyright Joyent, Inc. and other Node contributors.
58378 //
58379 // Permission is hereby granted, free of charge, to any person obtaining a
58380 // copy of this software and associated documentation files (the
58381 // "Software"), to deal in the Software without restriction, including
58382 // without limitation the rights to use, copy, modify, merge, publish,
58383 // distribute, sublicense, and/or sell copies of the Software, and to permit
58384 // persons to whom the Software is furnished to do so, subject to the
58385 // following conditions:
58386 //
58387 // The above copyright notice and this permission notice shall be included
58388 // in all copies or substantial portions of the Software.
58389 //
58390 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
58391 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
58392 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
58393 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
58394 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
58395 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
58396 // USE OR OTHER DEALINGS IN THE SOFTWARE.
58397
58398 function EventEmitter() {
58399 this._events = this._events || {};
58400 this._maxListeners = this._maxListeners || undefined;
58401 }
58402 module.exports = EventEmitter;
58403
58404 // Backwards-compat with node 0.10.x
58405 EventEmitter.EventEmitter = EventEmitter;
58406
58407 EventEmitter.prototype._events = undefined;
58408 EventEmitter.prototype._maxListeners = undefined;
58409
58410 // By default EventEmitters will print a warning if more than 10 listeners are
58411 // added to it. This is a useful default which helps finding memory leaks.
58412 EventEmitter.defaultMaxListeners = 10;
58413
58414 // Obviously not all Emitters should be limited to 10. This function allows
58415 // that to be increased. Set to zero for unlimited.
58416 EventEmitter.prototype.setMaxListeners = function(n) {
58417 if (!isNumber(n) || n < 0 || isNaN(n))
58418 throw TypeError('n must be a positive number');
58419 this._maxListeners = n;
58420 return this;
58421 };
58422
58423 EventEmitter.prototype.emit = function(type) {
58424 var er, handler, len, args, i, listeners;
58425
58426 if (!this._events)
58427 this._events = {};
58428
58429 // If there is no 'error' event listener then throw.
58430 if (type === 'error') {
58431 if (!this._events.error ||
58432 (isObject(this._events.error) && !this._events.error.length)) {
58433 er = arguments[1];
58434 if (er instanceof Error) {
58435 throw er; // Unhandled 'error' event
58436 } else {
58437 // At least give some kind of context to the user
58438 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
58439 err.context = er;
58440 throw err;
58441 }
58442 }
58443 }
58444
58445 handler = this._events[type];
58446
58447 if (isUndefined(handler))
58448 return false;
58449
58450 if (isFunction(handler)) {
58451 switch (arguments.length) {
58452 // fast cases
58453 case 1:
58454 handler.call(this);
58455 break;
58456 case 2:
58457 handler.call(this, arguments[1]);
58458 break;
58459 case 3:
58460 handler.call(this, arguments[1], arguments[2]);
58461 break;
58462 // slower
58463 default:
58464 args = Array.prototype.slice.call(arguments, 1);
58465 handler.apply(this, args);
58466 }
58467 } else if (isObject(handler)) {
58468 args = Array.prototype.slice.call(arguments, 1);
58469 listeners = handler.slice();
58470 len = listeners.length;
58471 for (i = 0; i < len; i++)
58472 listeners[i].apply(this, args);
58473 }
58474
58475 return true;
58476 };
58477
58478 EventEmitter.prototype.addListener = function(type, listener) {
58479 var m;
58480
58481 if (!isFunction(listener))
58482 throw TypeError('listener must be a function');
58483
58484 if (!this._events)
58485 this._events = {};
58486
58487 // To avoid recursion in the case that type === "newListener"! Before
58488 // adding it to the listeners, first emit "newListener".
58489 if (this._events.newListener)
58490 this.emit('newListener', type,
58491 isFunction(listener.listener) ?
58492 listener.listener : listener);
58493
58494 if (!this._events[type])
58495 // Optimize the case of one listener. Don't need the extra array object.
58496 this._events[type] = listener;
58497 else if (isObject(this._events[type]))
58498 // If we've already got an array, just append.
58499 this._events[type].push(listener);
58500 else
58501 // Adding the second element, need to change to array.
58502 this._events[type] = [this._events[type], listener];
58503
58504 // Check for listener leak
58505 if (isObject(this._events[type]) && !this._events[type].warned) {
58506 if (!isUndefined(this._maxListeners)) {
58507 m = this._maxListeners;
58508 } else {
58509 m = EventEmitter.defaultMaxListeners;
58510 }
58511
58512 if (m && m > 0 && this._events[type].length > m) {
58513 this._events[type].warned = true;
58514 console.error('(node) warning: possible EventEmitter memory ' +
58515 'leak detected. %d listeners added. ' +
58516 'Use emitter.setMaxListeners() to increase limit.',
58517 this._events[type].length);
58518 if (typeof console.trace === 'function') {
58519 // not supported in IE 10
58520 console.trace();
58521 }
58522 }
58523 }
58524
58525 return this;
58526 };
58527
58528 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
58529
58530 EventEmitter.prototype.once = function(type, listener) {
58531 if (!isFunction(listener))
58532 throw TypeError('listener must be a function');
58533
58534 var fired = false;
58535
58536 function g() {
58537 this.removeListener(type, g);
58538
58539 if (!fired) {
58540 fired = true;
58541 listener.apply(this, arguments);
58542 }
58543 }
58544
58545 g.listener = listener;
58546 this.on(type, g);
58547
58548 return this;
58549 };
58550
58551 // emits a 'removeListener' event iff the listener was removed
58552 EventEmitter.prototype.removeListener = function(type, listener) {
58553 var list, position, length, i;
58554
58555 if (!isFunction(listener))
58556 throw TypeError('listener must be a function');
58557
58558 if (!this._events || !this._events[type])
58559 return this;
58560
58561 list = this._events[type];
58562 length = list.length;
58563 position = -1;
58564
58565 if (list === listener ||
58566 (isFunction(list.listener) && list.listener === listener)) {
58567 delete this._events[type];
58568 if (this._events.removeListener)
58569 this.emit('removeListener', type, listener);
58570
58571 } else if (isObject(list)) {
58572 for (i = length; i-- > 0;) {
58573 if (list[i] === listener ||
58574 (list[i].listener && list[i].listener === listener)) {
58575 position = i;
58576 break;
58577 }
58578 }
58579
58580 if (position < 0)
58581 return this;
58582
58583 if (list.length === 1) {
58584 list.length = 0;
58585 delete this._events[type];
58586 } else {
58587 list.splice(position, 1);
58588 }
58589
58590 if (this._events.removeListener)
58591 this.emit('removeListener', type, listener);
58592 }
58593
58594 return this;
58595 };
58596
58597 EventEmitter.prototype.removeAllListeners = function(type) {
58598 var key, listeners;
58599
58600 if (!this._events)
58601 return this;
58602
58603 // not listening for removeListener, no need to emit
58604 if (!this._events.removeListener) {
58605 if (arguments.length === 0)
58606 this._events = {};
58607 else if (this._events[type])
58608 delete this._events[type];
58609 return this;
58610 }
58611
58612 // emit removeListener for all listeners on all events
58613 if (arguments.length === 0) {
58614 for (key in this._events) {
58615 if (key === 'removeListener') continue;
58616 this.removeAllListeners(key);
58617 }
58618 this.removeAllListeners('removeListener');
58619 this._events = {};
58620 return this;
58621 }
58622
58623 listeners = this._events[type];
58624
58625 if (isFunction(listeners)) {
58626 this.removeListener(type, listeners);
58627 } else if (listeners) {
58628 // LIFO order
58629 while (listeners.length)
58630 this.removeListener(type, listeners[listeners.length - 1]);
58631 }
58632 delete this._events[type];
58633
58634 return this;
58635 };
58636
58637 EventEmitter.prototype.listeners = function(type) {
58638 var ret;
58639 if (!this._events || !this._events[type])
58640 ret = [];
58641 else if (isFunction(this._events[type]))
58642 ret = [this._events[type]];
58643 else
58644 ret = this._events[type].slice();
58645 return ret;
58646 };
58647
58648 EventEmitter.prototype.listenerCount = function(type) {
58649 if (this._events) {
58650 var evlistener = this._events[type];
58651
58652 if (isFunction(evlistener))
58653 return 1;
58654 else if (evlistener)
58655 return evlistener.length;
58656 }
58657 return 0;
58658 };
58659
58660 EventEmitter.listenerCount = function(emitter, type) {
58661 return emitter.listenerCount(type);
58662 };
58663
58664 function isFunction(arg) {
58665 return typeof arg === 'function';
58666 }
58667
58668 function isNumber(arg) {
58669 return typeof arg === 'number';
58670 }
58671
58672 function isObject(arg) {
58673 return typeof arg === 'object' && arg !== null;
58674 }
58675
58676 function isUndefined(arg) {
58677 return arg === void 0;
58678 }
58679
58680 },{}],84:[function(require,module,exports){
58681 (function (Buffer){
58682 var md5 = require('create-hash/md5')
58683 module.exports = EVP_BytesToKey
58684 function EVP_BytesToKey (password, salt, keyLen, ivLen) {
58685 if (!Buffer.isBuffer(password)) {
58686 password = new Buffer(password, 'binary')
58687 }
58688 if (salt && !Buffer.isBuffer(salt)) {
58689 salt = new Buffer(salt, 'binary')
58690 }
58691 keyLen = keyLen / 8
58692 ivLen = ivLen || 0
58693 var ki = 0
58694 var ii = 0
58695 var key = new Buffer(keyLen)
58696 var iv = new Buffer(ivLen)
58697 var addmd = 0
58698 var md_buf
58699 var i
58700 var bufs = []
58701 while (true) {
58702 if (addmd++ > 0) {
58703 bufs.push(md_buf)
58704 }
58705 bufs.push(password)
58706 if (salt) {
58707 bufs.push(salt)
58708 }
58709 md_buf = md5(Buffer.concat(bufs))
58710 bufs = []
58711 i = 0
58712 if (keyLen > 0) {
58713 while (true) {
58714 if (keyLen === 0) {
58715 break
58716 }
58717 if (i === md_buf.length) {
58718 break
58719 }
58720 key[ki++] = md_buf[i]
58721 keyLen--
58722 i++
58723 }
58724 }
58725 if (ivLen > 0 && i !== md_buf.length) {
58726 while (true) {
58727 if (ivLen === 0) {
58728 break
58729 }
58730 if (i === md_buf.length) {
58731 break
58732 }
58733 iv[ii++] = md_buf[i]
58734 ivLen--
58735 i++
58736 }
58737 }
58738 if (keyLen === 0 && ivLen === 0) {
58739 break
58740 }
58741 }
58742 for (i = 0; i < md_buf.length; i++) {
58743 md_buf[i] = 0
58744 }
58745 return {
58746 key: key,
58747 iv: iv
58748 }
58749 }
58750
58751 }).call(this,require("buffer").Buffer)
58752 },{"buffer":47,"create-hash/md5":53}],85:[function(require,module,exports){
58753 (function (Buffer){
58754 'use strict'
58755 var Transform = require('stream').Transform
58756 var inherits = require('inherits')
58757
58758 function HashBase (blockSize) {
58759 Transform.call(this)
58760
58761 this._block = new Buffer(blockSize)
58762 this._blockSize = blockSize
58763 this._blockOffset = 0
58764 this._length = [0, 0, 0, 0]
58765
58766 this._finalized = false
58767 }
58768
58769 inherits(HashBase, Transform)
58770
58771 HashBase.prototype._transform = function (chunk, encoding, callback) {
58772 var error = null
58773 try {
58774 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
58775 this.update(chunk)
58776 } catch (err) {
58777 error = err
58778 }
58779
58780 callback(error)
58781 }
58782
58783 HashBase.prototype._flush = function (callback) {
58784 var error = null
58785 try {
58786 this.push(this._digest())
58787 } catch (err) {
58788 error = err
58789 }
58790
58791 callback(error)
58792 }
58793
58794 HashBase.prototype.update = function (data, encoding) {
58795 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
58796 if (this._finalized) throw new Error('Digest already called')
58797 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
58798
58799 // consume data
58800 var block = this._block
58801 var offset = 0
58802 while (this._blockOffset + data.length - offset >= this._blockSize) {
58803 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
58804 this._update()
58805 this._blockOffset = 0
58806 }
58807 while (offset < data.length) block[this._blockOffset++] = data[offset++]
58808
58809 // update length
58810 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
58811 this._length[j] += carry
58812 carry = (this._length[j] / 0x0100000000) | 0
58813 if (carry > 0) this._length[j] -= 0x0100000000 * carry
58814 }
58815
58816 return this
58817 }
58818
58819 HashBase.prototype._update = function (data) {
58820 throw new Error('_update is not implemented')
58821 }
58822
58823 HashBase.prototype.digest = function (encoding) {
58824 if (this._finalized) throw new Error('Digest already called')
58825 this._finalized = true
58826
58827 var digest = this._digest()
58828 if (encoding !== undefined) digest = digest.toString(encoding)
58829 return digest
58830 }
58831
58832 HashBase.prototype._digest = function () {
58833 throw new Error('_digest is not implemented')
58834 }
58835
58836 module.exports = HashBase
58837
58838 }).call(this,require("buffer").Buffer)
58839 },{"buffer":47,"inherits":95,"stream":143}],86:[function(require,module,exports){
58840 var hash = exports;
58841
58842 hash.utils = require('./hash/utils');
58843 hash.common = require('./hash/common');
58844 hash.sha = require('./hash/sha');
58845 hash.ripemd = require('./hash/ripemd');
58846 hash.hmac = require('./hash/hmac');
58847
58848 // Proxy hash functions to the main object
58849 hash.sha1 = hash.sha.sha1;
58850 hash.sha256 = hash.sha.sha256;
58851 hash.sha224 = hash.sha.sha224;
58852 hash.sha384 = hash.sha.sha384;
58853 hash.sha512 = hash.sha.sha512;
58854 hash.ripemd160 = hash.ripemd.ripemd160;
58855
58856 },{"./hash/common":87,"./hash/hmac":88,"./hash/ripemd":89,"./hash/sha":90,"./hash/utils":91}],87:[function(require,module,exports){
58857 var hash = require('../hash');
58858 var utils = hash.utils;
58859 var assert = utils.assert;
58860
58861 function BlockHash() {
58862 this.pending = null;
58863 this.pendingTotal = 0;
58864 this.blockSize = this.constructor.blockSize;
58865 this.outSize = this.constructor.outSize;
58866 this.hmacStrength = this.constructor.hmacStrength;
58867 this.padLength = this.constructor.padLength / 8;
58868 this.endian = 'big';
58869
58870 this._delta8 = this.blockSize / 8;
58871 this._delta32 = this.blockSize / 32;
58872 }
58873 exports.BlockHash = BlockHash;
58874
58875 BlockHash.prototype.update = function update(msg, enc) {
58876 // Convert message to array, pad it, and join into 32bit blocks
58877 msg = utils.toArray(msg, enc);
58878 if (!this.pending)
58879 this.pending = msg;
58880 else
58881 this.pending = this.pending.concat(msg);
58882 this.pendingTotal += msg.length;
58883
58884 // Enough data, try updating
58885 if (this.pending.length >= this._delta8) {
58886 msg = this.pending;
58887
58888 // Process pending data in blocks
58889 var r = msg.length % this._delta8;
58890 this.pending = msg.slice(msg.length - r, msg.length);
58891 if (this.pending.length === 0)
58892 this.pending = null;
58893
58894 msg = utils.join32(msg, 0, msg.length - r, this.endian);
58895 for (var i = 0; i < msg.length; i += this._delta32)
58896 this._update(msg, i, i + this._delta32);
58897 }
58898
58899 return this;
58900 };
58901
58902 BlockHash.prototype.digest = function digest(enc) {
58903 this.update(this._pad());
58904 assert(this.pending === null);
58905
58906 return this._digest(enc);
58907 };
58908
58909 BlockHash.prototype._pad = function pad() {
58910 var len = this.pendingTotal;
58911 var bytes = this._delta8;
58912 var k = bytes - ((len + this.padLength) % bytes);
58913 var res = new Array(k + this.padLength);
58914 res[0] = 0x80;
58915 for (var i = 1; i < k; i++)
58916 res[i] = 0;
58917
58918 // Append length
58919 len <<= 3;
58920 if (this.endian === 'big') {
58921 for (var t = 8; t < this.padLength; t++)
58922 res[i++] = 0;
58923
58924 res[i++] = 0;
58925 res[i++] = 0;
58926 res[i++] = 0;
58927 res[i++] = 0;
58928 res[i++] = (len >>> 24) & 0xff;
58929 res[i++] = (len >>> 16) & 0xff;
58930 res[i++] = (len >>> 8) & 0xff;
58931 res[i++] = len & 0xff;
58932 } else {
58933 res[i++] = len & 0xff;
58934 res[i++] = (len >>> 8) & 0xff;
58935 res[i++] = (len >>> 16) & 0xff;
58936 res[i++] = (len >>> 24) & 0xff;
58937 res[i++] = 0;
58938 res[i++] = 0;
58939 res[i++] = 0;
58940 res[i++] = 0;
58941
58942 for (var t = 8; t < this.padLength; t++)
58943 res[i++] = 0;
58944 }
58945
58946 return res;
58947 };
58948
58949 },{"../hash":86}],88:[function(require,module,exports){
58950 var hmac = exports;
58951
58952 var hash = require('../hash');
58953 var utils = hash.utils;
58954 var assert = utils.assert;
58955
58956 function Hmac(hash, key, enc) {
58957 if (!(this instanceof Hmac))
58958 return new Hmac(hash, key, enc);
58959 this.Hash = hash;
58960 this.blockSize = hash.blockSize / 8;
58961 this.outSize = hash.outSize / 8;
58962 this.inner = null;
58963 this.outer = null;
58964
58965 this._init(utils.toArray(key, enc));
58966 }
58967 module.exports = Hmac;
58968
58969 Hmac.prototype._init = function init(key) {
58970 // Shorten key, if needed
58971 if (key.length > this.blockSize)
58972 key = new this.Hash().update(key).digest();
58973 assert(key.length <= this.blockSize);
58974
58975 // Add padding to key
58976 for (var i = key.length; i < this.blockSize; i++)
58977 key.push(0);
58978
58979 for (var i = 0; i < key.length; i++)
58980 key[i] ^= 0x36;
58981 this.inner = new this.Hash().update(key);
58982
58983 // 0x36 ^ 0x5c = 0x6a
58984 for (var i = 0; i < key.length; i++)
58985 key[i] ^= 0x6a;
58986 this.outer = new this.Hash().update(key);
58987 };
58988
58989 Hmac.prototype.update = function update(msg, enc) {
58990 this.inner.update(msg, enc);
58991 return this;
58992 };
58993
58994 Hmac.prototype.digest = function digest(enc) {
58995 this.outer.update(this.inner.digest());
58996 return this.outer.digest(enc);
58997 };
58998
58999 },{"../hash":86}],89:[function(require,module,exports){
59000 var hash = require('../hash');
59001 var utils = hash.utils;
59002
59003 var rotl32 = utils.rotl32;
59004 var sum32 = utils.sum32;
59005 var sum32_3 = utils.sum32_3;
59006 var sum32_4 = utils.sum32_4;
59007 var BlockHash = hash.common.BlockHash;
59008
59009 function RIPEMD160() {
59010 if (!(this instanceof RIPEMD160))
59011 return new RIPEMD160();
59012
59013 BlockHash.call(this);
59014
59015 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
59016 this.endian = 'little';
59017 }
59018 utils.inherits(RIPEMD160, BlockHash);
59019 exports.ripemd160 = RIPEMD160;
59020
59021 RIPEMD160.blockSize = 512;
59022 RIPEMD160.outSize = 160;
59023 RIPEMD160.hmacStrength = 192;
59024 RIPEMD160.padLength = 64;
59025
59026 RIPEMD160.prototype._update = function update(msg, start) {
59027 var A = this.h[0];
59028 var B = this.h[1];
59029 var C = this.h[2];
59030 var D = this.h[3];
59031 var E = this.h[4];
59032 var Ah = A;
59033 var Bh = B;
59034 var Ch = C;
59035 var Dh = D;
59036 var Eh = E;
59037 for (var j = 0; j < 80; j++) {
59038 var T = sum32(
59039 rotl32(
59040 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
59041 s[j]),
59042 E);
59043 A = E;
59044 E = D;
59045 D = rotl32(C, 10);
59046 C = B;
59047 B = T;
59048 T = sum32(
59049 rotl32(
59050 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
59051 sh[j]),
59052 Eh);
59053 Ah = Eh;
59054 Eh = Dh;
59055 Dh = rotl32(Ch, 10);
59056 Ch = Bh;
59057 Bh = T;
59058 }
59059 T = sum32_3(this.h[1], C, Dh);
59060 this.h[1] = sum32_3(this.h[2], D, Eh);
59061 this.h[2] = sum32_3(this.h[3], E, Ah);
59062 this.h[3] = sum32_3(this.h[4], A, Bh);
59063 this.h[4] = sum32_3(this.h[0], B, Ch);
59064 this.h[0] = T;
59065 };
59066
59067 RIPEMD160.prototype._digest = function digest(enc) {
59068 if (enc === 'hex')
59069 return utils.toHex32(this.h, 'little');
59070 else
59071 return utils.split32(this.h, 'little');
59072 };
59073
59074 function f(j, x, y, z) {
59075 if (j <= 15)
59076 return x ^ y ^ z;
59077 else if (j <= 31)
59078 return (x & y) | ((~x) & z);
59079 else if (j <= 47)
59080 return (x | (~y)) ^ z;
59081 else if (j <= 63)
59082 return (x & z) | (y & (~z));
59083 else
59084 return x ^ (y | (~z));
59085 }
59086
59087 function K(j) {
59088 if (j <= 15)
59089 return 0x00000000;
59090 else if (j <= 31)
59091 return 0x5a827999;
59092 else if (j <= 47)
59093 return 0x6ed9eba1;
59094 else if (j <= 63)
59095 return 0x8f1bbcdc;
59096 else
59097 return 0xa953fd4e;
59098 }
59099
59100 function Kh(j) {
59101 if (j <= 15)
59102 return 0x50a28be6;
59103 else if (j <= 31)
59104 return 0x5c4dd124;
59105 else if (j <= 47)
59106 return 0x6d703ef3;
59107 else if (j <= 63)
59108 return 0x7a6d76e9;
59109 else
59110 return 0x00000000;
59111 }
59112
59113 var r = [
59114 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
59115 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
59116 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
59117 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
59118 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
59119 ];
59120
59121 var rh = [
59122 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
59123 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
59124 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
59125 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
59126 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
59127 ];
59128
59129 var s = [
59130 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
59131 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
59132 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
59133 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
59134 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
59135 ];
59136
59137 var sh = [
59138 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
59139 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
59140 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
59141 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
59142 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
59143 ];
59144
59145 },{"../hash":86}],90:[function(require,module,exports){
59146 var hash = require('../hash');
59147 var utils = hash.utils;
59148 var assert = utils.assert;
59149
59150 var rotr32 = utils.rotr32;
59151 var rotl32 = utils.rotl32;
59152 var sum32 = utils.sum32;
59153 var sum32_4 = utils.sum32_4;
59154 var sum32_5 = utils.sum32_5;
59155 var rotr64_hi = utils.rotr64_hi;
59156 var rotr64_lo = utils.rotr64_lo;
59157 var shr64_hi = utils.shr64_hi;
59158 var shr64_lo = utils.shr64_lo;
59159 var sum64 = utils.sum64;
59160 var sum64_hi = utils.sum64_hi;
59161 var sum64_lo = utils.sum64_lo;
59162 var sum64_4_hi = utils.sum64_4_hi;
59163 var sum64_4_lo = utils.sum64_4_lo;
59164 var sum64_5_hi = utils.sum64_5_hi;
59165 var sum64_5_lo = utils.sum64_5_lo;
59166 var BlockHash = hash.common.BlockHash;
59167
59168 var sha256_K = [
59169 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
59170 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
59171 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
59172 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
59173 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
59174 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
59175 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
59176 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
59177 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
59178 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
59179 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
59180 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
59181 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
59182 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
59183 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
59184 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
59185 ];
59186
59187 var sha512_K = [
59188 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
59189 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
59190 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
59191 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
59192 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
59193 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
59194 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
59195 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
59196 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
59197 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
59198 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
59199 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
59200 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
59201 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
59202 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
59203 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
59204 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
59205 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
59206 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
59207 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
59208 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
59209 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
59210 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
59211 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
59212 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
59213 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
59214 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
59215 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
59216 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
59217 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
59218 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
59219 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
59220 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
59221 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
59222 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
59223 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
59224 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
59225 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
59226 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
59227 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
59228 ];
59229
59230 var sha1_K = [
59231 0x5A827999, 0x6ED9EBA1,
59232 0x8F1BBCDC, 0xCA62C1D6
59233 ];
59234
59235 function SHA256() {
59236 if (!(this instanceof SHA256))
59237 return new SHA256();
59238
59239 BlockHash.call(this);
59240 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
59241 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
59242 this.k = sha256_K;
59243 this.W = new Array(64);
59244 }
59245 utils.inherits(SHA256, BlockHash);
59246 exports.sha256 = SHA256;
59247
59248 SHA256.blockSize = 512;
59249 SHA256.outSize = 256;
59250 SHA256.hmacStrength = 192;
59251 SHA256.padLength = 64;
59252
59253 SHA256.prototype._update = function _update(msg, start) {
59254 var W = this.W;
59255
59256 for (var i = 0; i < 16; i++)
59257 W[i] = msg[start + i];
59258 for (; i < W.length; i++)
59259 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
59260
59261 var a = this.h[0];
59262 var b = this.h[1];
59263 var c = this.h[2];
59264 var d = this.h[3];
59265 var e = this.h[4];
59266 var f = this.h[5];
59267 var g = this.h[6];
59268 var h = this.h[7];
59269
59270 assert(this.k.length === W.length);
59271 for (var i = 0; i < W.length; i++) {
59272 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
59273 var T2 = sum32(s0_256(a), maj32(a, b, c));
59274 h = g;
59275 g = f;
59276 f = e;
59277 e = sum32(d, T1);
59278 d = c;
59279 c = b;
59280 b = a;
59281 a = sum32(T1, T2);
59282 }
59283
59284 this.h[0] = sum32(this.h[0], a);
59285 this.h[1] = sum32(this.h[1], b);
59286 this.h[2] = sum32(this.h[2], c);
59287 this.h[3] = sum32(this.h[3], d);
59288 this.h[4] = sum32(this.h[4], e);
59289 this.h[5] = sum32(this.h[5], f);
59290 this.h[6] = sum32(this.h[6], g);
59291 this.h[7] = sum32(this.h[7], h);
59292 };
59293
59294 SHA256.prototype._digest = function digest(enc) {
59295 if (enc === 'hex')
59296 return utils.toHex32(this.h, 'big');
59297 else
59298 return utils.split32(this.h, 'big');
59299 };
59300
59301 function SHA224() {
59302 if (!(this instanceof SHA224))
59303 return new SHA224();
59304
59305 SHA256.call(this);
59306 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
59307 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
59308 }
59309 utils.inherits(SHA224, SHA256);
59310 exports.sha224 = SHA224;
59311
59312 SHA224.blockSize = 512;
59313 SHA224.outSize = 224;
59314 SHA224.hmacStrength = 192;
59315 SHA224.padLength = 64;
59316
59317 SHA224.prototype._digest = function digest(enc) {
59318 // Just truncate output
59319 if (enc === 'hex')
59320 return utils.toHex32(this.h.slice(0, 7), 'big');
59321 else
59322 return utils.split32(this.h.slice(0, 7), 'big');
59323 };
59324
59325 function SHA512() {
59326 if (!(this instanceof SHA512))
59327 return new SHA512();
59328
59329 BlockHash.call(this);
59330 this.h = [ 0x6a09e667, 0xf3bcc908,
59331 0xbb67ae85, 0x84caa73b,
59332 0x3c6ef372, 0xfe94f82b,
59333 0xa54ff53a, 0x5f1d36f1,
59334 0x510e527f, 0xade682d1,
59335 0x9b05688c, 0x2b3e6c1f,
59336 0x1f83d9ab, 0xfb41bd6b,
59337 0x5be0cd19, 0x137e2179 ];
59338 this.k = sha512_K;
59339 this.W = new Array(160);
59340 }
59341 utils.inherits(SHA512, BlockHash);
59342 exports.sha512 = SHA512;
59343
59344 SHA512.blockSize = 1024;
59345 SHA512.outSize = 512;
59346 SHA512.hmacStrength = 192;
59347 SHA512.padLength = 128;
59348
59349 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
59350 var W = this.W;
59351
59352 // 32 x 32bit words
59353 for (var i = 0; i < 32; i++)
59354 W[i] = msg[start + i];
59355 for (; i < W.length; i += 2) {
59356 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
59357 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
59358 var c1_hi = W[i - 14]; // i - 7
59359 var c1_lo = W[i - 13];
59360 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
59361 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
59362 var c3_hi = W[i - 32]; // i - 16
59363 var c3_lo = W[i - 31];
59364
59365 W[i] = sum64_4_hi(c0_hi, c0_lo,
59366 c1_hi, c1_lo,
59367 c2_hi, c2_lo,
59368 c3_hi, c3_lo);
59369 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
59370 c1_hi, c1_lo,
59371 c2_hi, c2_lo,
59372 c3_hi, c3_lo);
59373 }
59374 };
59375
59376 SHA512.prototype._update = function _update(msg, start) {
59377 this._prepareBlock(msg, start);
59378
59379 var W = this.W;
59380
59381 var ah = this.h[0];
59382 var al = this.h[1];
59383 var bh = this.h[2];
59384 var bl = this.h[3];
59385 var ch = this.h[4];
59386 var cl = this.h[5];
59387 var dh = this.h[6];
59388 var dl = this.h[7];
59389 var eh = this.h[8];
59390 var el = this.h[9];
59391 var fh = this.h[10];
59392 var fl = this.h[11];
59393 var gh = this.h[12];
59394 var gl = this.h[13];
59395 var hh = this.h[14];
59396 var hl = this.h[15];
59397
59398 assert(this.k.length === W.length);
59399 for (var i = 0; i < W.length; i += 2) {
59400 var c0_hi = hh;
59401 var c0_lo = hl;
59402 var c1_hi = s1_512_hi(eh, el);
59403 var c1_lo = s1_512_lo(eh, el);
59404 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
59405 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
59406 var c3_hi = this.k[i];
59407 var c3_lo = this.k[i + 1];
59408 var c4_hi = W[i];
59409 var c4_lo = W[i + 1];
59410
59411 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
59412 c1_hi, c1_lo,
59413 c2_hi, c2_lo,
59414 c3_hi, c3_lo,
59415 c4_hi, c4_lo);
59416 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
59417 c1_hi, c1_lo,
59418 c2_hi, c2_lo,
59419 c3_hi, c3_lo,
59420 c4_hi, c4_lo);
59421
59422 var c0_hi = s0_512_hi(ah, al);
59423 var c0_lo = s0_512_lo(ah, al);
59424 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
59425 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
59426
59427 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
59428 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
59429
59430 hh = gh;
59431 hl = gl;
59432
59433 gh = fh;
59434 gl = fl;
59435
59436 fh = eh;
59437 fl = el;
59438
59439 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
59440 el = sum64_lo(dl, dl, T1_hi, T1_lo);
59441
59442 dh = ch;
59443 dl = cl;
59444
59445 ch = bh;
59446 cl = bl;
59447
59448 bh = ah;
59449 bl = al;
59450
59451 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
59452 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
59453 }
59454
59455 sum64(this.h, 0, ah, al);
59456 sum64(this.h, 2, bh, bl);
59457 sum64(this.h, 4, ch, cl);
59458 sum64(this.h, 6, dh, dl);
59459 sum64(this.h, 8, eh, el);
59460 sum64(this.h, 10, fh, fl);
59461 sum64(this.h, 12, gh, gl);
59462 sum64(this.h, 14, hh, hl);
59463 };
59464
59465 SHA512.prototype._digest = function digest(enc) {
59466 if (enc === 'hex')
59467 return utils.toHex32(this.h, 'big');
59468 else
59469 return utils.split32(this.h, 'big');
59470 };
59471
59472 function SHA384() {
59473 if (!(this instanceof SHA384))
59474 return new SHA384();
59475
59476 SHA512.call(this);
59477 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
59478 0x629a292a, 0x367cd507,
59479 0x9159015a, 0x3070dd17,
59480 0x152fecd8, 0xf70e5939,
59481 0x67332667, 0xffc00b31,
59482 0x8eb44a87, 0x68581511,
59483 0xdb0c2e0d, 0x64f98fa7,
59484 0x47b5481d, 0xbefa4fa4 ];
59485 }
59486 utils.inherits(SHA384, SHA512);
59487 exports.sha384 = SHA384;
59488
59489 SHA384.blockSize = 1024;
59490 SHA384.outSize = 384;
59491 SHA384.hmacStrength = 192;
59492 SHA384.padLength = 128;
59493
59494 SHA384.prototype._digest = function digest(enc) {
59495 if (enc === 'hex')
59496 return utils.toHex32(this.h.slice(0, 12), 'big');
59497 else
59498 return utils.split32(this.h.slice(0, 12), 'big');
59499 };
59500
59501 function SHA1() {
59502 if (!(this instanceof SHA1))
59503 return new SHA1();
59504
59505 BlockHash.call(this);
59506 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
59507 0x10325476, 0xc3d2e1f0 ];
59508 this.W = new Array(80);
59509 }
59510
59511 utils.inherits(SHA1, BlockHash);
59512 exports.sha1 = SHA1;
59513
59514 SHA1.blockSize = 512;
59515 SHA1.outSize = 160;
59516 SHA1.hmacStrength = 80;
59517 SHA1.padLength = 64;
59518
59519 SHA1.prototype._update = function _update(msg, start) {
59520 var W = this.W;
59521
59522 for (var i = 0; i < 16; i++)
59523 W[i] = msg[start + i];
59524
59525 for(; i < W.length; i++)
59526 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
59527
59528 var a = this.h[0];
59529 var b = this.h[1];
59530 var c = this.h[2];
59531 var d = this.h[3];
59532 var e = this.h[4];
59533
59534 for (var i = 0; i < W.length; i++) {
59535 var s = ~~(i / 20);
59536 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
59537 e = d;
59538 d = c;
59539 c = rotl32(b, 30);
59540 b = a;
59541 a = t;
59542 }
59543
59544 this.h[0] = sum32(this.h[0], a);
59545 this.h[1] = sum32(this.h[1], b);
59546 this.h[2] = sum32(this.h[2], c);
59547 this.h[3] = sum32(this.h[3], d);
59548 this.h[4] = sum32(this.h[4], e);
59549 };
59550
59551 SHA1.prototype._digest = function digest(enc) {
59552 if (enc === 'hex')
59553 return utils.toHex32(this.h, 'big');
59554 else
59555 return utils.split32(this.h, 'big');
59556 };
59557
59558 function ch32(x, y, z) {
59559 return (x & y) ^ ((~x) & z);
59560 }
59561
59562 function maj32(x, y, z) {
59563 return (x & y) ^ (x & z) ^ (y & z);
59564 }
59565
59566 function p32(x, y, z) {
59567 return x ^ y ^ z;
59568 }
59569
59570 function s0_256(x) {
59571 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
59572 }
59573
59574 function s1_256(x) {
59575 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
59576 }
59577
59578 function g0_256(x) {
59579 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
59580 }
59581
59582 function g1_256(x) {
59583 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
59584 }
59585
59586 function ft_1(s, x, y, z) {
59587 if (s === 0)
59588 return ch32(x, y, z);
59589 if (s === 1 || s === 3)
59590 return p32(x, y, z);
59591 if (s === 2)
59592 return maj32(x, y, z);
59593 }
59594
59595 function ch64_hi(xh, xl, yh, yl, zh, zl) {
59596 var r = (xh & yh) ^ ((~xh) & zh);
59597 if (r < 0)
59598 r += 0x100000000;
59599 return r;
59600 }
59601
59602 function ch64_lo(xh, xl, yh, yl, zh, zl) {
59603 var r = (xl & yl) ^ ((~xl) & zl);
59604 if (r < 0)
59605 r += 0x100000000;
59606 return r;
59607 }
59608
59609 function maj64_hi(xh, xl, yh, yl, zh, zl) {
59610 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
59611 if (r < 0)
59612 r += 0x100000000;
59613 return r;
59614 }
59615
59616 function maj64_lo(xh, xl, yh, yl, zh, zl) {
59617 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
59618 if (r < 0)
59619 r += 0x100000000;
59620 return r;
59621 }
59622
59623 function s0_512_hi(xh, xl) {
59624 var c0_hi = rotr64_hi(xh, xl, 28);
59625 var c1_hi = rotr64_hi(xl, xh, 2); // 34
59626 var c2_hi = rotr64_hi(xl, xh, 7); // 39
59627
59628 var r = c0_hi ^ c1_hi ^ c2_hi;
59629 if (r < 0)
59630 r += 0x100000000;
59631 return r;
59632 }
59633
59634 function s0_512_lo(xh, xl) {
59635 var c0_lo = rotr64_lo(xh, xl, 28);
59636 var c1_lo = rotr64_lo(xl, xh, 2); // 34
59637 var c2_lo = rotr64_lo(xl, xh, 7); // 39
59638
59639 var r = c0_lo ^ c1_lo ^ c2_lo;
59640 if (r < 0)
59641 r += 0x100000000;
59642 return r;
59643 }
59644
59645 function s1_512_hi(xh, xl) {
59646 var c0_hi = rotr64_hi(xh, xl, 14);
59647 var c1_hi = rotr64_hi(xh, xl, 18);
59648 var c2_hi = rotr64_hi(xl, xh, 9); // 41
59649
59650 var r = c0_hi ^ c1_hi ^ c2_hi;
59651 if (r < 0)
59652 r += 0x100000000;
59653 return r;
59654 }
59655
59656 function s1_512_lo(xh, xl) {
59657 var c0_lo = rotr64_lo(xh, xl, 14);
59658 var c1_lo = rotr64_lo(xh, xl, 18);
59659 var c2_lo = rotr64_lo(xl, xh, 9); // 41
59660
59661 var r = c0_lo ^ c1_lo ^ c2_lo;
59662 if (r < 0)
59663 r += 0x100000000;
59664 return r;
59665 }
59666
59667 function g0_512_hi(xh, xl) {
59668 var c0_hi = rotr64_hi(xh, xl, 1);
59669 var c1_hi = rotr64_hi(xh, xl, 8);
59670 var c2_hi = shr64_hi(xh, xl, 7);
59671
59672 var r = c0_hi ^ c1_hi ^ c2_hi;
59673 if (r < 0)
59674 r += 0x100000000;
59675 return r;
59676 }
59677
59678 function g0_512_lo(xh, xl) {
59679 var c0_lo = rotr64_lo(xh, xl, 1);
59680 var c1_lo = rotr64_lo(xh, xl, 8);
59681 var c2_lo = shr64_lo(xh, xl, 7);
59682
59683 var r = c0_lo ^ c1_lo ^ c2_lo;
59684 if (r < 0)
59685 r += 0x100000000;
59686 return r;
59687 }
59688
59689 function g1_512_hi(xh, xl) {
59690 var c0_hi = rotr64_hi(xh, xl, 19);
59691 var c1_hi = rotr64_hi(xl, xh, 29); // 61
59692 var c2_hi = shr64_hi(xh, xl, 6);
59693
59694 var r = c0_hi ^ c1_hi ^ c2_hi;
59695 if (r < 0)
59696 r += 0x100000000;
59697 return r;
59698 }
59699
59700 function g1_512_lo(xh, xl) {
59701 var c0_lo = rotr64_lo(xh, xl, 19);
59702 var c1_lo = rotr64_lo(xl, xh, 29); // 61
59703 var c2_lo = shr64_lo(xh, xl, 6);
59704
59705 var r = c0_lo ^ c1_lo ^ c2_lo;
59706 if (r < 0)
59707 r += 0x100000000;
59708 return r;
59709 }
59710
59711 },{"../hash":86}],91:[function(require,module,exports){
59712 var utils = exports;
59713 var inherits = require('inherits');
59714
59715 function toArray(msg, enc) {
59716 if (Array.isArray(msg))
59717 return msg.slice();
59718 if (!msg)
59719 return [];
59720 var res = [];
59721 if (typeof msg === 'string') {
59722 if (!enc) {
59723 for (var i = 0; i < msg.length; i++) {
59724 var c = msg.charCodeAt(i);
59725 var hi = c >> 8;
59726 var lo = c & 0xff;
59727 if (hi)
59728 res.push(hi, lo);
59729 else
59730 res.push(lo);
59731 }
59732 } else if (enc === 'hex') {
59733 msg = msg.replace(/[^a-z0-9]+/ig, '');
59734 if (msg.length % 2 !== 0)
59735 msg = '0' + msg;
59736 for (var i = 0; i < msg.length; i += 2)
59737 res.push(parseInt(msg[i] + msg[i + 1], 16));
59738 }
59739 } else {
59740 for (var i = 0; i < msg.length; i++)
59741 res[i] = msg[i] | 0;
59742 }
59743 return res;
59744 }
59745 utils.toArray = toArray;
59746
59747 function toHex(msg) {
59748 var res = '';
59749 for (var i = 0; i < msg.length; i++)
59750 res += zero2(msg[i].toString(16));
59751 return res;
59752 }
59753 utils.toHex = toHex;
59754
59755 function htonl(w) {
59756 var res = (w >>> 24) |
59757 ((w >>> 8) & 0xff00) |
59758 ((w << 8) & 0xff0000) |
59759 ((w & 0xff) << 24);
59760 return res >>> 0;
59761 }
59762 utils.htonl = htonl;
59763
59764 function toHex32(msg, endian) {
59765 var res = '';
59766 for (var i = 0; i < msg.length; i++) {
59767 var w = msg[i];
59768 if (endian === 'little')
59769 w = htonl(w);
59770 res += zero8(w.toString(16));
59771 }
59772 return res;
59773 }
59774 utils.toHex32 = toHex32;
59775
59776 function zero2(word) {
59777 if (word.length === 1)
59778 return '0' + word;
59779 else
59780 return word;
59781 }
59782 utils.zero2 = zero2;
59783
59784 function zero8(word) {
59785 if (word.length === 7)
59786 return '0' + word;
59787 else if (word.length === 6)
59788 return '00' + word;
59789 else if (word.length === 5)
59790 return '000' + word;
59791 else if (word.length === 4)
59792 return '0000' + word;
59793 else if (word.length === 3)
59794 return '00000' + word;
59795 else if (word.length === 2)
59796 return '000000' + word;
59797 else if (word.length === 1)
59798 return '0000000' + word;
59799 else
59800 return word;
59801 }
59802 utils.zero8 = zero8;
59803
59804 function join32(msg, start, end, endian) {
59805 var len = end - start;
59806 assert(len % 4 === 0);
59807 var res = new Array(len / 4);
59808 for (var i = 0, k = start; i < res.length; i++, k += 4) {
59809 var w;
59810 if (endian === 'big')
59811 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
59812 else
59813 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
59814 res[i] = w >>> 0;
59815 }
59816 return res;
59817 }
59818 utils.join32 = join32;
59819
59820 function split32(msg, endian) {
59821 var res = new Array(msg.length * 4);
59822 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
59823 var m = msg[i];
59824 if (endian === 'big') {
59825 res[k] = m >>> 24;
59826 res[k + 1] = (m >>> 16) & 0xff;
59827 res[k + 2] = (m >>> 8) & 0xff;
59828 res[k + 3] = m & 0xff;
59829 } else {
59830 res[k + 3] = m >>> 24;
59831 res[k + 2] = (m >>> 16) & 0xff;
59832 res[k + 1] = (m >>> 8) & 0xff;
59833 res[k] = m & 0xff;
59834 }
59835 }
59836 return res;
59837 }
59838 utils.split32 = split32;
59839
59840 function rotr32(w, b) {
59841 return (w >>> b) | (w << (32 - b));
59842 }
59843 utils.rotr32 = rotr32;
59844
59845 function rotl32(w, b) {
59846 return (w << b) | (w >>> (32 - b));
59847 }
59848 utils.rotl32 = rotl32;
59849
59850 function sum32(a, b) {
59851 return (a + b) >>> 0;
59852 }
59853 utils.sum32 = sum32;
59854
59855 function sum32_3(a, b, c) {
59856 return (a + b + c) >>> 0;
59857 }
59858 utils.sum32_3 = sum32_3;
59859
59860 function sum32_4(a, b, c, d) {
59861 return (a + b + c + d) >>> 0;
59862 }
59863 utils.sum32_4 = sum32_4;
59864
59865 function sum32_5(a, b, c, d, e) {
59866 return (a + b + c + d + e) >>> 0;
59867 }
59868 utils.sum32_5 = sum32_5;
59869
59870 function assert(cond, msg) {
59871 if (!cond)
59872 throw new Error(msg || 'Assertion failed');
59873 }
59874 utils.assert = assert;
59875
59876 utils.inherits = inherits;
59877
59878 function sum64(buf, pos, ah, al) {
59879 var bh = buf[pos];
59880 var bl = buf[pos + 1];
59881
59882 var lo = (al + bl) >>> 0;
59883 var hi = (lo < al ? 1 : 0) + ah + bh;
59884 buf[pos] = hi >>> 0;
59885 buf[pos + 1] = lo;
59886 }
59887 exports.sum64 = sum64;
59888
59889 function sum64_hi(ah, al, bh, bl) {
59890 var lo = (al + bl) >>> 0;
59891 var hi = (lo < al ? 1 : 0) + ah + bh;
59892 return hi >>> 0;
59893 };
59894 exports.sum64_hi = sum64_hi;
59895
59896 function sum64_lo(ah, al, bh, bl) {
59897 var lo = al + bl;
59898 return lo >>> 0;
59899 };
59900 exports.sum64_lo = sum64_lo;
59901
59902 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
59903 var carry = 0;
59904 var lo = al;
59905 lo = (lo + bl) >>> 0;
59906 carry += lo < al ? 1 : 0;
59907 lo = (lo + cl) >>> 0;
59908 carry += lo < cl ? 1 : 0;
59909 lo = (lo + dl) >>> 0;
59910 carry += lo < dl ? 1 : 0;
59911
59912 var hi = ah + bh + ch + dh + carry;
59913 return hi >>> 0;
59914 };
59915 exports.sum64_4_hi = sum64_4_hi;
59916
59917 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
59918 var lo = al + bl + cl + dl;
59919 return lo >>> 0;
59920 };
59921 exports.sum64_4_lo = sum64_4_lo;
59922
59923 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
59924 var carry = 0;
59925 var lo = al;
59926 lo = (lo + bl) >>> 0;
59927 carry += lo < al ? 1 : 0;
59928 lo = (lo + cl) >>> 0;
59929 carry += lo < cl ? 1 : 0;
59930 lo = (lo + dl) >>> 0;
59931 carry += lo < dl ? 1 : 0;
59932 lo = (lo + el) >>> 0;
59933 carry += lo < el ? 1 : 0;
59934
59935 var hi = ah + bh + ch + dh + eh + carry;
59936 return hi >>> 0;
59937 };
59938 exports.sum64_5_hi = sum64_5_hi;
59939
59940 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
59941 var lo = al + bl + cl + dl + el;
59942
59943 return lo >>> 0;
59944 };
59945 exports.sum64_5_lo = sum64_5_lo;
59946
59947 function rotr64_hi(ah, al, num) {
59948 var r = (al << (32 - num)) | (ah >>> num);
59949 return r >>> 0;
59950 };
59951 exports.rotr64_hi = rotr64_hi;
59952
59953 function rotr64_lo(ah, al, num) {
59954 var r = (ah << (32 - num)) | (al >>> num);
59955 return r >>> 0;
59956 };
59957 exports.rotr64_lo = rotr64_lo;
59958
59959 function shr64_hi(ah, al, num) {
59960 return ah >>> num;
59961 };
59962 exports.shr64_hi = shr64_hi;
59963
59964 function shr64_lo(ah, al, num) {
59965 var r = (ah << (32 - num)) | (al >>> num);
59966 return r >>> 0;
59967 };
59968 exports.shr64_lo = shr64_lo;
59969
59970 },{"inherits":95}],92:[function(require,module,exports){
59971 'use strict';
59972
59973 var hash = require('hash.js');
59974 var utils = require('minimalistic-crypto-utils');
59975 var assert = require('minimalistic-assert');
59976
59977 function HmacDRBG(options) {
59978 if (!(this instanceof HmacDRBG))
59979 return new HmacDRBG(options);
59980 this.hash = options.hash;
59981 this.predResist = !!options.predResist;
59982
59983 this.outLen = this.hash.outSize;
59984 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
59985
59986 this._reseed = null;
59987 this.reseedInterval = null;
59988 this.K = null;
59989 this.V = null;
59990
59991 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
59992 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
59993 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
59994 assert(entropy.length >= (this.minEntropy / 8),
59995 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
59996 this._init(entropy, nonce, pers);
59997 }
59998 module.exports = HmacDRBG;
59999
60000 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
60001 var seed = entropy.concat(nonce).concat(pers);
60002
60003 this.K = new Array(this.outLen / 8);
60004 this.V = new Array(this.outLen / 8);
60005 for (var i = 0; i < this.V.length; i++) {
60006 this.K[i] = 0x00;
60007 this.V[i] = 0x01;
60008 }
60009
60010 this._update(seed);
60011 this._reseed = 1;
60012 this.reseedInterval = 0x1000000000000; // 2^48
60013 };
60014
60015 HmacDRBG.prototype._hmac = function hmac() {
60016 return new hash.hmac(this.hash, this.K);
60017 };
60018
60019 HmacDRBG.prototype._update = function update(seed) {
60020 var kmac = this._hmac()
60021 .update(this.V)
60022 .update([ 0x00 ]);
60023 if (seed)
60024 kmac = kmac.update(seed);
60025 this.K = kmac.digest();
60026 this.V = this._hmac().update(this.V).digest();
60027 if (!seed)
60028 return;
60029
60030 this.K = this._hmac()
60031 .update(this.V)
60032 .update([ 0x01 ])
60033 .update(seed)
60034 .digest();
60035 this.V = this._hmac().update(this.V).digest();
60036 };
60037
60038 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
60039 // Optional entropy enc
60040 if (typeof entropyEnc !== 'string') {
60041 addEnc = add;
60042 add = entropyEnc;
60043 entropyEnc = null;
60044 }
60045
60046 entropy = utils.toArray(entropy, entropyEnc);
60047 add = utils.toArray(add, addEnc);
60048
60049 assert(entropy.length >= (this.minEntropy / 8),
60050 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
60051
60052 this._update(entropy.concat(add || []));
60053 this._reseed = 1;
60054 };
60055
60056 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
60057 if (this._reseed > this.reseedInterval)
60058 throw new Error('Reseed is required');
60059
60060 // Optional encoding
60061 if (typeof enc !== 'string') {
60062 addEnc = add;
60063 add = enc;
60064 enc = null;
60065 }
60066
60067 // Optional additional data
60068 if (add) {
60069 add = utils.toArray(add, addEnc || 'hex');
60070 this._update(add);
60071 }
60072
60073 var temp = [];
60074 while (temp.length < len) {
60075 this.V = this._hmac().update(this.V).digest();
60076 temp = temp.concat(this.V);
60077 }
60078
60079 var res = temp.slice(0, len);
60080 this._update(add);
60081 this._reseed++;
60082 return utils.encode(res, enc);
60083 };
60084
60085 },{"hash.js":86,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],93:[function(require,module,exports){
60086 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
60087 var e, m
60088 var eLen = nBytes * 8 - mLen - 1
60089 var eMax = (1 << eLen) - 1
60090 var eBias = eMax >> 1
60091 var nBits = -7
60092 var i = isLE ? (nBytes - 1) : 0
60093 var d = isLE ? -1 : 1
60094 var s = buffer[offset + i]
60095
60096 i += d
60097
60098 e = s & ((1 << (-nBits)) - 1)
60099 s >>= (-nBits)
60100 nBits += eLen
60101 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
60102
60103 m = e & ((1 << (-nBits)) - 1)
60104 e >>= (-nBits)
60105 nBits += mLen
60106 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
60107
60108 if (e === 0) {
60109 e = 1 - eBias
60110 } else if (e === eMax) {
60111 return m ? NaN : ((s ? -1 : 1) * Infinity)
60112 } else {
60113 m = m + Math.pow(2, mLen)
60114 e = e - eBias
60115 }
60116 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
60117 }
60118
60119 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
60120 var e, m, c
60121 var eLen = nBytes * 8 - mLen - 1
60122 var eMax = (1 << eLen) - 1
60123 var eBias = eMax >> 1
60124 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
60125 var i = isLE ? 0 : (nBytes - 1)
60126 var d = isLE ? 1 : -1
60127 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
60128
60129 value = Math.abs(value)
60130
60131 if (isNaN(value) || value === Infinity) {
60132 m = isNaN(value) ? 1 : 0
60133 e = eMax
60134 } else {
60135 e = Math.floor(Math.log(value) / Math.LN2)
60136 if (value * (c = Math.pow(2, -e)) < 1) {
60137 e--
60138 c *= 2
60139 }
60140 if (e + eBias >= 1) {
60141 value += rt / c
60142 } else {
60143 value += rt * Math.pow(2, 1 - eBias)
60144 }
60145 if (value * c >= 2) {
60146 e++
60147 c /= 2
60148 }
60149
60150 if (e + eBias >= eMax) {
60151 m = 0
60152 e = eMax
60153 } else if (e + eBias >= 1) {
60154 m = (value * c - 1) * Math.pow(2, mLen)
60155 e = e + eBias
60156 } else {
60157 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
60158 e = 0
60159 }
60160 }
60161
60162 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
60163
60164 e = (e << mLen) | m
60165 eLen += mLen
60166 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
60167
60168 buffer[offset + i - d] |= s * 128
60169 }
60170
60171 },{}],94:[function(require,module,exports){
60172
60173 var indexOf = [].indexOf;
60174
60175 module.exports = function(arr, obj){
60176 if (indexOf) return arr.indexOf(obj);
60177 for (var i = 0; i < arr.length; ++i) {
60178 if (arr[i] === obj) return i;
60179 }
60180 return -1;
60181 };
60182 },{}],95:[function(require,module,exports){
60183 if (typeof Object.create === 'function') {
60184 // implementation from standard node.js 'util' module
60185 module.exports = function inherits(ctor, superCtor) {
60186 ctor.super_ = superCtor
60187 ctor.prototype = Object.create(superCtor.prototype, {
60188 constructor: {
60189 value: ctor,
60190 enumerable: false,
60191 writable: true,
60192 configurable: true
60193 }
60194 });
60195 };
60196 } else {
60197 // old school shim for old browsers
60198 module.exports = function inherits(ctor, superCtor) {
60199 ctor.super_ = superCtor
60200 var TempCtor = function () {}
60201 TempCtor.prototype = superCtor.prototype
60202 ctor.prototype = new TempCtor()
60203 ctor.prototype.constructor = ctor
60204 }
60205 }
60206
60207 },{}],96:[function(require,module,exports){
60208 /*!
60209 * Determine if an object is a Buffer
60210 *
60211 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
60212 * @license MIT
60213 */
60214
60215 // The _isBuffer check is for Safari 5-7 support, because it's missing
60216 // Object.prototype.constructor. Remove this eventually
60217 module.exports = function (obj) {
60218 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
60219 }
60220
60221 function isBuffer (obj) {
60222 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
60223 }
60224
60225 // For Node v0.10 support. Remove this eventually.
60226 function isSlowBuffer (obj) {
60227 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
60228 }
60229
60230 },{}],97:[function(require,module,exports){
60231 var toString = {}.toString;
60232
60233 module.exports = Array.isArray || function (arr) {
60234 return toString.call(arr) == '[object Array]';
60235 };
60236
60237 },{}],98:[function(require,module,exports){
60238 var bn = require('bn.js');
60239 var brorand = require('brorand');
60240
60241 function MillerRabin(rand) {
60242 this.rand = rand || new brorand.Rand();
60243 }
60244 module.exports = MillerRabin;
60245
60246 MillerRabin.create = function create(rand) {
60247 return new MillerRabin(rand);
60248 };
60249
60250 MillerRabin.prototype._rand = function _rand(n) {
60251 var len = n.bitLength();
60252 var buf = this.rand.generate(Math.ceil(len / 8));
60253
60254 // Set low bits
60255 buf[0] |= 3;
60256
60257 // Mask high bits
60258 var mask = len & 0x7;
60259 if (mask !== 0)
60260 buf[buf.length - 1] >>= 7 - mask;
60261
60262 return new bn(buf);
60263 }
60264
60265 MillerRabin.prototype.test = function test(n, k, cb) {
60266 var len = n.bitLength();
60267 var red = bn.mont(n);
60268 var rone = new bn(1).toRed(red);
60269
60270 if (!k)
60271 k = Math.max(1, (len / 48) | 0);
60272
60273 // Find d and s, (n - 1) = (2 ^ s) * d;
60274 var n1 = n.subn(1);
60275 var n2 = n1.subn(1);
60276 for (var s = 0; !n1.testn(s); s++) {}
60277 var d = n.shrn(s);
60278
60279 var rn1 = n1.toRed(red);
60280
60281 var prime = true;
60282 for (; k > 0; k--) {
60283 var a = this._rand(n2);
60284 if (cb)
60285 cb(a);
60286
60287 var x = a.toRed(red).redPow(d);
60288 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
60289 continue;
60290
60291 for (var i = 1; i < s; i++) {
60292 x = x.redSqr();
60293
60294 if (x.cmp(rone) === 0)
60295 return false;
60296 if (x.cmp(rn1) === 0)
60297 break;
60298 }
60299
60300 if (i === s)
60301 return false;
60302 }
60303
60304 return prime;
60305 };
60306
60307 MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
60308 var len = n.bitLength();
60309 var red = bn.mont(n);
60310 var rone = new bn(1).toRed(red);
60311
60312 if (!k)
60313 k = Math.max(1, (len / 48) | 0);
60314
60315 // Find d and s, (n - 1) = (2 ^ s) * d;
60316 var n1 = n.subn(1);
60317 var n2 = n1.subn(1);
60318 for (var s = 0; !n1.testn(s); s++) {}
60319 var d = n.shrn(s);
60320
60321 var rn1 = n1.toRed(red);
60322
60323 for (; k > 0; k--) {
60324 var a = this._rand(n2);
60325
60326 var g = n.gcd(a);
60327 if (g.cmpn(1) !== 0)
60328 return g;
60329
60330 var x = a.toRed(red).redPow(d);
60331 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
60332 continue;
60333
60334 for (var i = 1; i < s; i++) {
60335 x = x.redSqr();
60336
60337 if (x.cmp(rone) === 0)
60338 return x.fromRed().subn(1).gcd(n);
60339 if (x.cmp(rn1) === 0)
60340 break;
60341 }
60342
60343 if (i === s) {
60344 x = x.redSqr();
60345 return x.fromRed().subn(1).gcd(n);
60346 }
60347 }
60348
60349 return false;
60350 };
60351
60352 },{"bn.js":17,"brorand":18}],99:[function(require,module,exports){
60353 module.exports = assert;
60354
60355 function assert(val, msg) {
60356 if (!val)
60357 throw new Error(msg || 'Assertion failed');
60358 }
60359
60360 assert.equal = function assertEqual(l, r, msg) {
60361 if (l != r)
60362 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
60363 };
60364
60365 },{}],100:[function(require,module,exports){
60366 'use strict';
60367
60368 var utils = exports;
60369
60370 function toArray(msg, enc) {
60371 if (Array.isArray(msg))
60372 return msg.slice();
60373 if (!msg)
60374 return [];
60375 var res = [];
60376 if (typeof msg !== 'string') {
60377 for (var i = 0; i < msg.length; i++)
60378 res[i] = msg[i] | 0;
60379 return res;
60380 }
60381 if (enc === 'hex') {
60382 msg = msg.replace(/[^a-z0-9]+/ig, '');
60383 if (msg.length % 2 !== 0)
60384 msg = '0' + msg;
60385 for (var i = 0; i < msg.length; i += 2)
60386 res.push(parseInt(msg[i] + msg[i + 1], 16));
60387 } else {
60388 for (var i = 0; i < msg.length; i++) {
60389 var c = msg.charCodeAt(i);
60390 var hi = c >> 8;
60391 var lo = c & 0xff;
60392 if (hi)
60393 res.push(hi, lo);
60394 else
60395 res.push(lo);
60396 }
60397 }
60398 return res;
60399 }
60400 utils.toArray = toArray;
60401
60402 function zero2(word) {
60403 if (word.length === 1)
60404 return '0' + word;
60405 else
60406 return word;
60407 }
60408 utils.zero2 = zero2;
60409
60410 function toHex(msg) {
60411 var res = '';
60412 for (var i = 0; i < msg.length; i++)
60413 res += zero2(msg[i].toString(16));
60414 return res;
60415 }
60416 utils.toHex = toHex;
60417
60418 utils.encode = function encode(arr, enc) {
60419 if (enc === 'hex')
60420 return toHex(arr);
60421 else
60422 return arr;
60423 };
60424
60425 },{}],101:[function(require,module,exports){
60426 module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
60427 "2.16.840.1.101.3.4.1.2": "aes-128-cbc",
60428 "2.16.840.1.101.3.4.1.3": "aes-128-ofb",
60429 "2.16.840.1.101.3.4.1.4": "aes-128-cfb",
60430 "2.16.840.1.101.3.4.1.21": "aes-192-ecb",
60431 "2.16.840.1.101.3.4.1.22": "aes-192-cbc",
60432 "2.16.840.1.101.3.4.1.23": "aes-192-ofb",
60433 "2.16.840.1.101.3.4.1.24": "aes-192-cfb",
60434 "2.16.840.1.101.3.4.1.41": "aes-256-ecb",
60435 "2.16.840.1.101.3.4.1.42": "aes-256-cbc",
60436 "2.16.840.1.101.3.4.1.43": "aes-256-ofb",
60437 "2.16.840.1.101.3.4.1.44": "aes-256-cfb"
60438 }
60439 },{}],102:[function(require,module,exports){
60440 // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
60441 // Fedor, you are amazing.
60442 'use strict'
60443
60444 var asn1 = require('asn1.js')
60445
60446 exports.certificate = require('./certificate')
60447
60448 var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
60449 this.seq().obj(
60450 this.key('version').int(),
60451 this.key('modulus').int(),
60452 this.key('publicExponent').int(),
60453 this.key('privateExponent').int(),
60454 this.key('prime1').int(),
60455 this.key('prime2').int(),
60456 this.key('exponent1').int(),
60457 this.key('exponent2').int(),
60458 this.key('coefficient').int()
60459 )
60460 })
60461 exports.RSAPrivateKey = RSAPrivateKey
60462
60463 var RSAPublicKey = asn1.define('RSAPublicKey', function () {
60464 this.seq().obj(
60465 this.key('modulus').int(),
60466 this.key('publicExponent').int()
60467 )
60468 })
60469 exports.RSAPublicKey = RSAPublicKey
60470
60471 var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
60472 this.seq().obj(
60473 this.key('algorithm').use(AlgorithmIdentifier),
60474 this.key('subjectPublicKey').bitstr()
60475 )
60476 })
60477 exports.PublicKey = PublicKey
60478
60479 var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
60480 this.seq().obj(
60481 this.key('algorithm').objid(),
60482 this.key('none').null_().optional(),
60483 this.key('curve').objid().optional(),
60484 this.key('params').seq().obj(
60485 this.key('p').int(),
60486 this.key('q').int(),
60487 this.key('g').int()
60488 ).optional()
60489 )
60490 })
60491
60492 var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
60493 this.seq().obj(
60494 this.key('version').int(),
60495 this.key('algorithm').use(AlgorithmIdentifier),
60496 this.key('subjectPrivateKey').octstr()
60497 )
60498 })
60499 exports.PrivateKey = PrivateKeyInfo
60500 var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
60501 this.seq().obj(
60502 this.key('algorithm').seq().obj(
60503 this.key('id').objid(),
60504 this.key('decrypt').seq().obj(
60505 this.key('kde').seq().obj(
60506 this.key('id').objid(),
60507 this.key('kdeparams').seq().obj(
60508 this.key('salt').octstr(),
60509 this.key('iters').int()
60510 )
60511 ),
60512 this.key('cipher').seq().obj(
60513 this.key('algo').objid(),
60514 this.key('iv').octstr()
60515 )
60516 )
60517 ),
60518 this.key('subjectPrivateKey').octstr()
60519 )
60520 })
60521
60522 exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo
60523
60524 var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
60525 this.seq().obj(
60526 this.key('version').int(),
60527 this.key('p').int(),
60528 this.key('q').int(),
60529 this.key('g').int(),
60530 this.key('pub_key').int(),
60531 this.key('priv_key').int()
60532 )
60533 })
60534 exports.DSAPrivateKey = DSAPrivateKey
60535
60536 exports.DSAparam = asn1.define('DSAparam', function () {
60537 this.int()
60538 })
60539
60540 var ECPrivateKey = asn1.define('ECPrivateKey', function () {
60541 this.seq().obj(
60542 this.key('version').int(),
60543 this.key('privateKey').octstr(),
60544 this.key('parameters').optional().explicit(0).use(ECParameters),
60545 this.key('publicKey').optional().explicit(1).bitstr()
60546 )
60547 })
60548 exports.ECPrivateKey = ECPrivateKey
60549
60550 var ECParameters = asn1.define('ECParameters', function () {
60551 this.choice({
60552 namedCurve: this.objid()
60553 })
60554 })
60555
60556 exports.signature = asn1.define('signature', function () {
60557 this.seq().obj(
60558 this.key('r').int(),
60559 this.key('s').int()
60560 )
60561 })
60562
60563 },{"./certificate":103,"asn1.js":1}],103:[function(require,module,exports){
60564 // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
60565 // thanks to @Rantanen
60566
60567 'use strict'
60568
60569 var asn = require('asn1.js')
60570
60571 var Time = asn.define('Time', function () {
60572 this.choice({
60573 utcTime: this.utctime(),
60574 generalTime: this.gentime()
60575 })
60576 })
60577
60578 var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
60579 this.seq().obj(
60580 this.key('type').objid(),
60581 this.key('value').any()
60582 )
60583 })
60584
60585 var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
60586 this.seq().obj(
60587 this.key('algorithm').objid(),
60588 this.key('parameters').optional()
60589 )
60590 })
60591
60592 var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
60593 this.seq().obj(
60594 this.key('algorithm').use(AlgorithmIdentifier),
60595 this.key('subjectPublicKey').bitstr()
60596 )
60597 })
60598
60599 var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
60600 this.setof(AttributeTypeValue)
60601 })
60602
60603 var RDNSequence = asn.define('RDNSequence', function () {
60604 this.seqof(RelativeDistinguishedName)
60605 })
60606
60607 var Name = asn.define('Name', function () {
60608 this.choice({
60609 rdnSequence: this.use(RDNSequence)
60610 })
60611 })
60612
60613 var Validity = asn.define('Validity', function () {
60614 this.seq().obj(
60615 this.key('notBefore').use(Time),
60616 this.key('notAfter').use(Time)
60617 )
60618 })
60619
60620 var Extension = asn.define('Extension', function () {
60621 this.seq().obj(
60622 this.key('extnID').objid(),
60623 this.key('critical').bool().def(false),
60624 this.key('extnValue').octstr()
60625 )
60626 })
60627
60628 var TBSCertificate = asn.define('TBSCertificate', function () {
60629 this.seq().obj(
60630 this.key('version').explicit(0).int(),
60631 this.key('serialNumber').int(),
60632 this.key('signature').use(AlgorithmIdentifier),
60633 this.key('issuer').use(Name),
60634 this.key('validity').use(Validity),
60635 this.key('subject').use(Name),
60636 this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
60637 this.key('issuerUniqueID').implicit(1).bitstr().optional(),
60638 this.key('subjectUniqueID').implicit(2).bitstr().optional(),
60639 this.key('extensions').explicit(3).seqof(Extension).optional()
60640 )
60641 })
60642
60643 var X509Certificate = asn.define('X509Certificate', function () {
60644 this.seq().obj(
60645 this.key('tbsCertificate').use(TBSCertificate),
60646 this.key('signatureAlgorithm').use(AlgorithmIdentifier),
60647 this.key('signatureValue').bitstr()
60648 )
60649 })
60650
60651 module.exports = X509Certificate
60652
60653 },{"asn1.js":1}],104:[function(require,module,exports){
60654 (function (Buffer){
60655 // adapted from https://github.com/apatil/pemstrip
60656 var findProc = /Proc-Type: 4,ENCRYPTED\n\r?DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\n\r?\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?/m
60657 var startRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n/m
60658 var fullRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?-----END \1-----$/m
60659 var evp = require('evp_bytestokey')
60660 var ciphers = require('browserify-aes')
60661 module.exports = function (okey, password) {
60662 var key = okey.toString()
60663 var match = key.match(findProc)
60664 var decrypted
60665 if (!match) {
60666 var match2 = key.match(fullRegex)
60667 decrypted = new Buffer(match2[2].replace(/\r?\n/g, ''), 'base64')
60668 } else {
60669 var suite = 'aes' + match[1]
60670 var iv = new Buffer(match[2], 'hex')
60671 var cipherText = new Buffer(match[3].replace(/\r?\n/g, ''), 'base64')
60672 var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
60673 var out = []
60674 var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
60675 out.push(cipher.update(cipherText))
60676 out.push(cipher.final())
60677 decrypted = Buffer.concat(out)
60678 }
60679 var tag = key.match(startRegex)[1]
60680 return {
60681 tag: tag,
60682 data: decrypted
60683 }
60684 }
60685
60686 }).call(this,require("buffer").Buffer)
60687 },{"browserify-aes":22,"buffer":47,"evp_bytestokey":84}],105:[function(require,module,exports){
60688 (function (Buffer){
60689 var asn1 = require('./asn1')
60690 var aesid = require('./aesid.json')
60691 var fixProc = require('./fixProc')
60692 var ciphers = require('browserify-aes')
60693 var compat = require('pbkdf2')
60694 module.exports = parseKeys
60695
60696 function parseKeys (buffer) {
60697 var password
60698 if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
60699 password = buffer.passphrase
60700 buffer = buffer.key
60701 }
60702 if (typeof buffer === 'string') {
60703 buffer = new Buffer(buffer)
60704 }
60705
60706 var stripped = fixProc(buffer, password)
60707
60708 var type = stripped.tag
60709 var data = stripped.data
60710 var subtype, ndata
60711 switch (type) {
60712 case 'CERTIFICATE':
60713 ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
60714 // falls through
60715 case 'PUBLIC KEY':
60716 if (!ndata) {
60717 ndata = asn1.PublicKey.decode(data, 'der')
60718 }
60719 subtype = ndata.algorithm.algorithm.join('.')
60720 switch (subtype) {
60721 case '1.2.840.113549.1.1.1':
60722 return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
60723 case '1.2.840.10045.2.1':
60724 ndata.subjectPrivateKey = ndata.subjectPublicKey
60725 return {
60726 type: 'ec',
60727 data: ndata
60728 }
60729 case '1.2.840.10040.4.1':
60730 ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
60731 return {
60732 type: 'dsa',
60733 data: ndata.algorithm.params
60734 }
60735 default: throw new Error('unknown key id ' + subtype)
60736 }
60737 throw new Error('unknown key type ' + type)
60738 case 'ENCRYPTED PRIVATE KEY':
60739 data = asn1.EncryptedPrivateKey.decode(data, 'der')
60740 data = decrypt(data, password)
60741 // falls through
60742 case 'PRIVATE KEY':
60743 ndata = asn1.PrivateKey.decode(data, 'der')
60744 subtype = ndata.algorithm.algorithm.join('.')
60745 switch (subtype) {
60746 case '1.2.840.113549.1.1.1':
60747 return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
60748 case '1.2.840.10045.2.1':
60749 return {
60750 curve: ndata.algorithm.curve,
60751 privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
60752 }
60753 case '1.2.840.10040.4.1':
60754 ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
60755 return {
60756 type: 'dsa',
60757 params: ndata.algorithm.params
60758 }
60759 default: throw new Error('unknown key id ' + subtype)
60760 }
60761 throw new Error('unknown key type ' + type)
60762 case 'RSA PUBLIC KEY':
60763 return asn1.RSAPublicKey.decode(data, 'der')
60764 case 'RSA PRIVATE KEY':
60765 return asn1.RSAPrivateKey.decode(data, 'der')
60766 case 'DSA PRIVATE KEY':
60767 return {
60768 type: 'dsa',
60769 params: asn1.DSAPrivateKey.decode(data, 'der')
60770 }
60771 case 'EC PRIVATE KEY':
60772 data = asn1.ECPrivateKey.decode(data, 'der')
60773 return {
60774 curve: data.parameters.value,
60775 privateKey: data.privateKey
60776 }
60777 default: throw new Error('unknown key type ' + type)
60778 }
60779 }
60780 parseKeys.signature = asn1.signature
60781 function decrypt (data, password) {
60782 var salt = data.algorithm.decrypt.kde.kdeparams.salt
60783 var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
60784 var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
60785 var iv = data.algorithm.decrypt.cipher.iv
60786 var cipherText = data.subjectPrivateKey
60787 var keylen = parseInt(algo.split('-')[1], 10) / 8
60788 var key = compat.pbkdf2Sync(password, salt, iters, keylen)
60789 var cipher = ciphers.createDecipheriv(algo, key, iv)
60790 var out = []
60791 out.push(cipher.update(cipherText))
60792 out.push(cipher.final())
60793 return Buffer.concat(out)
60794 }
60795
60796 }).call(this,require("buffer").Buffer)
60797 },{"./aesid.json":101,"./asn1":102,"./fixProc":104,"browserify-aes":22,"buffer":47,"pbkdf2":106}],106:[function(require,module,exports){
60798
60799 exports.pbkdf2 = require('./lib/async')
60800
60801 exports.pbkdf2Sync = require('./lib/sync')
60802
60803 },{"./lib/async":107,"./lib/sync":110}],107:[function(require,module,exports){
60804 (function (process,global){
60805 var checkParameters = require('./precondition')
60806 var defaultEncoding = require('./default-encoding')
60807 var sync = require('./sync')
60808 var Buffer = require('safe-buffer').Buffer
60809
60810 var ZERO_BUF
60811 var subtle = global.crypto && global.crypto.subtle
60812 var toBrowser = {
60813 'sha': 'SHA-1',
60814 'sha-1': 'SHA-1',
60815 'sha1': 'SHA-1',
60816 'sha256': 'SHA-256',
60817 'sha-256': 'SHA-256',
60818 'sha384': 'SHA-384',
60819 'sha-384': 'SHA-384',
60820 'sha-512': 'SHA-512',
60821 'sha512': 'SHA-512'
60822 }
60823 var checks = []
60824 function checkNative (algo) {
60825 if (global.process && !global.process.browser) {
60826 return Promise.resolve(false)
60827 }
60828 if (!subtle || !subtle.importKey || !subtle.deriveBits) {
60829 return Promise.resolve(false)
60830 }
60831 if (checks[algo] !== undefined) {
60832 return checks[algo]
60833 }
60834 ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
60835 var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
60836 .then(function () {
60837 return true
60838 }).catch(function () {
60839 return false
60840 })
60841 checks[algo] = prom
60842 return prom
60843 }
60844 function browserPbkdf2 (password, salt, iterations, length, algo) {
60845 return subtle.importKey(
60846 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']
60847 ).then(function (key) {
60848 return subtle.deriveBits({
60849 name: 'PBKDF2',
60850 salt: salt,
60851 iterations: iterations,
60852 hash: {
60853 name: algo
60854 }
60855 }, key, length << 3)
60856 }).then(function (res) {
60857 return Buffer.from(res)
60858 })
60859 }
60860 function resolvePromise (promise, callback) {
60861 promise.then(function (out) {
60862 process.nextTick(function () {
60863 callback(null, out)
60864 })
60865 }, function (e) {
60866 process.nextTick(function () {
60867 callback(e)
60868 })
60869 })
60870 }
60871 module.exports = function (password, salt, iterations, keylen, digest, callback) {
60872 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
60873 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
60874
60875 checkParameters(iterations, keylen)
60876 if (typeof digest === 'function') {
60877 callback = digest
60878 digest = undefined
60879 }
60880 if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
60881
60882 digest = digest || 'sha1'
60883 var algo = toBrowser[digest.toLowerCase()]
60884 if (!algo || typeof global.Promise !== 'function') {
60885 return process.nextTick(function () {
60886 var out
60887 try {
60888 out = sync(password, salt, iterations, keylen, digest)
60889 } catch (e) {
60890 return callback(e)
60891 }
60892 callback(null, out)
60893 })
60894 }
60895 resolvePromise(checkNative(algo).then(function (resp) {
60896 if (resp) {
60897 return browserPbkdf2(password, salt, iterations, keylen, algo)
60898 } else {
60899 return sync(password, salt, iterations, keylen, digest)
60900 }
60901 }), callback)
60902 }
60903
60904 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
60905 },{"./default-encoding":108,"./precondition":109,"./sync":110,"_process":112,"safe-buffer":134}],108:[function(require,module,exports){
60906 (function (process){
60907 var defaultEncoding
60908 /* istanbul ignore next */
60909 if (process.browser) {
60910 defaultEncoding = 'utf-8'
60911 } else {
60912 var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
60913
60914 defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
60915 }
60916 module.exports = defaultEncoding
60917
60918 }).call(this,require('_process'))
60919 },{"_process":112}],109:[function(require,module,exports){
60920 var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
60921 module.exports = function (iterations, keylen) {
60922 if (typeof iterations !== 'number') {
60923 throw new TypeError('Iterations not a number')
60924 }
60925
60926 if (iterations < 0) {
60927 throw new TypeError('Bad iterations')
60928 }
60929
60930 if (typeof keylen !== 'number') {
60931 throw new TypeError('Key length not a number')
60932 }
60933
60934 if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
60935 throw new TypeError('Bad key length')
60936 }
60937 }
60938
60939 },{}],110:[function(require,module,exports){
60940 var md5 = require('create-hash/md5')
60941 var rmd160 = require('ripemd160')
60942 var sha = require('sha.js')
60943
60944 var checkParameters = require('./precondition')
60945 var defaultEncoding = require('./default-encoding')
60946 var Buffer = require('safe-buffer').Buffer
60947 var ZEROS = Buffer.alloc(128)
60948 var sizes = {
60949 md5: 16,
60950 sha1: 20,
60951 sha224: 28,
60952 sha256: 32,
60953 sha384: 48,
60954 sha512: 64,
60955 rmd160: 20,
60956 ripemd160: 20
60957 }
60958 function Hmac (alg, key, saltLen) {
60959 var hash = getDigest(alg)
60960 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
60961
60962 if (key.length > blocksize) {
60963 key = hash(key)
60964 } else if (key.length < blocksize) {
60965 key = Buffer.concat([key, ZEROS], blocksize)
60966 }
60967
60968 var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
60969 var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
60970 for (var i = 0; i < blocksize; i++) {
60971 ipad[i] = key[i] ^ 0x36
60972 opad[i] = key[i] ^ 0x5C
60973 }
60974
60975 var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
60976 ipad.copy(ipad1, 0, 0, blocksize)
60977 this.ipad1 = ipad1
60978 this.ipad2 = ipad
60979 this.opad = opad
60980 this.alg = alg
60981 this.blocksize = blocksize
60982 this.hash = hash
60983 this.size = sizes[alg]
60984 }
60985
60986 Hmac.prototype.run = function (data, ipad) {
60987 data.copy(ipad, this.blocksize)
60988 var h = this.hash(ipad)
60989 h.copy(this.opad, this.blocksize)
60990 return this.hash(this.opad)
60991 }
60992
60993 function getDigest (alg) {
60994 if (alg === 'rmd160' || alg === 'ripemd160') return rmd160
60995 if (alg === 'md5') return md5
60996 return shaFunc
60997
60998 function shaFunc (data) {
60999 return sha(alg).update(data).digest()
61000 }
61001 }
61002
61003 module.exports = function (password, salt, iterations, keylen, digest) {
61004 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
61005 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
61006
61007 checkParameters(iterations, keylen)
61008
61009 digest = digest || 'sha1'
61010
61011 var hmac = new Hmac(digest, password, salt.length)
61012
61013 var DK = Buffer.allocUnsafe(keylen)
61014 var block1 = Buffer.allocUnsafe(salt.length + 4)
61015 salt.copy(block1, 0, 0, salt.length)
61016
61017 var U, j, destPos, len
61018
61019 var hLen = hmac.size
61020 var T = Buffer.allocUnsafe(hLen)
61021 var l = Math.ceil(keylen / hLen)
61022 var r = keylen - (l - 1) * hLen
61023
61024 for (var i = 1; i <= l; i++) {
61025 block1.writeUInt32BE(i, salt.length)
61026 U = hmac.run(block1, hmac.ipad1)
61027
61028 U.copy(T, 0, 0, hLen)
61029
61030 for (j = 1; j < iterations; j++) {
61031 U = hmac.run(U, hmac.ipad2)
61032 for (var k = 0; k < hLen; k++) T[k] ^= U[k]
61033 }
61034
61035 destPos = (i - 1) * hLen
61036 len = (i === l ? r : hLen)
61037 T.copy(DK, destPos, 0, len)
61038 }
61039
61040 return DK
61041 }
61042
61043 },{"./default-encoding":108,"./precondition":109,"create-hash/md5":53,"ripemd160":133,"safe-buffer":134,"sha.js":136}],111:[function(require,module,exports){
61044 (function (process){
61045 'use strict';
61046
61047 if (!process.version ||
61048 process.version.indexOf('v0.') === 0 ||
61049 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
61050 module.exports = nextTick;
61051 } else {
61052 module.exports = process.nextTick;
61053 }
61054
61055 function nextTick(fn, arg1, arg2, arg3) {
61056 if (typeof fn !== 'function') {
61057 throw new TypeError('"callback" argument must be a function');
61058 }
61059 var len = arguments.length;
61060 var args, i;
61061 switch (len) {
61062 case 0:
61063 case 1:
61064 return process.nextTick(fn);
61065 case 2:
61066 return process.nextTick(function afterTickOne() {
61067 fn.call(null, arg1);
61068 });
61069 case 3:
61070 return process.nextTick(function afterTickTwo() {
61071 fn.call(null, arg1, arg2);
61072 });
61073 case 4:
61074 return process.nextTick(function afterTickThree() {
61075 fn.call(null, arg1, arg2, arg3);
61076 });
61077 default:
61078 args = new Array(len - 1);
61079 i = 0;
61080 while (i < args.length) {
61081 args[i++] = arguments[i];
61082 }
61083 return process.nextTick(function afterTick() {
61084 fn.apply(null, args);
61085 });
61086 }
61087 }
61088
61089 }).call(this,require('_process'))
61090 },{"_process":112}],112:[function(require,module,exports){
61091 // shim for using process in browser
61092 var process = module.exports = {};
61093
61094 // cached from whatever global is present so that test runners that stub it
61095 // don't break things. But we need to wrap it in a try catch in case it is
61096 // wrapped in strict mode code which doesn't define any globals. It's inside a
61097 // function because try/catches deoptimize in certain engines.
61098
61099 var cachedSetTimeout;
61100 var cachedClearTimeout;
61101
61102 function defaultSetTimout() {
61103 throw new Error('setTimeout has not been defined');
61104 }
61105 function defaultClearTimeout () {
61106 throw new Error('clearTimeout has not been defined');
61107 }
61108 (function () {
61109 try {
61110 if (typeof setTimeout === 'function') {
61111 cachedSetTimeout = setTimeout;
61112 } else {
61113 cachedSetTimeout = defaultSetTimout;
61114 }
61115 } catch (e) {
61116 cachedSetTimeout = defaultSetTimout;
61117 }
61118 try {
61119 if (typeof clearTimeout === 'function') {
61120 cachedClearTimeout = clearTimeout;
61121 } else {
61122 cachedClearTimeout = defaultClearTimeout;
61123 }
61124 } catch (e) {
61125 cachedClearTimeout = defaultClearTimeout;
61126 }
61127 } ())
61128 function runTimeout(fun) {
61129 if (cachedSetTimeout === setTimeout) {
61130 //normal enviroments in sane situations
61131 return setTimeout(fun, 0);
61132 }
61133 // if setTimeout wasn't available but was latter defined
61134 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
61135 cachedSetTimeout = setTimeout;
61136 return setTimeout(fun, 0);
61137 }
61138 try {
61139 // when when somebody has screwed with setTimeout but no I.E. maddness
61140 return cachedSetTimeout(fun, 0);
61141 } catch(e){
61142 try {
61143 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
61144 return cachedSetTimeout.call(null, fun, 0);
61145 } catch(e){
61146 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
61147 return cachedSetTimeout.call(this, fun, 0);
61148 }
61149 }
61150
61151
61152 }
61153 function runClearTimeout(marker) {
61154 if (cachedClearTimeout === clearTimeout) {
61155 //normal enviroments in sane situations
61156 return clearTimeout(marker);
61157 }
61158 // if clearTimeout wasn't available but was latter defined
61159 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
61160 cachedClearTimeout = clearTimeout;
61161 return clearTimeout(marker);
61162 }
61163 try {
61164 // when when somebody has screwed with setTimeout but no I.E. maddness
61165 return cachedClearTimeout(marker);
61166 } catch (e){
61167 try {
61168 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
61169 return cachedClearTimeout.call(null, marker);
61170 } catch (e){
61171 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
61172 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
61173 return cachedClearTimeout.call(this, marker);
61174 }
61175 }
61176
61177
61178
61179 }
61180 var queue = [];
61181 var draining = false;
61182 var currentQueue;
61183 var queueIndex = -1;
61184
61185 function cleanUpNextTick() {
61186 if (!draining || !currentQueue) {
61187 return;
61188 }
61189 draining = false;
61190 if (currentQueue.length) {
61191 queue = currentQueue.concat(queue);
61192 } else {
61193 queueIndex = -1;
61194 }
61195 if (queue.length) {
61196 drainQueue();
61197 }
61198 }
61199
61200 function drainQueue() {
61201 if (draining) {
61202 return;
61203 }
61204 var timeout = runTimeout(cleanUpNextTick);
61205 draining = true;
61206
61207 var len = queue.length;
61208 while(len) {
61209 currentQueue = queue;
61210 queue = [];
61211 while (++queueIndex < len) {
61212 if (currentQueue) {
61213 currentQueue[queueIndex].run();
61214 }
61215 }
61216 queueIndex = -1;
61217 len = queue.length;
61218 }
61219 currentQueue = null;
61220 draining = false;
61221 runClearTimeout(timeout);
61222 }
61223
61224 process.nextTick = function (fun) {
61225 var args = new Array(arguments.length - 1);
61226 if (arguments.length > 1) {
61227 for (var i = 1; i < arguments.length; i++) {
61228 args[i - 1] = arguments[i];
61229 }
61230 }
61231 queue.push(new Item(fun, args));
61232 if (queue.length === 1 && !draining) {
61233 runTimeout(drainQueue);
61234 }
61235 };
61236
61237 // v8 likes predictible objects
61238 function Item(fun, array) {
61239 this.fun = fun;
61240 this.array = array;
61241 }
61242 Item.prototype.run = function () {
61243 this.fun.apply(null, this.array);
61244 };
61245 process.title = 'browser';
61246 process.browser = true;
61247 process.env = {};
61248 process.argv = [];
61249 process.version = ''; // empty string to avoid regexp issues
61250 process.versions = {};
61251
61252 function noop() {}
61253
61254 process.on = noop;
61255 process.addListener = noop;
61256 process.once = noop;
61257 process.off = noop;
61258 process.removeListener = noop;
61259 process.removeAllListeners = noop;
61260 process.emit = noop;
61261 process.prependListener = noop;
61262 process.prependOnceListener = noop;
61263
61264 process.listeners = function (name) { return [] }
61265
61266 process.binding = function (name) {
61267 throw new Error('process.binding is not supported');
61268 };
61269
61270 process.cwd = function () { return '/' };
61271 process.chdir = function (dir) {
61272 throw new Error('process.chdir is not supported');
61273 };
61274 process.umask = function() { return 0; };
61275
61276 },{}],113:[function(require,module,exports){
61277 exports.publicEncrypt = require('./publicEncrypt');
61278 exports.privateDecrypt = require('./privateDecrypt');
61279
61280 exports.privateEncrypt = function privateEncrypt(key, buf) {
61281 return exports.publicEncrypt(key, buf, true);
61282 };
61283
61284 exports.publicDecrypt = function publicDecrypt(key, buf) {
61285 return exports.privateDecrypt(key, buf, true);
61286 };
61287 },{"./privateDecrypt":115,"./publicEncrypt":116}],114:[function(require,module,exports){
61288 (function (Buffer){
61289 var createHash = require('create-hash');
61290 module.exports = function (seed, len) {
61291 var t = new Buffer('');
61292 var i = 0, c;
61293 while (t.length < len) {
61294 c = i2ops(i++);
61295 t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);
61296 }
61297 return t.slice(0, len);
61298 };
61299
61300 function i2ops(c) {
61301 var out = new Buffer(4);
61302 out.writeUInt32BE(c,0);
61303 return out;
61304 }
61305 }).call(this,require("buffer").Buffer)
61306 },{"buffer":47,"create-hash":51}],115:[function(require,module,exports){
61307 (function (Buffer){
61308 var parseKeys = require('parse-asn1');
61309 var mgf = require('./mgf');
61310 var xor = require('./xor');
61311 var bn = require('bn.js');
61312 var crt = require('browserify-rsa');
61313 var createHash = require('create-hash');
61314 var withPublic = require('./withPublic');
61315 module.exports = function privateDecrypt(private_key, enc, reverse) {
61316 var padding;
61317 if (private_key.padding) {
61318 padding = private_key.padding;
61319 } else if (reverse) {
61320 padding = 1;
61321 } else {
61322 padding = 4;
61323 }
61324
61325 var key = parseKeys(private_key);
61326 var k = key.modulus.byteLength();
61327 if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) {
61328 throw new Error('decryption error');
61329 }
61330 var msg;
61331 if (reverse) {
61332 msg = withPublic(new bn(enc), key);
61333 } else {
61334 msg = crt(enc, key);
61335 }
61336 var zBuffer = new Buffer(k - msg.length);
61337 zBuffer.fill(0);
61338 msg = Buffer.concat([zBuffer, msg], k);
61339 if (padding === 4) {
61340 return oaep(key, msg);
61341 } else if (padding === 1) {
61342 return pkcs1(key, msg, reverse);
61343 } else if (padding === 3) {
61344 return msg;
61345 } else {
61346 throw new Error('unknown padding');
61347 }
61348 };
61349
61350 function oaep(key, msg){
61351 var n = key.modulus;
61352 var k = key.modulus.byteLength();
61353 var mLen = msg.length;
61354 var iHash = createHash('sha1').update(new Buffer('')).digest();
61355 var hLen = iHash.length;
61356 var hLen2 = 2 * hLen;
61357 if (msg[0] !== 0) {
61358 throw new Error('decryption error');
61359 }
61360 var maskedSeed = msg.slice(1, hLen + 1);
61361 var maskedDb = msg.slice(hLen + 1);
61362 var seed = xor(maskedSeed, mgf(maskedDb, hLen));
61363 var db = xor(maskedDb, mgf(seed, k - hLen - 1));
61364 if (compare(iHash, db.slice(0, hLen))) {
61365 throw new Error('decryption error');
61366 }
61367 var i = hLen;
61368 while (db[i] === 0) {
61369 i++;
61370 }
61371 if (db[i++] !== 1) {
61372 throw new Error('decryption error');
61373 }
61374 return db.slice(i);
61375 }
61376
61377 function pkcs1(key, msg, reverse){
61378 var p1 = msg.slice(0, 2);
61379 var i = 2;
61380 var status = 0;
61381 while (msg[i++] !== 0) {
61382 if (i >= msg.length) {
61383 status++;
61384 break;
61385 }
61386 }
61387 var ps = msg.slice(2, i - 1);
61388 var p2 = msg.slice(i - 1, i);
61389
61390 if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){
61391 status++;
61392 }
61393 if (ps.length < 8) {
61394 status++;
61395 }
61396 if (status) {
61397 throw new Error('decryption error');
61398 }
61399 return msg.slice(i);
61400 }
61401 function compare(a, b){
61402 a = new Buffer(a);
61403 b = new Buffer(b);
61404 var dif = 0;
61405 var len = a.length;
61406 if (a.length !== b.length) {
61407 dif++;
61408 len = Math.min(a.length, b.length);
61409 }
61410 var i = -1;
61411 while (++i < len) {
61412 dif += (a[i] ^ b[i]);
61413 }
61414 return dif;
61415 }
61416 }).call(this,require("buffer").Buffer)
61417 },{"./mgf":114,"./withPublic":117,"./xor":118,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hash":51,"parse-asn1":105}],116:[function(require,module,exports){
61418 (function (Buffer){
61419 var parseKeys = require('parse-asn1');
61420 var randomBytes = require('randombytes');
61421 var createHash = require('create-hash');
61422 var mgf = require('./mgf');
61423 var xor = require('./xor');
61424 var bn = require('bn.js');
61425 var withPublic = require('./withPublic');
61426 var crt = require('browserify-rsa');
61427
61428 var constants = {
61429 RSA_PKCS1_OAEP_PADDING: 4,
61430 RSA_PKCS1_PADDIN: 1,
61431 RSA_NO_PADDING: 3
61432 };
61433
61434 module.exports = function publicEncrypt(public_key, msg, reverse) {
61435 var padding;
61436 if (public_key.padding) {
61437 padding = public_key.padding;
61438 } else if (reverse) {
61439 padding = 1;
61440 } else {
61441 padding = 4;
61442 }
61443 var key = parseKeys(public_key);
61444 var paddedMsg;
61445 if (padding === 4) {
61446 paddedMsg = oaep(key, msg);
61447 } else if (padding === 1) {
61448 paddedMsg = pkcs1(key, msg, reverse);
61449 } else if (padding === 3) {
61450 paddedMsg = new bn(msg);
61451 if (paddedMsg.cmp(key.modulus) >= 0) {
61452 throw new Error('data too long for modulus');
61453 }
61454 } else {
61455 throw new Error('unknown padding');
61456 }
61457 if (reverse) {
61458 return crt(paddedMsg, key);
61459 } else {
61460 return withPublic(paddedMsg, key);
61461 }
61462 };
61463
61464 function oaep(key, msg){
61465 var k = key.modulus.byteLength();
61466 var mLen = msg.length;
61467 var iHash = createHash('sha1').update(new Buffer('')).digest();
61468 var hLen = iHash.length;
61469 var hLen2 = 2 * hLen;
61470 if (mLen > k - hLen2 - 2) {
61471 throw new Error('message too long');
61472 }
61473 var ps = new Buffer(k - mLen - hLen2 - 2);
61474 ps.fill(0);
61475 var dblen = k - hLen - 1;
61476 var seed = randomBytes(hLen);
61477 var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen));
61478 var maskedSeed = xor(seed, mgf(maskedDb, hLen));
61479 return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k));
61480 }
61481 function pkcs1(key, msg, reverse){
61482 var mLen = msg.length;
61483 var k = key.modulus.byteLength();
61484 if (mLen > k - 11) {
61485 throw new Error('message too long');
61486 }
61487 var ps;
61488 if (reverse) {
61489 ps = new Buffer(k - mLen - 3);
61490 ps.fill(0xff);
61491 } else {
61492 ps = nonZero(k - mLen - 3);
61493 }
61494 return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k));
61495 }
61496 function nonZero(len, crypto) {
61497 var out = new Buffer(len);
61498 var i = 0;
61499 var cache = randomBytes(len*2);
61500 var cur = 0;
61501 var num;
61502 while (i < len) {
61503 if (cur === cache.length) {
61504 cache = randomBytes(len*2);
61505 cur = 0;
61506 }
61507 num = cache[cur++];
61508 if (num) {
61509 out[i++] = num;
61510 }
61511 }
61512 return out;
61513 }
61514 }).call(this,require("buffer").Buffer)
61515 },{"./mgf":114,"./withPublic":117,"./xor":118,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hash":51,"parse-asn1":105,"randombytes":119}],117:[function(require,module,exports){
61516 (function (Buffer){
61517 var bn = require('bn.js');
61518 function withPublic(paddedMsg, key) {
61519 return new Buffer(paddedMsg
61520 .toRed(bn.mont(key.modulus))
61521 .redPow(new bn(key.publicExponent))
61522 .fromRed()
61523 .toArray());
61524 }
61525
61526 module.exports = withPublic;
61527 }).call(this,require("buffer").Buffer)
61528 },{"bn.js":17,"buffer":47}],118:[function(require,module,exports){
61529 module.exports = function xor(a, b) {
61530 var len = a.length;
61531 var i = -1;
61532 while (++i < len) {
61533 a[i] ^= b[i];
61534 }
61535 return a
61536 };
61537 },{}],119:[function(require,module,exports){
61538 (function (process,global,Buffer){
61539 'use strict'
61540
61541 function oldBrowser () {
61542 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
61543 }
61544
61545 var crypto = global.crypto || global.msCrypto
61546
61547 if (crypto && crypto.getRandomValues) {
61548 module.exports = randomBytes
61549 } else {
61550 module.exports = oldBrowser
61551 }
61552
61553 function randomBytes (size, cb) {
61554 // phantomjs needs to throw
61555 if (size > 65536) throw new Error('requested too many random bytes')
61556 // in case browserify isn't using the Uint8Array version
61557 var rawBytes = new global.Uint8Array(size)
61558
61559 // This will not work in older browsers.
61560 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
61561 if (size > 0) { // getRandomValues fails on IE if size == 0
61562 crypto.getRandomValues(rawBytes)
61563 }
61564 // phantomjs doesn't like a buffer being passed here
61565 var bytes = new Buffer(rawBytes.buffer)
61566
61567 if (typeof cb === 'function') {
61568 return process.nextTick(function () {
61569 cb(null, bytes)
61570 })
61571 }
61572
61573 return bytes
61574 }
61575
61576 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
61577 },{"_process":112,"buffer":47}],120:[function(require,module,exports){
61578 module.exports = require('./lib/_stream_duplex.js');
61579
61580 },{"./lib/_stream_duplex.js":121}],121:[function(require,module,exports){
61581 // a duplex stream is just a stream that is both readable and writable.
61582 // Since JS doesn't have multiple prototypal inheritance, this class
61583 // prototypally inherits from Readable, and then parasitically from
61584 // Writable.
61585
61586 'use strict';
61587
61588 /*<replacement>*/
61589
61590 var objectKeys = Object.keys || function (obj) {
61591 var keys = [];
61592 for (var key in obj) {
61593 keys.push(key);
61594 }return keys;
61595 };
61596 /*</replacement>*/
61597
61598 module.exports = Duplex;
61599
61600 /*<replacement>*/
61601 var processNextTick = require('process-nextick-args');
61602 /*</replacement>*/
61603
61604 /*<replacement>*/
61605 var util = require('core-util-is');
61606 util.inherits = require('inherits');
61607 /*</replacement>*/
61608
61609 var Readable = require('./_stream_readable');
61610 var Writable = require('./_stream_writable');
61611
61612 util.inherits(Duplex, Readable);
61613
61614 var keys = objectKeys(Writable.prototype);
61615 for (var v = 0; v < keys.length; v++) {
61616 var method = keys[v];
61617 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
61618 }
61619
61620 function Duplex(options) {
61621 if (!(this instanceof Duplex)) return new Duplex(options);
61622
61623 Readable.call(this, options);
61624 Writable.call(this, options);
61625
61626 if (options && options.readable === false) this.readable = false;
61627
61628 if (options && options.writable === false) this.writable = false;
61629
61630 this.allowHalfOpen = true;
61631 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
61632
61633 this.once('end', onend);
61634 }
61635
61636 // the no-half-open enforcer
61637 function onend() {
61638 // if we allow half-open state, or if the writable side ended,
61639 // then we're ok.
61640 if (this.allowHalfOpen || this._writableState.ended) return;
61641
61642 // no more data can be written.
61643 // But allow more writes to happen in this tick.
61644 processNextTick(onEndNT, this);
61645 }
61646
61647 function onEndNT(self) {
61648 self.end();
61649 }
61650
61651 function forEach(xs, f) {
61652 for (var i = 0, l = xs.length; i < l; i++) {
61653 f(xs[i], i);
61654 }
61655 }
61656 },{"./_stream_readable":123,"./_stream_writable":125,"core-util-is":49,"inherits":95,"process-nextick-args":111}],122:[function(require,module,exports){
61657 // a passthrough stream.
61658 // basically just the most minimal sort of Transform stream.
61659 // Every written chunk gets output as-is.
61660
61661 'use strict';
61662
61663 module.exports = PassThrough;
61664
61665 var Transform = require('./_stream_transform');
61666
61667 /*<replacement>*/
61668 var util = require('core-util-is');
61669 util.inherits = require('inherits');
61670 /*</replacement>*/
61671
61672 util.inherits(PassThrough, Transform);
61673
61674 function PassThrough(options) {
61675 if (!(this instanceof PassThrough)) return new PassThrough(options);
61676
61677 Transform.call(this, options);
61678 }
61679
61680 PassThrough.prototype._transform = function (chunk, encoding, cb) {
61681 cb(null, chunk);
61682 };
61683 },{"./_stream_transform":124,"core-util-is":49,"inherits":95}],123:[function(require,module,exports){
61684 (function (process){
61685 'use strict';
61686
61687 module.exports = Readable;
61688
61689 /*<replacement>*/
61690 var processNextTick = require('process-nextick-args');
61691 /*</replacement>*/
61692
61693 /*<replacement>*/
61694 var isArray = require('isarray');
61695 /*</replacement>*/
61696
61697 /*<replacement>*/
61698 var Duplex;
61699 /*</replacement>*/
61700
61701 Readable.ReadableState = ReadableState;
61702
61703 /*<replacement>*/
61704 var EE = require('events').EventEmitter;
61705
61706 var EElistenerCount = function (emitter, type) {
61707 return emitter.listeners(type).length;
61708 };
61709 /*</replacement>*/
61710
61711 /*<replacement>*/
61712 var Stream = require('./internal/streams/stream');
61713 /*</replacement>*/
61714
61715 var Buffer = require('buffer').Buffer;
61716 /*<replacement>*/
61717 var bufferShim = require('buffer-shims');
61718 /*</replacement>*/
61719
61720 /*<replacement>*/
61721 var util = require('core-util-is');
61722 util.inherits = require('inherits');
61723 /*</replacement>*/
61724
61725 /*<replacement>*/
61726 var debugUtil = require('util');
61727 var debug = void 0;
61728 if (debugUtil && debugUtil.debuglog) {
61729 debug = debugUtil.debuglog('stream');
61730 } else {
61731 debug = function () {};
61732 }
61733 /*</replacement>*/
61734
61735 var BufferList = require('./internal/streams/BufferList');
61736 var StringDecoder;
61737
61738 util.inherits(Readable, Stream);
61739
61740 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
61741
61742 function prependListener(emitter, event, fn) {
61743 // Sadly this is not cacheable as some libraries bundle their own
61744 // event emitter implementation with them.
61745 if (typeof emitter.prependListener === 'function') {
61746 return emitter.prependListener(event, fn);
61747 } else {
61748 // This is a hack to make sure that our error handler is attached before any
61749 // userland ones. NEVER DO THIS. This is here only because this code needs
61750 // to continue to work with older versions of Node.js that do not include
61751 // the prependListener() method. The goal is to eventually remove this hack.
61752 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
61753 }
61754 }
61755
61756 function ReadableState(options, stream) {
61757 Duplex = Duplex || require('./_stream_duplex');
61758
61759 options = options || {};
61760
61761 // object stream flag. Used to make read(n) ignore n and to
61762 // make all the buffer merging and length checks go away
61763 this.objectMode = !!options.objectMode;
61764
61765 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
61766
61767 // the point at which it stops calling _read() to fill the buffer
61768 // Note: 0 is a valid value, means "don't call _read preemptively ever"
61769 var hwm = options.highWaterMark;
61770 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
61771 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
61772
61773 // cast to ints.
61774 this.highWaterMark = ~~this.highWaterMark;
61775
61776 // A linked list is used to store data chunks instead of an array because the
61777 // linked list can remove elements from the beginning faster than
61778 // array.shift()
61779 this.buffer = new BufferList();
61780 this.length = 0;
61781 this.pipes = null;
61782 this.pipesCount = 0;
61783 this.flowing = null;
61784 this.ended = false;
61785 this.endEmitted = false;
61786 this.reading = false;
61787
61788 // a flag to be able to tell if the onwrite cb is called immediately,
61789 // or on a later tick. We set this to true at first, because any
61790 // actions that shouldn't happen until "later" should generally also
61791 // not happen before the first write call.
61792 this.sync = true;
61793
61794 // whenever we return null, then we set a flag to say
61795 // that we're awaiting a 'readable' event emission.
61796 this.needReadable = false;
61797 this.emittedReadable = false;
61798 this.readableListening = false;
61799 this.resumeScheduled = false;
61800
61801 // Crypto is kind of old and crusty. Historically, its default string
61802 // encoding is 'binary' so we have to make this configurable.
61803 // Everything else in the universe uses 'utf8', though.
61804 this.defaultEncoding = options.defaultEncoding || 'utf8';
61805
61806 // when piping, we only care about 'readable' events that happen
61807 // after read()ing all the bytes and not getting any pushback.
61808 this.ranOut = false;
61809
61810 // the number of writers that are awaiting a drain event in .pipe()s
61811 this.awaitDrain = 0;
61812
61813 // if true, a maybeReadMore has been scheduled
61814 this.readingMore = false;
61815
61816 this.decoder = null;
61817 this.encoding = null;
61818 if (options.encoding) {
61819 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
61820 this.decoder = new StringDecoder(options.encoding);
61821 this.encoding = options.encoding;
61822 }
61823 }
61824
61825 function Readable(options) {
61826 Duplex = Duplex || require('./_stream_duplex');
61827
61828 if (!(this instanceof Readable)) return new Readable(options);
61829
61830 this._readableState = new ReadableState(options, this);
61831
61832 // legacy
61833 this.readable = true;
61834
61835 if (options && typeof options.read === 'function') this._read = options.read;
61836
61837 Stream.call(this);
61838 }
61839
61840 // Manually shove something into the read() buffer.
61841 // This returns true if the highWaterMark has not been hit yet,
61842 // similar to how Writable.write() returns true if you should
61843 // write() some more.
61844 Readable.prototype.push = function (chunk, encoding) {
61845 var state = this._readableState;
61846
61847 if (!state.objectMode && typeof chunk === 'string') {
61848 encoding = encoding || state.defaultEncoding;
61849 if (encoding !== state.encoding) {
61850 chunk = bufferShim.from(chunk, encoding);
61851 encoding = '';
61852 }
61853 }
61854
61855 return readableAddChunk(this, state, chunk, encoding, false);
61856 };
61857
61858 // Unshift should *always* be something directly out of read()
61859 Readable.prototype.unshift = function (chunk) {
61860 var state = this._readableState;
61861 return readableAddChunk(this, state, chunk, '', true);
61862 };
61863
61864 Readable.prototype.isPaused = function () {
61865 return this._readableState.flowing === false;
61866 };
61867
61868 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
61869 var er = chunkInvalid(state, chunk);
61870 if (er) {
61871 stream.emit('error', er);
61872 } else if (chunk === null) {
61873 state.reading = false;
61874 onEofChunk(stream, state);
61875 } else if (state.objectMode || chunk && chunk.length > 0) {
61876 if (state.ended && !addToFront) {
61877 var e = new Error('stream.push() after EOF');
61878 stream.emit('error', e);
61879 } else if (state.endEmitted && addToFront) {
61880 var _e = new Error('stream.unshift() after end event');
61881 stream.emit('error', _e);
61882 } else {
61883 var skipAdd;
61884 if (state.decoder && !addToFront && !encoding) {
61885 chunk = state.decoder.write(chunk);
61886 skipAdd = !state.objectMode && chunk.length === 0;
61887 }
61888
61889 if (!addToFront) state.reading = false;
61890
61891 // Don't add to the buffer if we've decoded to an empty string chunk and
61892 // we're not in object mode
61893 if (!skipAdd) {
61894 // if we want the data now, just emit it.
61895 if (state.flowing && state.length === 0 && !state.sync) {
61896 stream.emit('data', chunk);
61897 stream.read(0);
61898 } else {
61899 // update the buffer info.
61900 state.length += state.objectMode ? 1 : chunk.length;
61901 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
61902
61903 if (state.needReadable) emitReadable(stream);
61904 }
61905 }
61906
61907 maybeReadMore(stream, state);
61908 }
61909 } else if (!addToFront) {
61910 state.reading = false;
61911 }
61912
61913 return needMoreData(state);
61914 }
61915
61916 // if it's past the high water mark, we can push in some more.
61917 // Also, if we have no data yet, we can stand some
61918 // more bytes. This is to work around cases where hwm=0,
61919 // such as the repl. Also, if the push() triggered a
61920 // readable event, and the user called read(largeNumber) such that
61921 // needReadable was set, then we ought to push more, so that another
61922 // 'readable' event will be triggered.
61923 function needMoreData(state) {
61924 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
61925 }
61926
61927 // backwards compatibility.
61928 Readable.prototype.setEncoding = function (enc) {
61929 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
61930 this._readableState.decoder = new StringDecoder(enc);
61931 this._readableState.encoding = enc;
61932 return this;
61933 };
61934
61935 // Don't raise the hwm > 8MB
61936 var MAX_HWM = 0x800000;
61937 function computeNewHighWaterMark(n) {
61938 if (n >= MAX_HWM) {
61939 n = MAX_HWM;
61940 } else {
61941 // Get the next highest power of 2 to prevent increasing hwm excessively in
61942 // tiny amounts
61943 n--;
61944 n |= n >>> 1;
61945 n |= n >>> 2;
61946 n |= n >>> 4;
61947 n |= n >>> 8;
61948 n |= n >>> 16;
61949 n++;
61950 }
61951 return n;
61952 }
61953
61954 // This function is designed to be inlinable, so please take care when making
61955 // changes to the function body.
61956 function howMuchToRead(n, state) {
61957 if (n <= 0 || state.length === 0 && state.ended) return 0;
61958 if (state.objectMode) return 1;
61959 if (n !== n) {
61960 // Only flow one buffer at a time
61961 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
61962 }
61963 // If we're asking for more than the current hwm, then raise the hwm.
61964 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
61965 if (n <= state.length) return n;
61966 // Don't have enough
61967 if (!state.ended) {
61968 state.needReadable = true;
61969 return 0;
61970 }
61971 return state.length;
61972 }
61973
61974 // you can override either this method, or the async _read(n) below.
61975 Readable.prototype.read = function (n) {
61976 debug('read', n);
61977 n = parseInt(n, 10);
61978 var state = this._readableState;
61979 var nOrig = n;
61980
61981 if (n !== 0) state.emittedReadable = false;
61982
61983 // if we're doing read(0) to trigger a readable event, but we
61984 // already have a bunch of data in the buffer, then just trigger
61985 // the 'readable' event and move on.
61986 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
61987 debug('read: emitReadable', state.length, state.ended);
61988 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
61989 return null;
61990 }
61991
61992 n = howMuchToRead(n, state);
61993
61994 // if we've ended, and we're now clear, then finish it up.
61995 if (n === 0 && state.ended) {
61996 if (state.length === 0) endReadable(this);
61997 return null;
61998 }
61999
62000 // All the actual chunk generation logic needs to be
62001 // *below* the call to _read. The reason is that in certain
62002 // synthetic stream cases, such as passthrough streams, _read
62003 // may be a completely synchronous operation which may change
62004 // the state of the read buffer, providing enough data when
62005 // before there was *not* enough.
62006 //
62007 // So, the steps are:
62008 // 1. Figure out what the state of things will be after we do
62009 // a read from the buffer.
62010 //
62011 // 2. If that resulting state will trigger a _read, then call _read.
62012 // Note that this may be asynchronous, or synchronous. Yes, it is
62013 // deeply ugly to write APIs this way, but that still doesn't mean
62014 // that the Readable class should behave improperly, as streams are
62015 // designed to be sync/async agnostic.
62016 // Take note if the _read call is sync or async (ie, if the read call
62017 // has returned yet), so that we know whether or not it's safe to emit
62018 // 'readable' etc.
62019 //
62020 // 3. Actually pull the requested chunks out of the buffer and return.
62021
62022 // if we need a readable event, then we need to do some reading.
62023 var doRead = state.needReadable;
62024 debug('need readable', doRead);
62025
62026 // if we currently have less than the highWaterMark, then also read some
62027 if (state.length === 0 || state.length - n < state.highWaterMark) {
62028 doRead = true;
62029 debug('length less than watermark', doRead);
62030 }
62031
62032 // however, if we've ended, then there's no point, and if we're already
62033 // reading, then it's unnecessary.
62034 if (state.ended || state.reading) {
62035 doRead = false;
62036 debug('reading or ended', doRead);
62037 } else if (doRead) {
62038 debug('do read');
62039 state.reading = true;
62040 state.sync = true;
62041 // if the length is currently zero, then we *need* a readable event.
62042 if (state.length === 0) state.needReadable = true;
62043 // call internal read method
62044 this._read(state.highWaterMark);
62045 state.sync = false;
62046 // If _read pushed data synchronously, then `reading` will be false,
62047 // and we need to re-evaluate how much data we can return to the user.
62048 if (!state.reading) n = howMuchToRead(nOrig, state);
62049 }
62050
62051 var ret;
62052 if (n > 0) ret = fromList(n, state);else ret = null;
62053
62054 if (ret === null) {
62055 state.needReadable = true;
62056 n = 0;
62057 } else {
62058 state.length -= n;
62059 }
62060
62061 if (state.length === 0) {
62062 // If we have nothing in the buffer, then we want to know
62063 // as soon as we *do* get something into the buffer.
62064 if (!state.ended) state.needReadable = true;
62065
62066 // If we tried to read() past the EOF, then emit end on the next tick.
62067 if (nOrig !== n && state.ended) endReadable(this);
62068 }
62069
62070 if (ret !== null) this.emit('data', ret);
62071
62072 return ret;
62073 };
62074
62075 function chunkInvalid(state, chunk) {
62076 var er = null;
62077 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
62078 er = new TypeError('Invalid non-string/buffer chunk');
62079 }
62080 return er;
62081 }
62082
62083 function onEofChunk(stream, state) {
62084 if (state.ended) return;
62085 if (state.decoder) {
62086 var chunk = state.decoder.end();
62087 if (chunk && chunk.length) {
62088 state.buffer.push(chunk);
62089 state.length += state.objectMode ? 1 : chunk.length;
62090 }
62091 }
62092 state.ended = true;
62093
62094 // emit 'readable' now to make sure it gets picked up.
62095 emitReadable(stream);
62096 }
62097
62098 // Don't emit readable right away in sync mode, because this can trigger
62099 // another read() call => stack overflow. This way, it might trigger
62100 // a nextTick recursion warning, but that's not so bad.
62101 function emitReadable(stream) {
62102 var state = stream._readableState;
62103 state.needReadable = false;
62104 if (!state.emittedReadable) {
62105 debug('emitReadable', state.flowing);
62106 state.emittedReadable = true;
62107 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
62108 }
62109 }
62110
62111 function emitReadable_(stream) {
62112 debug('emit readable');
62113 stream.emit('readable');
62114 flow(stream);
62115 }
62116
62117 // at this point, the user has presumably seen the 'readable' event,
62118 // and called read() to consume some data. that may have triggered
62119 // in turn another _read(n) call, in which case reading = true if
62120 // it's in progress.
62121 // However, if we're not ended, or reading, and the length < hwm,
62122 // then go ahead and try to read some more preemptively.
62123 function maybeReadMore(stream, state) {
62124 if (!state.readingMore) {
62125 state.readingMore = true;
62126 processNextTick(maybeReadMore_, stream, state);
62127 }
62128 }
62129
62130 function maybeReadMore_(stream, state) {
62131 var len = state.length;
62132 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
62133 debug('maybeReadMore read 0');
62134 stream.read(0);
62135 if (len === state.length)
62136 // didn't get any data, stop spinning.
62137 break;else len = state.length;
62138 }
62139 state.readingMore = false;
62140 }
62141
62142 // abstract method. to be overridden in specific implementation classes.
62143 // call cb(er, data) where data is <= n in length.
62144 // for virtual (non-string, non-buffer) streams, "length" is somewhat
62145 // arbitrary, and perhaps not very meaningful.
62146 Readable.prototype._read = function (n) {
62147 this.emit('error', new Error('_read() is not implemented'));
62148 };
62149
62150 Readable.prototype.pipe = function (dest, pipeOpts) {
62151 var src = this;
62152 var state = this._readableState;
62153
62154 switch (state.pipesCount) {
62155 case 0:
62156 state.pipes = dest;
62157 break;
62158 case 1:
62159 state.pipes = [state.pipes, dest];
62160 break;
62161 default:
62162 state.pipes.push(dest);
62163 break;
62164 }
62165 state.pipesCount += 1;
62166 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
62167
62168 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
62169
62170 var endFn = doEnd ? onend : cleanup;
62171 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
62172
62173 dest.on('unpipe', onunpipe);
62174 function onunpipe(readable) {
62175 debug('onunpipe');
62176 if (readable === src) {
62177 cleanup();
62178 }
62179 }
62180
62181 function onend() {
62182 debug('onend');
62183 dest.end();
62184 }
62185
62186 // when the dest drains, it reduces the awaitDrain counter
62187 // on the source. This would be more elegant with a .once()
62188 // handler in flow(), but adding and removing repeatedly is
62189 // too slow.
62190 var ondrain = pipeOnDrain(src);
62191 dest.on('drain', ondrain);
62192
62193 var cleanedUp = false;
62194 function cleanup() {
62195 debug('cleanup');
62196 // cleanup event handlers once the pipe is broken
62197 dest.removeListener('close', onclose);
62198 dest.removeListener('finish', onfinish);
62199 dest.removeListener('drain', ondrain);
62200 dest.removeListener('error', onerror);
62201 dest.removeListener('unpipe', onunpipe);
62202 src.removeListener('end', onend);
62203 src.removeListener('end', cleanup);
62204 src.removeListener('data', ondata);
62205
62206 cleanedUp = true;
62207
62208 // if the reader is waiting for a drain event from this
62209 // specific writer, then it would cause it to never start
62210 // flowing again.
62211 // So, if this is awaiting a drain, then we just call it now.
62212 // If we don't know, then assume that we are waiting for one.
62213 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
62214 }
62215
62216 // If the user pushes more data while we're writing to dest then we'll end up
62217 // in ondata again. However, we only want to increase awaitDrain once because
62218 // dest will only emit one 'drain' event for the multiple writes.
62219 // => Introduce a guard on increasing awaitDrain.
62220 var increasedAwaitDrain = false;
62221 src.on('data', ondata);
62222 function ondata(chunk) {
62223 debug('ondata');
62224 increasedAwaitDrain = false;
62225 var ret = dest.write(chunk);
62226 if (false === ret && !increasedAwaitDrain) {
62227 // If the user unpiped during `dest.write()`, it is possible
62228 // to get stuck in a permanently paused state if that write
62229 // also returned false.
62230 // => Check whether `dest` is still a piping destination.
62231 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
62232 debug('false write response, pause', src._readableState.awaitDrain);
62233 src._readableState.awaitDrain++;
62234 increasedAwaitDrain = true;
62235 }
62236 src.pause();
62237 }
62238 }
62239
62240 // if the dest has an error, then stop piping into it.
62241 // however, don't suppress the throwing behavior for this.
62242 function onerror(er) {
62243 debug('onerror', er);
62244 unpipe();
62245 dest.removeListener('error', onerror);
62246 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
62247 }
62248
62249 // Make sure our error handler is attached before userland ones.
62250 prependListener(dest, 'error', onerror);
62251
62252 // Both close and finish should trigger unpipe, but only once.
62253 function onclose() {
62254 dest.removeListener('finish', onfinish);
62255 unpipe();
62256 }
62257 dest.once('close', onclose);
62258 function onfinish() {
62259 debug('onfinish');
62260 dest.removeListener('close', onclose);
62261 unpipe();
62262 }
62263 dest.once('finish', onfinish);
62264
62265 function unpipe() {
62266 debug('unpipe');
62267 src.unpipe(dest);
62268 }
62269
62270 // tell the dest that it's being piped to
62271 dest.emit('pipe', src);
62272
62273 // start the flow if it hasn't been started already.
62274 if (!state.flowing) {
62275 debug('pipe resume');
62276 src.resume();
62277 }
62278
62279 return dest;
62280 };
62281
62282 function pipeOnDrain(src) {
62283 return function () {
62284 var state = src._readableState;
62285 debug('pipeOnDrain', state.awaitDrain);
62286 if (state.awaitDrain) state.awaitDrain--;
62287 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
62288 state.flowing = true;
62289 flow(src);
62290 }
62291 };
62292 }
62293
62294 Readable.prototype.unpipe = function (dest) {
62295 var state = this._readableState;
62296
62297 // if we're not piping anywhere, then do nothing.
62298 if (state.pipesCount === 0) return this;
62299
62300 // just one destination. most common case.
62301 if (state.pipesCount === 1) {
62302 // passed in one, but it's not the right one.
62303 if (dest && dest !== state.pipes) return this;
62304
62305 if (!dest) dest = state.pipes;
62306
62307 // got a match.
62308 state.pipes = null;
62309 state.pipesCount = 0;
62310 state.flowing = false;
62311 if (dest) dest.emit('unpipe', this);
62312 return this;
62313 }
62314
62315 // slow case. multiple pipe destinations.
62316
62317 if (!dest) {
62318 // remove all.
62319 var dests = state.pipes;
62320 var len = state.pipesCount;
62321 state.pipes = null;
62322 state.pipesCount = 0;
62323 state.flowing = false;
62324
62325 for (var i = 0; i < len; i++) {
62326 dests[i].emit('unpipe', this);
62327 }return this;
62328 }
62329
62330 // try to find the right one.
62331 var index = indexOf(state.pipes, dest);
62332 if (index === -1) return this;
62333
62334 state.pipes.splice(index, 1);
62335 state.pipesCount -= 1;
62336 if (state.pipesCount === 1) state.pipes = state.pipes[0];
62337
62338 dest.emit('unpipe', this);
62339
62340 return this;
62341 };
62342
62343 // set up data events if they are asked for
62344 // Ensure readable listeners eventually get something
62345 Readable.prototype.on = function (ev, fn) {
62346 var res = Stream.prototype.on.call(this, ev, fn);
62347
62348 if (ev === 'data') {
62349 // Start flowing on next tick if stream isn't explicitly paused
62350 if (this._readableState.flowing !== false) this.resume();
62351 } else if (ev === 'readable') {
62352 var state = this._readableState;
62353 if (!state.endEmitted && !state.readableListening) {
62354 state.readableListening = state.needReadable = true;
62355 state.emittedReadable = false;
62356 if (!state.reading) {
62357 processNextTick(nReadingNextTick, this);
62358 } else if (state.length) {
62359 emitReadable(this, state);
62360 }
62361 }
62362 }
62363
62364 return res;
62365 };
62366 Readable.prototype.addListener = Readable.prototype.on;
62367
62368 function nReadingNextTick(self) {
62369 debug('readable nexttick read 0');
62370 self.read(0);
62371 }
62372
62373 // pause() and resume() are remnants of the legacy readable stream API
62374 // If the user uses them, then switch into old mode.
62375 Readable.prototype.resume = function () {
62376 var state = this._readableState;
62377 if (!state.flowing) {
62378 debug('resume');
62379 state.flowing = true;
62380 resume(this, state);
62381 }
62382 return this;
62383 };
62384
62385 function resume(stream, state) {
62386 if (!state.resumeScheduled) {
62387 state.resumeScheduled = true;
62388 processNextTick(resume_, stream, state);
62389 }
62390 }
62391
62392 function resume_(stream, state) {
62393 if (!state.reading) {
62394 debug('resume read 0');
62395 stream.read(0);
62396 }
62397
62398 state.resumeScheduled = false;
62399 state.awaitDrain = 0;
62400 stream.emit('resume');
62401 flow(stream);
62402 if (state.flowing && !state.reading) stream.read(0);
62403 }
62404
62405 Readable.prototype.pause = function () {
62406 debug('call pause flowing=%j', this._readableState.flowing);
62407 if (false !== this._readableState.flowing) {
62408 debug('pause');
62409 this._readableState.flowing = false;
62410 this.emit('pause');
62411 }
62412 return this;
62413 };
62414
62415 function flow(stream) {
62416 var state = stream._readableState;
62417 debug('flow', state.flowing);
62418 while (state.flowing && stream.read() !== null) {}
62419 }
62420
62421 // wrap an old-style stream as the async data source.
62422 // This is *not* part of the readable stream interface.
62423 // It is an ugly unfortunate mess of history.
62424 Readable.prototype.wrap = function (stream) {
62425 var state = this._readableState;
62426 var paused = false;
62427
62428 var self = this;
62429 stream.on('end', function () {
62430 debug('wrapped end');
62431 if (state.decoder && !state.ended) {
62432 var chunk = state.decoder.end();
62433 if (chunk && chunk.length) self.push(chunk);
62434 }
62435
62436 self.push(null);
62437 });
62438
62439 stream.on('data', function (chunk) {
62440 debug('wrapped data');
62441 if (state.decoder) chunk = state.decoder.write(chunk);
62442
62443 // don't skip over falsy values in objectMode
62444 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
62445
62446 var ret = self.push(chunk);
62447 if (!ret) {
62448 paused = true;
62449 stream.pause();
62450 }
62451 });
62452
62453 // proxy all the other methods.
62454 // important when wrapping filters and duplexes.
62455 for (var i in stream) {
62456 if (this[i] === undefined && typeof stream[i] === 'function') {
62457 this[i] = function (method) {
62458 return function () {
62459 return stream[method].apply(stream, arguments);
62460 };
62461 }(i);
62462 }
62463 }
62464
62465 // proxy certain important events.
62466 for (var n = 0; n < kProxyEvents.length; n++) {
62467 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
62468 }
62469
62470 // when we try to consume some more bytes, simply unpause the
62471 // underlying stream.
62472 self._read = function (n) {
62473 debug('wrapped _read', n);
62474 if (paused) {
62475 paused = false;
62476 stream.resume();
62477 }
62478 };
62479
62480 return self;
62481 };
62482
62483 // exposed for testing purposes only.
62484 Readable._fromList = fromList;
62485
62486 // Pluck off n bytes from an array of buffers.
62487 // Length is the combined lengths of all the buffers in the list.
62488 // This function is designed to be inlinable, so please take care when making
62489 // changes to the function body.
62490 function fromList(n, state) {
62491 // nothing buffered
62492 if (state.length === 0) return null;
62493
62494 var ret;
62495 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
62496 // read it all, truncate the list
62497 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
62498 state.buffer.clear();
62499 } else {
62500 // read part of list
62501 ret = fromListPartial(n, state.buffer, state.decoder);
62502 }
62503
62504 return ret;
62505 }
62506
62507 // Extracts only enough buffered data to satisfy the amount requested.
62508 // This function is designed to be inlinable, so please take care when making
62509 // changes to the function body.
62510 function fromListPartial(n, list, hasStrings) {
62511 var ret;
62512 if (n < list.head.data.length) {
62513 // slice is the same for buffers and strings
62514 ret = list.head.data.slice(0, n);
62515 list.head.data = list.head.data.slice(n);
62516 } else if (n === list.head.data.length) {
62517 // first chunk is a perfect match
62518 ret = list.shift();
62519 } else {
62520 // result spans more than one buffer
62521 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
62522 }
62523 return ret;
62524 }
62525
62526 // Copies a specified amount of characters from the list of buffered data
62527 // chunks.
62528 // This function is designed to be inlinable, so please take care when making
62529 // changes to the function body.
62530 function copyFromBufferString(n, list) {
62531 var p = list.head;
62532 var c = 1;
62533 var ret = p.data;
62534 n -= ret.length;
62535 while (p = p.next) {
62536 var str = p.data;
62537 var nb = n > str.length ? str.length : n;
62538 if (nb === str.length) ret += str;else ret += str.slice(0, n);
62539 n -= nb;
62540 if (n === 0) {
62541 if (nb === str.length) {
62542 ++c;
62543 if (p.next) list.head = p.next;else list.head = list.tail = null;
62544 } else {
62545 list.head = p;
62546 p.data = str.slice(nb);
62547 }
62548 break;
62549 }
62550 ++c;
62551 }
62552 list.length -= c;
62553 return ret;
62554 }
62555
62556 // Copies a specified amount of bytes from the list of buffered data chunks.
62557 // This function is designed to be inlinable, so please take care when making
62558 // changes to the function body.
62559 function copyFromBuffer(n, list) {
62560 var ret = bufferShim.allocUnsafe(n);
62561 var p = list.head;
62562 var c = 1;
62563 p.data.copy(ret);
62564 n -= p.data.length;
62565 while (p = p.next) {
62566 var buf = p.data;
62567 var nb = n > buf.length ? buf.length : n;
62568 buf.copy(ret, ret.length - n, 0, nb);
62569 n -= nb;
62570 if (n === 0) {
62571 if (nb === buf.length) {
62572 ++c;
62573 if (p.next) list.head = p.next;else list.head = list.tail = null;
62574 } else {
62575 list.head = p;
62576 p.data = buf.slice(nb);
62577 }
62578 break;
62579 }
62580 ++c;
62581 }
62582 list.length -= c;
62583 return ret;
62584 }
62585
62586 function endReadable(stream) {
62587 var state = stream._readableState;
62588
62589 // If we get here before consuming all the bytes, then that is a
62590 // bug in node. Should never happen.
62591 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
62592
62593 if (!state.endEmitted) {
62594 state.ended = true;
62595 processNextTick(endReadableNT, state, stream);
62596 }
62597 }
62598
62599 function endReadableNT(state, stream) {
62600 // Check that we didn't get one last unshift.
62601 if (!state.endEmitted && state.length === 0) {
62602 state.endEmitted = true;
62603 stream.readable = false;
62604 stream.emit('end');
62605 }
62606 }
62607
62608 function forEach(xs, f) {
62609 for (var i = 0, l = xs.length; i < l; i++) {
62610 f(xs[i], i);
62611 }
62612 }
62613
62614 function indexOf(xs, x) {
62615 for (var i = 0, l = xs.length; i < l; i++) {
62616 if (xs[i] === x) return i;
62617 }
62618 return -1;
62619 }
62620 }).call(this,require('_process'))
62621 },{"./_stream_duplex":121,"./internal/streams/BufferList":126,"./internal/streams/stream":127,"_process":112,"buffer":47,"buffer-shims":45,"core-util-is":49,"events":83,"inherits":95,"isarray":97,"process-nextick-args":111,"string_decoder/":128,"util":19}],124:[function(require,module,exports){
62622 // a transform stream is a readable/writable stream where you do
62623 // something with the data. Sometimes it's called a "filter",
62624 // but that's not a great name for it, since that implies a thing where
62625 // some bits pass through, and others are simply ignored. (That would
62626 // be a valid example of a transform, of course.)
62627 //
62628 // While the output is causally related to the input, it's not a
62629 // necessarily symmetric or synchronous transformation. For example,
62630 // a zlib stream might take multiple plain-text writes(), and then
62631 // emit a single compressed chunk some time in the future.
62632 //
62633 // Here's how this works:
62634 //
62635 // The Transform stream has all the aspects of the readable and writable
62636 // stream classes. When you write(chunk), that calls _write(chunk,cb)
62637 // internally, and returns false if there's a lot of pending writes
62638 // buffered up. When you call read(), that calls _read(n) until
62639 // there's enough pending readable data buffered up.
62640 //
62641 // In a transform stream, the written data is placed in a buffer. When
62642 // _read(n) is called, it transforms the queued up data, calling the
62643 // buffered _write cb's as it consumes chunks. If consuming a single
62644 // written chunk would result in multiple output chunks, then the first
62645 // outputted bit calls the readcb, and subsequent chunks just go into
62646 // the read buffer, and will cause it to emit 'readable' if necessary.
62647 //
62648 // This way, back-pressure is actually determined by the reading side,
62649 // since _read has to be called to start processing a new chunk. However,
62650 // a pathological inflate type of transform can cause excessive buffering
62651 // here. For example, imagine a stream where every byte of input is
62652 // interpreted as an integer from 0-255, and then results in that many
62653 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
62654 // 1kb of data being output. In this case, you could write a very small
62655 // amount of input, and end up with a very large amount of output. In
62656 // such a pathological inflating mechanism, there'd be no way to tell
62657 // the system to stop doing the transform. A single 4MB write could
62658 // cause the system to run out of memory.
62659 //
62660 // However, even in such a pathological case, only a single written chunk
62661 // would be consumed, and then the rest would wait (un-transformed) until
62662 // the results of the previous transformed chunk were consumed.
62663
62664 'use strict';
62665
62666 module.exports = Transform;
62667
62668 var Duplex = require('./_stream_duplex');
62669
62670 /*<replacement>*/
62671 var util = require('core-util-is');
62672 util.inherits = require('inherits');
62673 /*</replacement>*/
62674
62675 util.inherits(Transform, Duplex);
62676
62677 function TransformState(stream) {
62678 this.afterTransform = function (er, data) {
62679 return afterTransform(stream, er, data);
62680 };
62681
62682 this.needTransform = false;
62683 this.transforming = false;
62684 this.writecb = null;
62685 this.writechunk = null;
62686 this.writeencoding = null;
62687 }
62688
62689 function afterTransform(stream, er, data) {
62690 var ts = stream._transformState;
62691 ts.transforming = false;
62692
62693 var cb = ts.writecb;
62694
62695 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
62696
62697 ts.writechunk = null;
62698 ts.writecb = null;
62699
62700 if (data !== null && data !== undefined) stream.push(data);
62701
62702 cb(er);
62703
62704 var rs = stream._readableState;
62705 rs.reading = false;
62706 if (rs.needReadable || rs.length < rs.highWaterMark) {
62707 stream._read(rs.highWaterMark);
62708 }
62709 }
62710
62711 function Transform(options) {
62712 if (!(this instanceof Transform)) return new Transform(options);
62713
62714 Duplex.call(this, options);
62715
62716 this._transformState = new TransformState(this);
62717
62718 var stream = this;
62719
62720 // start out asking for a readable event once data is transformed.
62721 this._readableState.needReadable = true;
62722
62723 // we have implemented the _read method, and done the other things
62724 // that Readable wants before the first _read call, so unset the
62725 // sync guard flag.
62726 this._readableState.sync = false;
62727
62728 if (options) {
62729 if (typeof options.transform === 'function') this._transform = options.transform;
62730
62731 if (typeof options.flush === 'function') this._flush = options.flush;
62732 }
62733
62734 // When the writable side finishes, then flush out anything remaining.
62735 this.once('prefinish', function () {
62736 if (typeof this._flush === 'function') this._flush(function (er, data) {
62737 done(stream, er, data);
62738 });else done(stream);
62739 });
62740 }
62741
62742 Transform.prototype.push = function (chunk, encoding) {
62743 this._transformState.needTransform = false;
62744 return Duplex.prototype.push.call(this, chunk, encoding);
62745 };
62746
62747 // This is the part where you do stuff!
62748 // override this function in implementation classes.
62749 // 'chunk' is an input chunk.
62750 //
62751 // Call `push(newChunk)` to pass along transformed output
62752 // to the readable side. You may call 'push' zero or more times.
62753 //
62754 // Call `cb(err)` when you are done with this chunk. If you pass
62755 // an error, then that'll put the hurt on the whole operation. If you
62756 // never call cb(), then you'll never get another chunk.
62757 Transform.prototype._transform = function (chunk, encoding, cb) {
62758 throw new Error('_transform() is not implemented');
62759 };
62760
62761 Transform.prototype._write = function (chunk, encoding, cb) {
62762 var ts = this._transformState;
62763 ts.writecb = cb;
62764 ts.writechunk = chunk;
62765 ts.writeencoding = encoding;
62766 if (!ts.transforming) {
62767 var rs = this._readableState;
62768 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
62769 }
62770 };
62771
62772 // Doesn't matter what the args are here.
62773 // _transform does all the work.
62774 // That we got here means that the readable side wants more data.
62775 Transform.prototype._read = function (n) {
62776 var ts = this._transformState;
62777
62778 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
62779 ts.transforming = true;
62780 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
62781 } else {
62782 // mark that we need a transform, so that any data that comes in
62783 // will get processed, now that we've asked for it.
62784 ts.needTransform = true;
62785 }
62786 };
62787
62788 function done(stream, er, data) {
62789 if (er) return stream.emit('error', er);
62790
62791 if (data !== null && data !== undefined) stream.push(data);
62792
62793 // if there's nothing in the write buffer, then that means
62794 // that nothing more will ever be provided
62795 var ws = stream._writableState;
62796 var ts = stream._transformState;
62797
62798 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
62799
62800 if (ts.transforming) throw new Error('Calling transform done when still transforming');
62801
62802 return stream.push(null);
62803 }
62804 },{"./_stream_duplex":121,"core-util-is":49,"inherits":95}],125:[function(require,module,exports){
62805 (function (process){
62806 // A bit simpler than readable streams.
62807 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
62808 // the drain event emission and buffering.
62809
62810 'use strict';
62811
62812 module.exports = Writable;
62813
62814 /*<replacement>*/
62815 var processNextTick = require('process-nextick-args');
62816 /*</replacement>*/
62817
62818 /*<replacement>*/
62819 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
62820 /*</replacement>*/
62821
62822 /*<replacement>*/
62823 var Duplex;
62824 /*</replacement>*/
62825
62826 Writable.WritableState = WritableState;
62827
62828 /*<replacement>*/
62829 var util = require('core-util-is');
62830 util.inherits = require('inherits');
62831 /*</replacement>*/
62832
62833 /*<replacement>*/
62834 var internalUtil = {
62835 deprecate: require('util-deprecate')
62836 };
62837 /*</replacement>*/
62838
62839 /*<replacement>*/
62840 var Stream = require('./internal/streams/stream');
62841 /*</replacement>*/
62842
62843 var Buffer = require('buffer').Buffer;
62844 /*<replacement>*/
62845 var bufferShim = require('buffer-shims');
62846 /*</replacement>*/
62847
62848 util.inherits(Writable, Stream);
62849
62850 function nop() {}
62851
62852 function WriteReq(chunk, encoding, cb) {
62853 this.chunk = chunk;
62854 this.encoding = encoding;
62855 this.callback = cb;
62856 this.next = null;
62857 }
62858
62859 function WritableState(options, stream) {
62860 Duplex = Duplex || require('./_stream_duplex');
62861
62862 options = options || {};
62863
62864 // object stream flag to indicate whether or not this stream
62865 // contains buffers or objects.
62866 this.objectMode = !!options.objectMode;
62867
62868 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
62869
62870 // the point at which write() starts returning false
62871 // Note: 0 is a valid value, means that we always return false if
62872 // the entire buffer is not flushed immediately on write()
62873 var hwm = options.highWaterMark;
62874 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
62875 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
62876
62877 // cast to ints.
62878 this.highWaterMark = ~~this.highWaterMark;
62879
62880 // drain event flag.
62881 this.needDrain = false;
62882 // at the start of calling end()
62883 this.ending = false;
62884 // when end() has been called, and returned
62885 this.ended = false;
62886 // when 'finish' is emitted
62887 this.finished = false;
62888
62889 // should we decode strings into buffers before passing to _write?
62890 // this is here so that some node-core streams can optimize string
62891 // handling at a lower level.
62892 var noDecode = options.decodeStrings === false;
62893 this.decodeStrings = !noDecode;
62894
62895 // Crypto is kind of old and crusty. Historically, its default string
62896 // encoding is 'binary' so we have to make this configurable.
62897 // Everything else in the universe uses 'utf8', though.
62898 this.defaultEncoding = options.defaultEncoding || 'utf8';
62899
62900 // not an actual buffer we keep track of, but a measurement
62901 // of how much we're waiting to get pushed to some underlying
62902 // socket or file.
62903 this.length = 0;
62904
62905 // a flag to see when we're in the middle of a write.
62906 this.writing = false;
62907
62908 // when true all writes will be buffered until .uncork() call
62909 this.corked = 0;
62910
62911 // a flag to be able to tell if the onwrite cb is called immediately,
62912 // or on a later tick. We set this to true at first, because any
62913 // actions that shouldn't happen until "later" should generally also
62914 // not happen before the first write call.
62915 this.sync = true;
62916
62917 // a flag to know if we're processing previously buffered items, which
62918 // may call the _write() callback in the same tick, so that we don't
62919 // end up in an overlapped onwrite situation.
62920 this.bufferProcessing = false;
62921
62922 // the callback that's passed to _write(chunk,cb)
62923 this.onwrite = function (er) {
62924 onwrite(stream, er);
62925 };
62926
62927 // the callback that the user supplies to write(chunk,encoding,cb)
62928 this.writecb = null;
62929
62930 // the amount that is being written when _write is called.
62931 this.writelen = 0;
62932
62933 this.bufferedRequest = null;
62934 this.lastBufferedRequest = null;
62935
62936 // number of pending user-supplied write callbacks
62937 // this must be 0 before 'finish' can be emitted
62938 this.pendingcb = 0;
62939
62940 // emit prefinish if the only thing we're waiting for is _write cbs
62941 // This is relevant for synchronous Transform streams
62942 this.prefinished = false;
62943
62944 // True if the error was already emitted and should not be thrown again
62945 this.errorEmitted = false;
62946
62947 // count buffered requests
62948 this.bufferedRequestCount = 0;
62949
62950 // allocate the first CorkedRequest, there is always
62951 // one allocated and free to use, and we maintain at most two
62952 this.corkedRequestsFree = new CorkedRequest(this);
62953 }
62954
62955 WritableState.prototype.getBuffer = function getBuffer() {
62956 var current = this.bufferedRequest;
62957 var out = [];
62958 while (current) {
62959 out.push(current);
62960 current = current.next;
62961 }
62962 return out;
62963 };
62964
62965 (function () {
62966 try {
62967 Object.defineProperty(WritableState.prototype, 'buffer', {
62968 get: internalUtil.deprecate(function () {
62969 return this.getBuffer();
62970 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
62971 });
62972 } catch (_) {}
62973 })();
62974
62975 // Test _writableState for inheritance to account for Duplex streams,
62976 // whose prototype chain only points to Readable.
62977 var realHasInstance;
62978 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
62979 realHasInstance = Function.prototype[Symbol.hasInstance];
62980 Object.defineProperty(Writable, Symbol.hasInstance, {
62981 value: function (object) {
62982 if (realHasInstance.call(this, object)) return true;
62983
62984 return object && object._writableState instanceof WritableState;
62985 }
62986 });
62987 } else {
62988 realHasInstance = function (object) {
62989 return object instanceof this;
62990 };
62991 }
62992
62993 function Writable(options) {
62994 Duplex = Duplex || require('./_stream_duplex');
62995
62996 // Writable ctor is applied to Duplexes, too.
62997 // `realHasInstance` is necessary because using plain `instanceof`
62998 // would return false, as no `_writableState` property is attached.
62999
63000 // Trying to use the custom `instanceof` for Writable here will also break the
63001 // Node.js LazyTransform implementation, which has a non-trivial getter for
63002 // `_writableState` that would lead to infinite recursion.
63003 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
63004 return new Writable(options);
63005 }
63006
63007 this._writableState = new WritableState(options, this);
63008
63009 // legacy.
63010 this.writable = true;
63011
63012 if (options) {
63013 if (typeof options.write === 'function') this._write = options.write;
63014
63015 if (typeof options.writev === 'function') this._writev = options.writev;
63016 }
63017
63018 Stream.call(this);
63019 }
63020
63021 // Otherwise people can pipe Writable streams, which is just wrong.
63022 Writable.prototype.pipe = function () {
63023 this.emit('error', new Error('Cannot pipe, not readable'));
63024 };
63025
63026 function writeAfterEnd(stream, cb) {
63027 var er = new Error('write after end');
63028 // TODO: defer error events consistently everywhere, not just the cb
63029 stream.emit('error', er);
63030 processNextTick(cb, er);
63031 }
63032
63033 // Checks that a user-supplied chunk is valid, especially for the particular
63034 // mode the stream is in. Currently this means that `null` is never accepted
63035 // and undefined/non-string values are only allowed in object mode.
63036 function validChunk(stream, state, chunk, cb) {
63037 var valid = true;
63038 var er = false;
63039
63040 if (chunk === null) {
63041 er = new TypeError('May not write null values to stream');
63042 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
63043 er = new TypeError('Invalid non-string/buffer chunk');
63044 }
63045 if (er) {
63046 stream.emit('error', er);
63047 processNextTick(cb, er);
63048 valid = false;
63049 }
63050 return valid;
63051 }
63052
63053 Writable.prototype.write = function (chunk, encoding, cb) {
63054 var state = this._writableState;
63055 var ret = false;
63056 var isBuf = Buffer.isBuffer(chunk);
63057
63058 if (typeof encoding === 'function') {
63059 cb = encoding;
63060 encoding = null;
63061 }
63062
63063 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
63064
63065 if (typeof cb !== 'function') cb = nop;
63066
63067 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
63068 state.pendingcb++;
63069 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
63070 }
63071
63072 return ret;
63073 };
63074
63075 Writable.prototype.cork = function () {
63076 var state = this._writableState;
63077
63078 state.corked++;
63079 };
63080
63081 Writable.prototype.uncork = function () {
63082 var state = this._writableState;
63083
63084 if (state.corked) {
63085 state.corked--;
63086
63087 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
63088 }
63089 };
63090
63091 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
63092 // node::ParseEncoding() requires lower case.
63093 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
63094 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
63095 this._writableState.defaultEncoding = encoding;
63096 return this;
63097 };
63098
63099 function decodeChunk(state, chunk, encoding) {
63100 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
63101 chunk = bufferShim.from(chunk, encoding);
63102 }
63103 return chunk;
63104 }
63105
63106 // if we're already writing something, then just put this
63107 // in the queue, and wait our turn. Otherwise, call _write
63108 // If we return false, then we need a drain event, so set that flag.
63109 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
63110 if (!isBuf) {
63111 chunk = decodeChunk(state, chunk, encoding);
63112 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
63113 }
63114 var len = state.objectMode ? 1 : chunk.length;
63115
63116 state.length += len;
63117
63118 var ret = state.length < state.highWaterMark;
63119 // we must ensure that previous needDrain will not be reset to false.
63120 if (!ret) state.needDrain = true;
63121
63122 if (state.writing || state.corked) {
63123 var last = state.lastBufferedRequest;
63124 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
63125 if (last) {
63126 last.next = state.lastBufferedRequest;
63127 } else {
63128 state.bufferedRequest = state.lastBufferedRequest;
63129 }
63130 state.bufferedRequestCount += 1;
63131 } else {
63132 doWrite(stream, state, false, len, chunk, encoding, cb);
63133 }
63134
63135 return ret;
63136 }
63137
63138 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
63139 state.writelen = len;
63140 state.writecb = cb;
63141 state.writing = true;
63142 state.sync = true;
63143 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
63144 state.sync = false;
63145 }
63146
63147 function onwriteError(stream, state, sync, er, cb) {
63148 --state.pendingcb;
63149 if (sync) processNextTick(cb, er);else cb(er);
63150
63151 stream._writableState.errorEmitted = true;
63152 stream.emit('error', er);
63153 }
63154
63155 function onwriteStateUpdate(state) {
63156 state.writing = false;
63157 state.writecb = null;
63158 state.length -= state.writelen;
63159 state.writelen = 0;
63160 }
63161
63162 function onwrite(stream, er) {
63163 var state = stream._writableState;
63164 var sync = state.sync;
63165 var cb = state.writecb;
63166
63167 onwriteStateUpdate(state);
63168
63169 if (er) onwriteError(stream, state, sync, er, cb);else {
63170 // Check if we're actually ready to finish, but don't emit yet
63171 var finished = needFinish(state);
63172
63173 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
63174 clearBuffer(stream, state);
63175 }
63176
63177 if (sync) {
63178 /*<replacement>*/
63179 asyncWrite(afterWrite, stream, state, finished, cb);
63180 /*</replacement>*/
63181 } else {
63182 afterWrite(stream, state, finished, cb);
63183 }
63184 }
63185 }
63186
63187 function afterWrite(stream, state, finished, cb) {
63188 if (!finished) onwriteDrain(stream, state);
63189 state.pendingcb--;
63190 cb();
63191 finishMaybe(stream, state);
63192 }
63193
63194 // Must force callback to be called on nextTick, so that we don't
63195 // emit 'drain' before the write() consumer gets the 'false' return
63196 // value, and has a chance to attach a 'drain' listener.
63197 function onwriteDrain(stream, state) {
63198 if (state.length === 0 && state.needDrain) {
63199 state.needDrain = false;
63200 stream.emit('drain');
63201 }
63202 }
63203
63204 // if there's something in the buffer waiting, then process it
63205 function clearBuffer(stream, state) {
63206 state.bufferProcessing = true;
63207 var entry = state.bufferedRequest;
63208
63209 if (stream._writev && entry && entry.next) {
63210 // Fast case, write everything using _writev()
63211 var l = state.bufferedRequestCount;
63212 var buffer = new Array(l);
63213 var holder = state.corkedRequestsFree;
63214 holder.entry = entry;
63215
63216 var count = 0;
63217 while (entry) {
63218 buffer[count] = entry;
63219 entry = entry.next;
63220 count += 1;
63221 }
63222
63223 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
63224
63225 // doWrite is almost always async, defer these to save a bit of time
63226 // as the hot path ends with doWrite
63227 state.pendingcb++;
63228 state.lastBufferedRequest = null;
63229 if (holder.next) {
63230 state.corkedRequestsFree = holder.next;
63231 holder.next = null;
63232 } else {
63233 state.corkedRequestsFree = new CorkedRequest(state);
63234 }
63235 } else {
63236 // Slow case, write chunks one-by-one
63237 while (entry) {
63238 var chunk = entry.chunk;
63239 var encoding = entry.encoding;
63240 var cb = entry.callback;
63241 var len = state.objectMode ? 1 : chunk.length;
63242
63243 doWrite(stream, state, false, len, chunk, encoding, cb);
63244 entry = entry.next;
63245 // if we didn't call the onwrite immediately, then
63246 // it means that we need to wait until it does.
63247 // also, that means that the chunk and cb are currently
63248 // being processed, so move the buffer counter past them.
63249 if (state.writing) {
63250 break;
63251 }
63252 }
63253
63254 if (entry === null) state.lastBufferedRequest = null;
63255 }
63256
63257 state.bufferedRequestCount = 0;
63258 state.bufferedRequest = entry;
63259 state.bufferProcessing = false;
63260 }
63261
63262 Writable.prototype._write = function (chunk, encoding, cb) {
63263 cb(new Error('_write() is not implemented'));
63264 };
63265
63266 Writable.prototype._writev = null;
63267
63268 Writable.prototype.end = function (chunk, encoding, cb) {
63269 var state = this._writableState;
63270
63271 if (typeof chunk === 'function') {
63272 cb = chunk;
63273 chunk = null;
63274 encoding = null;
63275 } else if (typeof encoding === 'function') {
63276 cb = encoding;
63277 encoding = null;
63278 }
63279
63280 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
63281
63282 // .end() fully uncorks
63283 if (state.corked) {
63284 state.corked = 1;
63285 this.uncork();
63286 }
63287
63288 // ignore unnecessary end() calls.
63289 if (!state.ending && !state.finished) endWritable(this, state, cb);
63290 };
63291
63292 function needFinish(state) {
63293 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
63294 }
63295
63296 function prefinish(stream, state) {
63297 if (!state.prefinished) {
63298 state.prefinished = true;
63299 stream.emit('prefinish');
63300 }
63301 }
63302
63303 function finishMaybe(stream, state) {
63304 var need = needFinish(state);
63305 if (need) {
63306 if (state.pendingcb === 0) {
63307 prefinish(stream, state);
63308 state.finished = true;
63309 stream.emit('finish');
63310 } else {
63311 prefinish(stream, state);
63312 }
63313 }
63314 return need;
63315 }
63316
63317 function endWritable(stream, state, cb) {
63318 state.ending = true;
63319 finishMaybe(stream, state);
63320 if (cb) {
63321 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
63322 }
63323 state.ended = true;
63324 stream.writable = false;
63325 }
63326
63327 // It seems a linked list but it is not
63328 // there will be only 2 of these for each stream
63329 function CorkedRequest(state) {
63330 var _this = this;
63331
63332 this.next = null;
63333 this.entry = null;
63334 this.finish = function (err) {
63335 var entry = _this.entry;
63336 _this.entry = null;
63337 while (entry) {
63338 var cb = entry.callback;
63339 state.pendingcb--;
63340 cb(err);
63341 entry = entry.next;
63342 }
63343 if (state.corkedRequestsFree) {
63344 state.corkedRequestsFree.next = _this;
63345 } else {
63346 state.corkedRequestsFree = _this;
63347 }
63348 };
63349 }
63350 }).call(this,require('_process'))
63351 },{"./_stream_duplex":121,"./internal/streams/stream":127,"_process":112,"buffer":47,"buffer-shims":45,"core-util-is":49,"inherits":95,"process-nextick-args":111,"util-deprecate":145}],126:[function(require,module,exports){
63352 'use strict';
63353
63354 var Buffer = require('buffer').Buffer;
63355 /*<replacement>*/
63356 var bufferShim = require('buffer-shims');
63357 /*</replacement>*/
63358
63359 module.exports = BufferList;
63360
63361 function BufferList() {
63362 this.head = null;
63363 this.tail = null;
63364 this.length = 0;
63365 }
63366
63367 BufferList.prototype.push = function (v) {
63368 var entry = { data: v, next: null };
63369 if (this.length > 0) this.tail.next = entry;else this.head = entry;
63370 this.tail = entry;
63371 ++this.length;
63372 };
63373
63374 BufferList.prototype.unshift = function (v) {
63375 var entry = { data: v, next: this.head };
63376 if (this.length === 0) this.tail = entry;
63377 this.head = entry;
63378 ++this.length;
63379 };
63380
63381 BufferList.prototype.shift = function () {
63382 if (this.length === 0) return;
63383 var ret = this.head.data;
63384 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
63385 --this.length;
63386 return ret;
63387 };
63388
63389 BufferList.prototype.clear = function () {
63390 this.head = this.tail = null;
63391 this.length = 0;
63392 };
63393
63394 BufferList.prototype.join = function (s) {
63395 if (this.length === 0) return '';
63396 var p = this.head;
63397 var ret = '' + p.data;
63398 while (p = p.next) {
63399 ret += s + p.data;
63400 }return ret;
63401 };
63402
63403 BufferList.prototype.concat = function (n) {
63404 if (this.length === 0) return bufferShim.alloc(0);
63405 if (this.length === 1) return this.head.data;
63406 var ret = bufferShim.allocUnsafe(n >>> 0);
63407 var p = this.head;
63408 var i = 0;
63409 while (p) {
63410 p.data.copy(ret, i);
63411 i += p.data.length;
63412 p = p.next;
63413 }
63414 return ret;
63415 };
63416 },{"buffer":47,"buffer-shims":45}],127:[function(require,module,exports){
63417 module.exports = require('events').EventEmitter;
63418
63419 },{"events":83}],128:[function(require,module,exports){
63420 'use strict';
63421
63422 var Buffer = require('safe-buffer').Buffer;
63423
63424 var isEncoding = Buffer.isEncoding || function (encoding) {
63425 encoding = '' + encoding;
63426 switch (encoding && encoding.toLowerCase()) {
63427 case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
63428 return true;
63429 default:
63430 return false;
63431 }
63432 };
63433
63434 function _normalizeEncoding(enc) {
63435 if (!enc) return 'utf8';
63436 var retried;
63437 while (true) {
63438 switch (enc) {
63439 case 'utf8':
63440 case 'utf-8':
63441 return 'utf8';
63442 case 'ucs2':
63443 case 'ucs-2':
63444 case 'utf16le':
63445 case 'utf-16le':
63446 return 'utf16le';
63447 case 'latin1':
63448 case 'binary':
63449 return 'latin1';
63450 case 'base64':
63451 case 'ascii':
63452 case 'hex':
63453 return enc;
63454 default:
63455 if (retried) return; // undefined
63456 enc = ('' + enc).toLowerCase();
63457 retried = true;
63458 }
63459 }
63460 };
63461
63462 // Do not cache `Buffer.isEncoding` when checking encoding names as some
63463 // modules monkey-patch it to support additional encodings
63464 function normalizeEncoding(enc) {
63465 var nenc = _normalizeEncoding(enc);
63466 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
63467 return nenc || enc;
63468 }
63469
63470 // StringDecoder provides an interface for efficiently splitting a series of
63471 // buffers into a series of JS strings without breaking apart multi-byte
63472 // characters.
63473 exports.StringDecoder = StringDecoder;
63474 function StringDecoder(encoding) {
63475 this.encoding = normalizeEncoding(encoding);
63476 var nb;
63477 switch (this.encoding) {
63478 case 'utf16le':
63479 this.text = utf16Text;
63480 this.end = utf16End;
63481 nb = 4;
63482 break;
63483 case 'utf8':
63484 this.fillLast = utf8FillLast;
63485 nb = 4;
63486 break;
63487 case 'base64':
63488 this.text = base64Text;
63489 this.end = base64End;
63490 nb = 3;
63491 break;
63492 default:
63493 this.write = simpleWrite;
63494 this.end = simpleEnd;
63495 return;
63496 }
63497 this.lastNeed = 0;
63498 this.lastTotal = 0;
63499 this.lastChar = Buffer.allocUnsafe(nb);
63500 }
63501
63502 StringDecoder.prototype.write = function (buf) {
63503 if (buf.length === 0) return '';
63504 var r;
63505 var i;
63506 if (this.lastNeed) {
63507 r = this.fillLast(buf);
63508 if (r === undefined) return '';
63509 i = this.lastNeed;
63510 this.lastNeed = 0;
63511 } else {
63512 i = 0;
63513 }
63514 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
63515 return r || '';
63516 };
63517
63518 StringDecoder.prototype.end = utf8End;
63519
63520 // Returns only complete characters in a Buffer
63521 StringDecoder.prototype.text = utf8Text;
63522
63523 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
63524 StringDecoder.prototype.fillLast = function (buf) {
63525 if (this.lastNeed <= buf.length) {
63526 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
63527 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
63528 }
63529 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
63530 this.lastNeed -= buf.length;
63531 };
63532
63533 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
63534 // continuation byte.
63535 function utf8CheckByte(byte) {
63536 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
63537 return -1;
63538 }
63539
63540 // Checks at most 3 bytes at the end of a Buffer in order to detect an
63541 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
63542 // needed to complete the UTF-8 character (if applicable) are returned.
63543 function utf8CheckIncomplete(self, buf, i) {
63544 var j = buf.length - 1;
63545 if (j < i) return 0;
63546 var nb = utf8CheckByte(buf[j]);
63547 if (nb >= 0) {
63548 if (nb > 0) self.lastNeed = nb - 1;
63549 return nb;
63550 }
63551 if (--j < i) return 0;
63552 nb = utf8CheckByte(buf[j]);
63553 if (nb >= 0) {
63554 if (nb > 0) self.lastNeed = nb - 2;
63555 return nb;
63556 }
63557 if (--j < i) return 0;
63558 nb = utf8CheckByte(buf[j]);
63559 if (nb >= 0) {
63560 if (nb > 0) {
63561 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
63562 }
63563 return nb;
63564 }
63565 return 0;
63566 }
63567
63568 // Validates as many continuation bytes for a multi-byte UTF-8 character as
63569 // needed or are available. If we see a non-continuation byte where we expect
63570 // one, we "replace" the validated continuation bytes we've seen so far with
63571 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
63572 // behavior. The continuation byte check is included three times in the case
63573 // where all of the continuation bytes for a character exist in the same buffer.
63574 // It is also done this way as a slight performance increase instead of using a
63575 // loop.
63576 function utf8CheckExtraBytes(self, buf, p) {
63577 if ((buf[0] & 0xC0) !== 0x80) {
63578 self.lastNeed = 0;
63579 return '\ufffd'.repeat(p);
63580 }
63581 if (self.lastNeed > 1 && buf.length > 1) {
63582 if ((buf[1] & 0xC0) !== 0x80) {
63583 self.lastNeed = 1;
63584 return '\ufffd'.repeat(p + 1);
63585 }
63586 if (self.lastNeed > 2 && buf.length > 2) {
63587 if ((buf[2] & 0xC0) !== 0x80) {
63588 self.lastNeed = 2;
63589 return '\ufffd'.repeat(p + 2);
63590 }
63591 }
63592 }
63593 }
63594
63595 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
63596 function utf8FillLast(buf) {
63597 var p = this.lastTotal - this.lastNeed;
63598 var r = utf8CheckExtraBytes(this, buf, p);
63599 if (r !== undefined) return r;
63600 if (this.lastNeed <= buf.length) {
63601 buf.copy(this.lastChar, p, 0, this.lastNeed);
63602 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
63603 }
63604 buf.copy(this.lastChar, p, 0, buf.length);
63605 this.lastNeed -= buf.length;
63606 }
63607
63608 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
63609 // partial character, the character's bytes are buffered until the required
63610 // number of bytes are available.
63611 function utf8Text(buf, i) {
63612 var total = utf8CheckIncomplete(this, buf, i);
63613 if (!this.lastNeed) return buf.toString('utf8', i);
63614 this.lastTotal = total;
63615 var end = buf.length - (total - this.lastNeed);
63616 buf.copy(this.lastChar, 0, end);
63617 return buf.toString('utf8', i, end);
63618 }
63619
63620 // For UTF-8, a replacement character for each buffered byte of a (partial)
63621 // character needs to be added to the output.
63622 function utf8End(buf) {
63623 var r = buf && buf.length ? this.write(buf) : '';
63624 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
63625 return r;
63626 }
63627
63628 // UTF-16LE typically needs two bytes per character, but even if we have an even
63629 // number of bytes available, we need to check if we end on a leading/high
63630 // surrogate. In that case, we need to wait for the next two bytes in order to
63631 // decode the last character properly.
63632 function utf16Text(buf, i) {
63633 if ((buf.length - i) % 2 === 0) {
63634 var r = buf.toString('utf16le', i);
63635 if (r) {
63636 var c = r.charCodeAt(r.length - 1);
63637 if (c >= 0xD800 && c <= 0xDBFF) {
63638 this.lastNeed = 2;
63639 this.lastTotal = 4;
63640 this.lastChar[0] = buf[buf.length - 2];
63641 this.lastChar[1] = buf[buf.length - 1];
63642 return r.slice(0, -1);
63643 }
63644 }
63645 return r;
63646 }
63647 this.lastNeed = 1;
63648 this.lastTotal = 2;
63649 this.lastChar[0] = buf[buf.length - 1];
63650 return buf.toString('utf16le', i, buf.length - 1);
63651 }
63652
63653 // For UTF-16LE we do not explicitly append special replacement characters if we
63654 // end on a partial character, we simply let v8 handle that.
63655 function utf16End(buf) {
63656 var r = buf && buf.length ? this.write(buf) : '';
63657 if (this.lastNeed) {
63658 var end = this.lastTotal - this.lastNeed;
63659 return r + this.lastChar.toString('utf16le', 0, end);
63660 }
63661 return r;
63662 }
63663
63664 function base64Text(buf, i) {
63665 var n = (buf.length - i) % 3;
63666 if (n === 0) return buf.toString('base64', i);
63667 this.lastNeed = 3 - n;
63668 this.lastTotal = 3;
63669 if (n === 1) {
63670 this.lastChar[0] = buf[buf.length - 1];
63671 } else {
63672 this.lastChar[0] = buf[buf.length - 2];
63673 this.lastChar[1] = buf[buf.length - 1];
63674 }
63675 return buf.toString('base64', i, buf.length - n);
63676 }
63677
63678 function base64End(buf) {
63679 var r = buf && buf.length ? this.write(buf) : '';
63680 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
63681 return r;
63682 }
63683
63684 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
63685 function simpleWrite(buf) {
63686 return buf.toString(this.encoding);
63687 }
63688
63689 function simpleEnd(buf) {
63690 return buf && buf.length ? this.write(buf) : '';
63691 }
63692 },{"safe-buffer":134}],129:[function(require,module,exports){
63693 module.exports = require('./readable').PassThrough
63694
63695 },{"./readable":130}],130:[function(require,module,exports){
63696 exports = module.exports = require('./lib/_stream_readable.js');
63697 exports.Stream = exports;
63698 exports.Readable = exports;
63699 exports.Writable = require('./lib/_stream_writable.js');
63700 exports.Duplex = require('./lib/_stream_duplex.js');
63701 exports.Transform = require('./lib/_stream_transform.js');
63702 exports.PassThrough = require('./lib/_stream_passthrough.js');
63703
63704 },{"./lib/_stream_duplex.js":121,"./lib/_stream_passthrough.js":122,"./lib/_stream_readable.js":123,"./lib/_stream_transform.js":124,"./lib/_stream_writable.js":125}],131:[function(require,module,exports){
63705 module.exports = require('./readable').Transform
63706
63707 },{"./readable":130}],132:[function(require,module,exports){
63708 module.exports = require('./lib/_stream_writable.js');
63709
63710 },{"./lib/_stream_writable.js":125}],133:[function(require,module,exports){
63711 (function (Buffer){
63712 'use strict'
63713 var inherits = require('inherits')
63714 var HashBase = require('hash-base')
63715
63716 function RIPEMD160 () {
63717 HashBase.call(this, 64)
63718
63719 // state
63720 this._a = 0x67452301
63721 this._b = 0xefcdab89
63722 this._c = 0x98badcfe
63723 this._d = 0x10325476
63724 this._e = 0xc3d2e1f0
63725 }
63726
63727 inherits(RIPEMD160, HashBase)
63728
63729 RIPEMD160.prototype._update = function () {
63730 var m = new Array(16)
63731 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
63732
63733 var al = this._a
63734 var bl = this._b
63735 var cl = this._c
63736 var dl = this._d
63737 var el = this._e
63738
63739 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
63740 // K = 0x00000000
63741 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
63742 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
63743 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
63744 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
63745 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
63746 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
63747 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
63748 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
63749 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
63750 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
63751 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
63752 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
63753 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
63754 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
63755 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
63756 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
63757 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
63758
63759 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
63760 // K = 0x5a827999
63761 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
63762 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
63763 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
63764 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
63765 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
63766 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
63767 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
63768 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
63769 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
63770 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
63771 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
63772 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
63773 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
63774 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
63775 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
63776 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
63777 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
63778
63779 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
63780 // K = 0x6ed9eba1
63781 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
63782 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
63783 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
63784 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
63785 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
63786 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
63787 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
63788 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
63789 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
63790 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
63791 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
63792 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
63793 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
63794 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
63795 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
63796 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
63797 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
63798
63799 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
63800 // K = 0x8f1bbcdc
63801 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
63802 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
63803 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
63804 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
63805 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
63806 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
63807 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
63808 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
63809 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
63810 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
63811 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
63812 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
63813 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
63814 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
63815 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
63816 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
63817 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
63818
63819 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
63820 // K = 0xa953fd4e
63821 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
63822 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
63823 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
63824 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
63825 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
63826 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
63827 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
63828 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
63829 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
63830 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
63831 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
63832 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
63833 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
63834 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
63835 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
63836 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
63837 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
63838
63839 var ar = this._a
63840 var br = this._b
63841 var cr = this._c
63842 var dr = this._d
63843 var er = this._e
63844
63845 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
63846 // K' = 0x50a28be6
63847 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
63848 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
63849 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
63850 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
63851 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
63852 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
63853 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
63854 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
63855 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
63856 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
63857 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
63858 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
63859 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
63860 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
63861 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
63862 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
63863 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
63864
63865 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
63866 // K' = 0x5c4dd124
63867 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
63868 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
63869 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
63870 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
63871 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
63872 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
63873 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
63874 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
63875 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
63876 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
63877 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
63878 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
63879 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
63880 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
63881 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
63882 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
63883 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
63884
63885 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
63886 // K' = 0x6d703ef3
63887 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
63888 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
63889 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
63890 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
63891 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
63892 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
63893 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
63894 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
63895 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
63896 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
63897 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
63898 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
63899 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
63900 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
63901 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
63902 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
63903 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
63904
63905 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
63906 // K' = 0x7a6d76e9
63907 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
63908 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
63909 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
63910 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
63911 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
63912 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
63913 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
63914 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
63915 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
63916 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
63917 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
63918 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
63919 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
63920 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
63921 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
63922 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
63923 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
63924
63925 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
63926 // K' = 0x00000000
63927 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
63928 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
63929 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
63930 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
63931 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
63932 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
63933 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
63934 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
63935 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
63936 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
63937 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
63938 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
63939 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
63940 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
63941 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
63942 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
63943 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
63944
63945 // change state
63946 var t = (this._b + cl + dr) | 0
63947 this._b = (this._c + dl + er) | 0
63948 this._c = (this._d + el + ar) | 0
63949 this._d = (this._e + al + br) | 0
63950 this._e = (this._a + bl + cr) | 0
63951 this._a = t
63952 }
63953
63954 RIPEMD160.prototype._digest = function () {
63955 // create padding and handle blocks
63956 this._block[this._blockOffset++] = 0x80
63957 if (this._blockOffset > 56) {
63958 this._block.fill(0, this._blockOffset, 64)
63959 this._update()
63960 this._blockOffset = 0
63961 }
63962
63963 this._block.fill(0, this._blockOffset, 56)
63964 this._block.writeUInt32LE(this._length[0], 56)
63965 this._block.writeUInt32LE(this._length[1], 60)
63966 this._update()
63967
63968 // produce result
63969 var buffer = new Buffer(20)
63970 buffer.writeInt32LE(this._a, 0)
63971 buffer.writeInt32LE(this._b, 4)
63972 buffer.writeInt32LE(this._c, 8)
63973 buffer.writeInt32LE(this._d, 12)
63974 buffer.writeInt32LE(this._e, 16)
63975 return buffer
63976 }
63977
63978 function rotl (x, n) {
63979 return (x << n) | (x >>> (32 - n))
63980 }
63981
63982 function fn1 (a, b, c, d, e, m, k, s) {
63983 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
63984 }
63985
63986 function fn2 (a, b, c, d, e, m, k, s) {
63987 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
63988 }
63989
63990 function fn3 (a, b, c, d, e, m, k, s) {
63991 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
63992 }
63993
63994 function fn4 (a, b, c, d, e, m, k, s) {
63995 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
63996 }
63997
63998 function fn5 (a, b, c, d, e, m, k, s) {
63999 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
64000 }
64001
64002 module.exports = RIPEMD160
64003
64004 }).call(this,require("buffer").Buffer)
64005 },{"buffer":47,"hash-base":85,"inherits":95}],134:[function(require,module,exports){
64006 module.exports = require('buffer')
64007
64008 },{"buffer":47}],135:[function(require,module,exports){
64009 (function (Buffer){
64010 // prototype class for hash functions
64011 function Hash (blockSize, finalSize) {
64012 this._block = new Buffer(blockSize)
64013 this._finalSize = finalSize
64014 this._blockSize = blockSize
64015 this._len = 0
64016 this._s = 0
64017 }
64018
64019 Hash.prototype.update = function (data, enc) {
64020 if (typeof data === 'string') {
64021 enc = enc || 'utf8'
64022 data = new Buffer(data, enc)
64023 }
64024
64025 var l = this._len += data.length
64026 var s = this._s || 0
64027 var f = 0
64028 var buffer = this._block
64029
64030 while (s < l) {
64031 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
64032 var ch = (t - f)
64033
64034 for (var i = 0; i < ch; i++) {
64035 buffer[(s % this._blockSize) + i] = data[i + f]
64036 }
64037
64038 s += ch
64039 f += ch
64040
64041 if ((s % this._blockSize) === 0) {
64042 this._update(buffer)
64043 }
64044 }
64045 this._s = s
64046
64047 return this
64048 }
64049
64050 Hash.prototype.digest = function (enc) {
64051 // Suppose the length of the message M, in bits, is l
64052 var l = this._len * 8
64053
64054 // Append the bit 1 to the end of the message
64055 this._block[this._len % this._blockSize] = 0x80
64056
64057 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
64058 this._block.fill(0, this._len % this._blockSize + 1)
64059
64060 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
64061 this._update(this._block)
64062 this._block.fill(0)
64063 }
64064
64065 // to this append the block which is equal to the number l written in binary
64066 // TODO: handle case where l is > Math.pow(2, 29)
64067 this._block.writeInt32BE(l, this._blockSize - 4)
64068
64069 var hash = this._update(this._block) || this._hash()
64070
64071 return enc ? hash.toString(enc) : hash
64072 }
64073
64074 Hash.prototype._update = function () {
64075 throw new Error('_update must be implemented by subclass')
64076 }
64077
64078 module.exports = Hash
64079
64080 }).call(this,require("buffer").Buffer)
64081 },{"buffer":47}],136:[function(require,module,exports){
64082 var exports = module.exports = function SHA (algorithm) {
64083 algorithm = algorithm.toLowerCase()
64084
64085 var Algorithm = exports[algorithm]
64086 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
64087
64088 return new Algorithm()
64089 }
64090
64091 exports.sha = require('./sha')
64092 exports.sha1 = require('./sha1')
64093 exports.sha224 = require('./sha224')
64094 exports.sha256 = require('./sha256')
64095 exports.sha384 = require('./sha384')
64096 exports.sha512 = require('./sha512')
64097
64098 },{"./sha":137,"./sha1":138,"./sha224":139,"./sha256":140,"./sha384":141,"./sha512":142}],137:[function(require,module,exports){
64099 (function (Buffer){
64100 /*
64101 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
64102 * in FIPS PUB 180-1
64103 * This source code is derived from sha1.js of the same repository.
64104 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
64105 * operation was added.
64106 */
64107
64108 var inherits = require('inherits')
64109 var Hash = require('./hash')
64110
64111 var K = [
64112 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
64113 ]
64114
64115 var W = new Array(80)
64116
64117 function Sha () {
64118 this.init()
64119 this._w = W
64120
64121 Hash.call(this, 64, 56)
64122 }
64123
64124 inherits(Sha, Hash)
64125
64126 Sha.prototype.init = function () {
64127 this._a = 0x67452301
64128 this._b = 0xefcdab89
64129 this._c = 0x98badcfe
64130 this._d = 0x10325476
64131 this._e = 0xc3d2e1f0
64132
64133 return this
64134 }
64135
64136 function rotl5 (num) {
64137 return (num << 5) | (num >>> 27)
64138 }
64139
64140 function rotl30 (num) {
64141 return (num << 30) | (num >>> 2)
64142 }
64143
64144 function ft (s, b, c, d) {
64145 if (s === 0) return (b & c) | ((~b) & d)
64146 if (s === 2) return (b & c) | (b & d) | (c & d)
64147 return b ^ c ^ d
64148 }
64149
64150 Sha.prototype._update = function (M) {
64151 var W = this._w
64152
64153 var a = this._a | 0
64154 var b = this._b | 0
64155 var c = this._c | 0
64156 var d = this._d | 0
64157 var e = this._e | 0
64158
64159 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
64160 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
64161
64162 for (var j = 0; j < 80; ++j) {
64163 var s = ~~(j / 20)
64164 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
64165
64166 e = d
64167 d = c
64168 c = rotl30(b)
64169 b = a
64170 a = t
64171 }
64172
64173 this._a = (a + this._a) | 0
64174 this._b = (b + this._b) | 0
64175 this._c = (c + this._c) | 0
64176 this._d = (d + this._d) | 0
64177 this._e = (e + this._e) | 0
64178 }
64179
64180 Sha.prototype._hash = function () {
64181 var H = new Buffer(20)
64182
64183 H.writeInt32BE(this._a | 0, 0)
64184 H.writeInt32BE(this._b | 0, 4)
64185 H.writeInt32BE(this._c | 0, 8)
64186 H.writeInt32BE(this._d | 0, 12)
64187 H.writeInt32BE(this._e | 0, 16)
64188
64189 return H
64190 }
64191
64192 module.exports = Sha
64193
64194 }).call(this,require("buffer").Buffer)
64195 },{"./hash":135,"buffer":47,"inherits":95}],138:[function(require,module,exports){
64196 (function (Buffer){
64197 /*
64198 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
64199 * in FIPS PUB 180-1
64200 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
64201 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
64202 * Distributed under the BSD License
64203 * See http://pajhome.org.uk/crypt/md5 for details.
64204 */
64205
64206 var inherits = require('inherits')
64207 var Hash = require('./hash')
64208
64209 var K = [
64210 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
64211 ]
64212
64213 var W = new Array(80)
64214
64215 function Sha1 () {
64216 this.init()
64217 this._w = W
64218
64219 Hash.call(this, 64, 56)
64220 }
64221
64222 inherits(Sha1, Hash)
64223
64224 Sha1.prototype.init = function () {
64225 this._a = 0x67452301
64226 this._b = 0xefcdab89
64227 this._c = 0x98badcfe
64228 this._d = 0x10325476
64229 this._e = 0xc3d2e1f0
64230
64231 return this
64232 }
64233
64234 function rotl1 (num) {
64235 return (num << 1) | (num >>> 31)
64236 }
64237
64238 function rotl5 (num) {
64239 return (num << 5) | (num >>> 27)
64240 }
64241
64242 function rotl30 (num) {
64243 return (num << 30) | (num >>> 2)
64244 }
64245
64246 function ft (s, b, c, d) {
64247 if (s === 0) return (b & c) | ((~b) & d)
64248 if (s === 2) return (b & c) | (b & d) | (c & d)
64249 return b ^ c ^ d
64250 }
64251
64252 Sha1.prototype._update = function (M) {
64253 var W = this._w
64254
64255 var a = this._a | 0
64256 var b = this._b | 0
64257 var c = this._c | 0
64258 var d = this._d | 0
64259 var e = this._e | 0
64260
64261 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
64262 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
64263
64264 for (var j = 0; j < 80; ++j) {
64265 var s = ~~(j / 20)
64266 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
64267
64268 e = d
64269 d = c
64270 c = rotl30(b)
64271 b = a
64272 a = t
64273 }
64274
64275 this._a = (a + this._a) | 0
64276 this._b = (b + this._b) | 0
64277 this._c = (c + this._c) | 0
64278 this._d = (d + this._d) | 0
64279 this._e = (e + this._e) | 0
64280 }
64281
64282 Sha1.prototype._hash = function () {
64283 var H = new Buffer(20)
64284
64285 H.writeInt32BE(this._a | 0, 0)
64286 H.writeInt32BE(this._b | 0, 4)
64287 H.writeInt32BE(this._c | 0, 8)
64288 H.writeInt32BE(this._d | 0, 12)
64289 H.writeInt32BE(this._e | 0, 16)
64290
64291 return H
64292 }
64293
64294 module.exports = Sha1
64295
64296 }).call(this,require("buffer").Buffer)
64297 },{"./hash":135,"buffer":47,"inherits":95}],139:[function(require,module,exports){
64298 (function (Buffer){
64299 /**
64300 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
64301 * in FIPS 180-2
64302 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
64303 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
64304 *
64305 */
64306
64307 var inherits = require('inherits')
64308 var Sha256 = require('./sha256')
64309 var Hash = require('./hash')
64310
64311 var W = new Array(64)
64312
64313 function Sha224 () {
64314 this.init()
64315
64316 this._w = W // new Array(64)
64317
64318 Hash.call(this, 64, 56)
64319 }
64320
64321 inherits(Sha224, Sha256)
64322
64323 Sha224.prototype.init = function () {
64324 this._a = 0xc1059ed8
64325 this._b = 0x367cd507
64326 this._c = 0x3070dd17
64327 this._d = 0xf70e5939
64328 this._e = 0xffc00b31
64329 this._f = 0x68581511
64330 this._g = 0x64f98fa7
64331 this._h = 0xbefa4fa4
64332
64333 return this
64334 }
64335
64336 Sha224.prototype._hash = function () {
64337 var H = new Buffer(28)
64338
64339 H.writeInt32BE(this._a, 0)
64340 H.writeInt32BE(this._b, 4)
64341 H.writeInt32BE(this._c, 8)
64342 H.writeInt32BE(this._d, 12)
64343 H.writeInt32BE(this._e, 16)
64344 H.writeInt32BE(this._f, 20)
64345 H.writeInt32BE(this._g, 24)
64346
64347 return H
64348 }
64349
64350 module.exports = Sha224
64351
64352 }).call(this,require("buffer").Buffer)
64353 },{"./hash":135,"./sha256":140,"buffer":47,"inherits":95}],140:[function(require,module,exports){
64354 (function (Buffer){
64355 /**
64356 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
64357 * in FIPS 180-2
64358 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
64359 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
64360 *
64361 */
64362
64363 var inherits = require('inherits')
64364 var Hash = require('./hash')
64365
64366 var K = [
64367 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
64368 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
64369 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
64370 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
64371 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
64372 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
64373 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
64374 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
64375 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
64376 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
64377 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
64378 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
64379 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
64380 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
64381 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
64382 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
64383 ]
64384
64385 var W = new Array(64)
64386
64387 function Sha256 () {
64388 this.init()
64389
64390 this._w = W // new Array(64)
64391
64392 Hash.call(this, 64, 56)
64393 }
64394
64395 inherits(Sha256, Hash)
64396
64397 Sha256.prototype.init = function () {
64398 this._a = 0x6a09e667
64399 this._b = 0xbb67ae85
64400 this._c = 0x3c6ef372
64401 this._d = 0xa54ff53a
64402 this._e = 0x510e527f
64403 this._f = 0x9b05688c
64404 this._g = 0x1f83d9ab
64405 this._h = 0x5be0cd19
64406
64407 return this
64408 }
64409
64410 function ch (x, y, z) {
64411 return z ^ (x & (y ^ z))
64412 }
64413
64414 function maj (x, y, z) {
64415 return (x & y) | (z & (x | y))
64416 }
64417
64418 function sigma0 (x) {
64419 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
64420 }
64421
64422 function sigma1 (x) {
64423 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
64424 }
64425
64426 function gamma0 (x) {
64427 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
64428 }
64429
64430 function gamma1 (x) {
64431 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
64432 }
64433
64434 Sha256.prototype._update = function (M) {
64435 var W = this._w
64436
64437 var a = this._a | 0
64438 var b = this._b | 0
64439 var c = this._c | 0
64440 var d = this._d | 0
64441 var e = this._e | 0
64442 var f = this._f | 0
64443 var g = this._g | 0
64444 var h = this._h | 0
64445
64446 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
64447 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
64448
64449 for (var j = 0; j < 64; ++j) {
64450 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
64451 var T2 = (sigma0(a) + maj(a, b, c)) | 0
64452
64453 h = g
64454 g = f
64455 f = e
64456 e = (d + T1) | 0
64457 d = c
64458 c = b
64459 b = a
64460 a = (T1 + T2) | 0
64461 }
64462
64463 this._a = (a + this._a) | 0
64464 this._b = (b + this._b) | 0
64465 this._c = (c + this._c) | 0
64466 this._d = (d + this._d) | 0
64467 this._e = (e + this._e) | 0
64468 this._f = (f + this._f) | 0
64469 this._g = (g + this._g) | 0
64470 this._h = (h + this._h) | 0
64471 }
64472
64473 Sha256.prototype._hash = function () {
64474 var H = new Buffer(32)
64475
64476 H.writeInt32BE(this._a, 0)
64477 H.writeInt32BE(this._b, 4)
64478 H.writeInt32BE(this._c, 8)
64479 H.writeInt32BE(this._d, 12)
64480 H.writeInt32BE(this._e, 16)
64481 H.writeInt32BE(this._f, 20)
64482 H.writeInt32BE(this._g, 24)
64483 H.writeInt32BE(this._h, 28)
64484
64485 return H
64486 }
64487
64488 module.exports = Sha256
64489
64490 }).call(this,require("buffer").Buffer)
64491 },{"./hash":135,"buffer":47,"inherits":95}],141:[function(require,module,exports){
64492 (function (Buffer){
64493 var inherits = require('inherits')
64494 var SHA512 = require('./sha512')
64495 var Hash = require('./hash')
64496
64497 var W = new Array(160)
64498
64499 function Sha384 () {
64500 this.init()
64501 this._w = W
64502
64503 Hash.call(this, 128, 112)
64504 }
64505
64506 inherits(Sha384, SHA512)
64507
64508 Sha384.prototype.init = function () {
64509 this._ah = 0xcbbb9d5d
64510 this._bh = 0x629a292a
64511 this._ch = 0x9159015a
64512 this._dh = 0x152fecd8
64513 this._eh = 0x67332667
64514 this._fh = 0x8eb44a87
64515 this._gh = 0xdb0c2e0d
64516 this._hh = 0x47b5481d
64517
64518 this._al = 0xc1059ed8
64519 this._bl = 0x367cd507
64520 this._cl = 0x3070dd17
64521 this._dl = 0xf70e5939
64522 this._el = 0xffc00b31
64523 this._fl = 0x68581511
64524 this._gl = 0x64f98fa7
64525 this._hl = 0xbefa4fa4
64526
64527 return this
64528 }
64529
64530 Sha384.prototype._hash = function () {
64531 var H = new Buffer(48)
64532
64533 function writeInt64BE (h, l, offset) {
64534 H.writeInt32BE(h, offset)
64535 H.writeInt32BE(l, offset + 4)
64536 }
64537
64538 writeInt64BE(this._ah, this._al, 0)
64539 writeInt64BE(this._bh, this._bl, 8)
64540 writeInt64BE(this._ch, this._cl, 16)
64541 writeInt64BE(this._dh, this._dl, 24)
64542 writeInt64BE(this._eh, this._el, 32)
64543 writeInt64BE(this._fh, this._fl, 40)
64544
64545 return H
64546 }
64547
64548 module.exports = Sha384
64549
64550 }).call(this,require("buffer").Buffer)
64551 },{"./hash":135,"./sha512":142,"buffer":47,"inherits":95}],142:[function(require,module,exports){
64552 (function (Buffer){
64553 var inherits = require('inherits')
64554 var Hash = require('./hash')
64555
64556 var K = [
64557 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
64558 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
64559 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
64560 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
64561 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
64562 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
64563 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
64564 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
64565 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
64566 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
64567 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
64568 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
64569 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
64570 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
64571 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
64572 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
64573 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
64574 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
64575 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
64576 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
64577 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
64578 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
64579 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
64580 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
64581 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
64582 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
64583 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
64584 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
64585 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
64586 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
64587 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
64588 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
64589 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
64590 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
64591 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
64592 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
64593 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
64594 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
64595 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
64596 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
64597 ]
64598
64599 var W = new Array(160)
64600
64601 function Sha512 () {
64602 this.init()
64603 this._w = W
64604
64605 Hash.call(this, 128, 112)
64606 }
64607
64608 inherits(Sha512, Hash)
64609
64610 Sha512.prototype.init = function () {
64611 this._ah = 0x6a09e667
64612 this._bh = 0xbb67ae85
64613 this._ch = 0x3c6ef372
64614 this._dh = 0xa54ff53a
64615 this._eh = 0x510e527f
64616 this._fh = 0x9b05688c
64617 this._gh = 0x1f83d9ab
64618 this._hh = 0x5be0cd19
64619
64620 this._al = 0xf3bcc908
64621 this._bl = 0x84caa73b
64622 this._cl = 0xfe94f82b
64623 this._dl = 0x5f1d36f1
64624 this._el = 0xade682d1
64625 this._fl = 0x2b3e6c1f
64626 this._gl = 0xfb41bd6b
64627 this._hl = 0x137e2179
64628
64629 return this
64630 }
64631
64632 function Ch (x, y, z) {
64633 return z ^ (x & (y ^ z))
64634 }
64635
64636 function maj (x, y, z) {
64637 return (x & y) | (z & (x | y))
64638 }
64639
64640 function sigma0 (x, xl) {
64641 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
64642 }
64643
64644 function sigma1 (x, xl) {
64645 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
64646 }
64647
64648 function Gamma0 (x, xl) {
64649 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
64650 }
64651
64652 function Gamma0l (x, xl) {
64653 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
64654 }
64655
64656 function Gamma1 (x, xl) {
64657 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
64658 }
64659
64660 function Gamma1l (x, xl) {
64661 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
64662 }
64663
64664 function getCarry (a, b) {
64665 return (a >>> 0) < (b >>> 0) ? 1 : 0
64666 }
64667
64668 Sha512.prototype._update = function (M) {
64669 var W = this._w
64670
64671 var ah = this._ah | 0
64672 var bh = this._bh | 0
64673 var ch = this._ch | 0
64674 var dh = this._dh | 0
64675 var eh = this._eh | 0
64676 var fh = this._fh | 0
64677 var gh = this._gh | 0
64678 var hh = this._hh | 0
64679
64680 var al = this._al | 0
64681 var bl = this._bl | 0
64682 var cl = this._cl | 0
64683 var dl = this._dl | 0
64684 var el = this._el | 0
64685 var fl = this._fl | 0
64686 var gl = this._gl | 0
64687 var hl = this._hl | 0
64688
64689 for (var i = 0; i < 32; i += 2) {
64690 W[i] = M.readInt32BE(i * 4)
64691 W[i + 1] = M.readInt32BE(i * 4 + 4)
64692 }
64693 for (; i < 160; i += 2) {
64694 var xh = W[i - 15 * 2]
64695 var xl = W[i - 15 * 2 + 1]
64696 var gamma0 = Gamma0(xh, xl)
64697 var gamma0l = Gamma0l(xl, xh)
64698
64699 xh = W[i - 2 * 2]
64700 xl = W[i - 2 * 2 + 1]
64701 var gamma1 = Gamma1(xh, xl)
64702 var gamma1l = Gamma1l(xl, xh)
64703
64704 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
64705 var Wi7h = W[i - 7 * 2]
64706 var Wi7l = W[i - 7 * 2 + 1]
64707
64708 var Wi16h = W[i - 16 * 2]
64709 var Wi16l = W[i - 16 * 2 + 1]
64710
64711 var Wil = (gamma0l + Wi7l) | 0
64712 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
64713 Wil = (Wil + gamma1l) | 0
64714 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
64715 Wil = (Wil + Wi16l) | 0
64716 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
64717
64718 W[i] = Wih
64719 W[i + 1] = Wil
64720 }
64721
64722 for (var j = 0; j < 160; j += 2) {
64723 Wih = W[j]
64724 Wil = W[j + 1]
64725
64726 var majh = maj(ah, bh, ch)
64727 var majl = maj(al, bl, cl)
64728
64729 var sigma0h = sigma0(ah, al)
64730 var sigma0l = sigma0(al, ah)
64731 var sigma1h = sigma1(eh, el)
64732 var sigma1l = sigma1(el, eh)
64733
64734 // t1 = h + sigma1 + ch + K[j] + W[j]
64735 var Kih = K[j]
64736 var Kil = K[j + 1]
64737
64738 var chh = Ch(eh, fh, gh)
64739 var chl = Ch(el, fl, gl)
64740
64741 var t1l = (hl + sigma1l) | 0
64742 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
64743 t1l = (t1l + chl) | 0
64744 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
64745 t1l = (t1l + Kil) | 0
64746 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
64747 t1l = (t1l + Wil) | 0
64748 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
64749
64750 // t2 = sigma0 + maj
64751 var t2l = (sigma0l + majl) | 0
64752 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
64753
64754 hh = gh
64755 hl = gl
64756 gh = fh
64757 gl = fl
64758 fh = eh
64759 fl = el
64760 el = (dl + t1l) | 0
64761 eh = (dh + t1h + getCarry(el, dl)) | 0
64762 dh = ch
64763 dl = cl
64764 ch = bh
64765 cl = bl
64766 bh = ah
64767 bl = al
64768 al = (t1l + t2l) | 0
64769 ah = (t1h + t2h + getCarry(al, t1l)) | 0
64770 }
64771
64772 this._al = (this._al + al) | 0
64773 this._bl = (this._bl + bl) | 0
64774 this._cl = (this._cl + cl) | 0
64775 this._dl = (this._dl + dl) | 0
64776 this._el = (this._el + el) | 0
64777 this._fl = (this._fl + fl) | 0
64778 this._gl = (this._gl + gl) | 0
64779 this._hl = (this._hl + hl) | 0
64780
64781 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
64782 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
64783 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
64784 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
64785 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
64786 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
64787 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
64788 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
64789 }
64790
64791 Sha512.prototype._hash = function () {
64792 var H = new Buffer(64)
64793
64794 function writeInt64BE (h, l, offset) {
64795 H.writeInt32BE(h, offset)
64796 H.writeInt32BE(l, offset + 4)
64797 }
64798
64799 writeInt64BE(this._ah, this._al, 0)
64800 writeInt64BE(this._bh, this._bl, 8)
64801 writeInt64BE(this._ch, this._cl, 16)
64802 writeInt64BE(this._dh, this._dl, 24)
64803 writeInt64BE(this._eh, this._el, 32)
64804 writeInt64BE(this._fh, this._fl, 40)
64805 writeInt64BE(this._gh, this._gl, 48)
64806 writeInt64BE(this._hh, this._hl, 56)
64807
64808 return H
64809 }
64810
64811 module.exports = Sha512
64812
64813 }).call(this,require("buffer").Buffer)
64814 },{"./hash":135,"buffer":47,"inherits":95}],143:[function(require,module,exports){
64815 // Copyright Joyent, Inc. and other Node contributors.
64816 //
64817 // Permission is hereby granted, free of charge, to any person obtaining a
64818 // copy of this software and associated documentation files (the
64819 // "Software"), to deal in the Software without restriction, including
64820 // without limitation the rights to use, copy, modify, merge, publish,
64821 // distribute, sublicense, and/or sell copies of the Software, and to permit
64822 // persons to whom the Software is furnished to do so, subject to the
64823 // following conditions:
64824 //
64825 // The above copyright notice and this permission notice shall be included
64826 // in all copies or substantial portions of the Software.
64827 //
64828 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
64829 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
64830 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
64831 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
64832 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
64833 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
64834 // USE OR OTHER DEALINGS IN THE SOFTWARE.
64835
64836 module.exports = Stream;
64837
64838 var EE = require('events').EventEmitter;
64839 var inherits = require('inherits');
64840
64841 inherits(Stream, EE);
64842 Stream.Readable = require('readable-stream/readable.js');
64843 Stream.Writable = require('readable-stream/writable.js');
64844 Stream.Duplex = require('readable-stream/duplex.js');
64845 Stream.Transform = require('readable-stream/transform.js');
64846 Stream.PassThrough = require('readable-stream/passthrough.js');
64847
64848 // Backwards-compat with node 0.4.x
64849 Stream.Stream = Stream;
64850
64851
64852
64853 // old-style streams. Note that the pipe method (the only relevant
64854 // part of this class) is overridden in the Readable class.
64855
64856 function Stream() {
64857 EE.call(this);
64858 }
64859
64860 Stream.prototype.pipe = function(dest, options) {
64861 var source = this;
64862
64863 function ondata(chunk) {
64864 if (dest.writable) {
64865 if (false === dest.write(chunk) && source.pause) {
64866 source.pause();
64867 }
64868 }
64869 }
64870
64871 source.on('data', ondata);
64872
64873 function ondrain() {
64874 if (source.readable && source.resume) {
64875 source.resume();
64876 }
64877 }
64878
64879 dest.on('drain', ondrain);
64880
64881 // If the 'end' option is not supplied, dest.end() will be called when
64882 // source gets the 'end' or 'close' events. Only dest.end() once.
64883 if (!dest._isStdio && (!options || options.end !== false)) {
64884 source.on('end', onend);
64885 source.on('close', onclose);
64886 }
64887
64888 var didOnEnd = false;
64889 function onend() {
64890 if (didOnEnd) return;
64891 didOnEnd = true;
64892
64893 dest.end();
64894 }
64895
64896
64897 function onclose() {
64898 if (didOnEnd) return;
64899 didOnEnd = true;
64900
64901 if (typeof dest.destroy === 'function') dest.destroy();
64902 }
64903
64904 // don't leave dangling pipes when there are errors.
64905 function onerror(er) {
64906 cleanup();
64907 if (EE.listenerCount(this, 'error') === 0) {
64908 throw er; // Unhandled stream error in pipe.
64909 }
64910 }
64911
64912 source.on('error', onerror);
64913 dest.on('error', onerror);
64914
64915 // remove all the event listeners that were added.
64916 function cleanup() {
64917 source.removeListener('data', ondata);
64918 dest.removeListener('drain', ondrain);
64919
64920 source.removeListener('end', onend);
64921 source.removeListener('close', onclose);
64922
64923 source.removeListener('error', onerror);
64924 dest.removeListener('error', onerror);
64925
64926 source.removeListener('end', cleanup);
64927 source.removeListener('close', cleanup);
64928
64929 dest.removeListener('close', cleanup);
64930 }
64931
64932 source.on('end', cleanup);
64933 source.on('close', cleanup);
64934
64935 dest.on('close', cleanup);
64936
64937 dest.emit('pipe', source);
64938
64939 // Allow for unix-like usage: A.pipe(B).pipe(C)
64940 return dest;
64941 };
64942
64943 },{"events":83,"inherits":95,"readable-stream/duplex.js":120,"readable-stream/passthrough.js":129,"readable-stream/readable.js":130,"readable-stream/transform.js":131,"readable-stream/writable.js":132}],144:[function(require,module,exports){
64944 // Copyright Joyent, Inc. and other Node contributors.
64945 //
64946 // Permission is hereby granted, free of charge, to any person obtaining a
64947 // copy of this software and associated documentation files (the
64948 // "Software"), to deal in the Software without restriction, including
64949 // without limitation the rights to use, copy, modify, merge, publish,
64950 // distribute, sublicense, and/or sell copies of the Software, and to permit
64951 // persons to whom the Software is furnished to do so, subject to the
64952 // following conditions:
64953 //
64954 // The above copyright notice and this permission notice shall be included
64955 // in all copies or substantial portions of the Software.
64956 //
64957 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
64958 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
64959 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
64960 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
64961 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
64962 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
64963 // USE OR OTHER DEALINGS IN THE SOFTWARE.
64964
64965 var Buffer = require('buffer').Buffer;
64966
64967 var isBufferEncoding = Buffer.isEncoding
64968 || function(encoding) {
64969 switch (encoding && encoding.toLowerCase()) {
64970 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
64971 default: return false;
64972 }
64973 }
64974
64975
64976 function assertEncoding(encoding) {
64977 if (encoding && !isBufferEncoding(encoding)) {
64978 throw new Error('Unknown encoding: ' + encoding);
64979 }
64980 }
64981
64982 // StringDecoder provides an interface for efficiently splitting a series of
64983 // buffers into a series of JS strings without breaking apart multi-byte
64984 // characters. CESU-8 is handled as part of the UTF-8 encoding.
64985 //
64986 // @TODO Handling all encodings inside a single object makes it very difficult
64987 // to reason about this code, so it should be split up in the future.
64988 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
64989 // points as used by CESU-8.
64990 var StringDecoder = exports.StringDecoder = function(encoding) {
64991 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
64992 assertEncoding(encoding);
64993 switch (this.encoding) {
64994 case 'utf8':
64995 // CESU-8 represents each of Surrogate Pair by 3-bytes
64996 this.surrogateSize = 3;
64997 break;
64998 case 'ucs2':
64999 case 'utf16le':
65000 // UTF-16 represents each of Surrogate Pair by 2-bytes
65001 this.surrogateSize = 2;
65002 this.detectIncompleteChar = utf16DetectIncompleteChar;
65003 break;
65004 case 'base64':
65005 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
65006 this.surrogateSize = 3;
65007 this.detectIncompleteChar = base64DetectIncompleteChar;
65008 break;
65009 default:
65010 this.write = passThroughWrite;
65011 return;
65012 }
65013
65014 // Enough space to store all bytes of a single character. UTF-8 needs 4
65015 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
65016 this.charBuffer = new Buffer(6);
65017 // Number of bytes received for the current incomplete multi-byte character.
65018 this.charReceived = 0;
65019 // Number of bytes expected for the current incomplete multi-byte character.
65020 this.charLength = 0;
65021 };
65022
65023
65024 // write decodes the given buffer and returns it as JS string that is
65025 // guaranteed to not contain any partial multi-byte characters. Any partial
65026 // character found at the end of the buffer is buffered up, and will be
65027 // returned when calling write again with the remaining bytes.
65028 //
65029 // Note: Converting a Buffer containing an orphan surrogate to a String
65030 // currently works, but converting a String to a Buffer (via `new Buffer`, or
65031 // Buffer#write) will replace incomplete surrogates with the unicode
65032 // replacement character. See https://codereview.chromium.org/121173009/ .
65033 StringDecoder.prototype.write = function(buffer) {
65034 var charStr = '';
65035 // if our last write ended with an incomplete multibyte character
65036 while (this.charLength) {
65037 // determine how many remaining bytes this buffer has to offer for this char
65038 var available = (buffer.length >= this.charLength - this.charReceived) ?
65039 this.charLength - this.charReceived :
65040 buffer.length;
65041
65042 // add the new bytes to the char buffer
65043 buffer.copy(this.charBuffer, this.charReceived, 0, available);
65044 this.charReceived += available;
65045
65046 if (this.charReceived < this.charLength) {
65047 // still not enough chars in this buffer? wait for more ...
65048 return '';
65049 }
65050
65051 // remove bytes belonging to the current character from the buffer
65052 buffer = buffer.slice(available, buffer.length);
65053
65054 // get the character that was split
65055 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
65056
65057 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
65058 var charCode = charStr.charCodeAt(charStr.length - 1);
65059 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
65060 this.charLength += this.surrogateSize;
65061 charStr = '';
65062 continue;
65063 }
65064 this.charReceived = this.charLength = 0;
65065
65066 // if there are no more bytes in this buffer, just emit our char
65067 if (buffer.length === 0) {
65068 return charStr;
65069 }
65070 break;
65071 }
65072
65073 // determine and set charLength / charReceived
65074 this.detectIncompleteChar(buffer);
65075
65076 var end = buffer.length;
65077 if (this.charLength) {
65078 // buffer the incomplete character bytes we got
65079 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
65080 end -= this.charReceived;
65081 }
65082
65083 charStr += buffer.toString(this.encoding, 0, end);
65084
65085 var end = charStr.length - 1;
65086 var charCode = charStr.charCodeAt(end);
65087 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
65088 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
65089 var size = this.surrogateSize;
65090 this.charLength += size;
65091 this.charReceived += size;
65092 this.charBuffer.copy(this.charBuffer, size, 0, size);
65093 buffer.copy(this.charBuffer, 0, 0, size);
65094 return charStr.substring(0, end);
65095 }
65096
65097 // or just emit the charStr
65098 return charStr;
65099 };
65100
65101 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
65102 // the end of the given buffer. If so, it sets this.charLength to the byte
65103 // length that character, and sets this.charReceived to the number of bytes
65104 // that are available for this character.
65105 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
65106 // determine how many bytes we have to check at the end of this buffer
65107 var i = (buffer.length >= 3) ? 3 : buffer.length;
65108
65109 // Figure out if one of the last i bytes of our buffer announces an
65110 // incomplete char.
65111 for (; i > 0; i--) {
65112 var c = buffer[buffer.length - i];
65113
65114 // See http://en.wikipedia.org/wiki/UTF-8#Description
65115
65116 // 110XXXXX
65117 if (i == 1 && c >> 5 == 0x06) {
65118 this.charLength = 2;
65119 break;
65120 }
65121
65122 // 1110XXXX
65123 if (i <= 2 && c >> 4 == 0x0E) {
65124 this.charLength = 3;
65125 break;
65126 }
65127
65128 // 11110XXX
65129 if (i <= 3 && c >> 3 == 0x1E) {
65130 this.charLength = 4;
65131 break;
65132 }
65133 }
65134 this.charReceived = i;
65135 };
65136
65137 StringDecoder.prototype.end = function(buffer) {
65138 var res = '';
65139 if (buffer && buffer.length)
65140 res = this.write(buffer);
65141
65142 if (this.charReceived) {
65143 var cr = this.charReceived;
65144 var buf = this.charBuffer;
65145 var enc = this.encoding;
65146 res += buf.slice(0, cr).toString(enc);
65147 }
65148
65149 return res;
65150 };
65151
65152 function passThroughWrite(buffer) {
65153 return buffer.toString(this.encoding);
65154 }
65155
65156 function utf16DetectIncompleteChar(buffer) {
65157 this.charReceived = buffer.length % 2;
65158 this.charLength = this.charReceived ? 2 : 0;
65159 }
65160
65161 function base64DetectIncompleteChar(buffer) {
65162 this.charReceived = buffer.length % 3;
65163 this.charLength = this.charReceived ? 3 : 0;
65164 }
65165
65166 },{"buffer":47}],145:[function(require,module,exports){
65167 (function (global){
65168
65169 /**
65170 * Module exports.
65171 */
65172
65173 module.exports = deprecate;
65174
65175 /**
65176 * Mark that a method should not be used.
65177 * Returns a modified function which warns once by default.
65178 *
65179 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
65180 *
65181 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
65182 * will throw an Error when invoked.
65183 *
65184 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
65185 * will invoke `console.trace()` instead of `console.error()`.
65186 *
65187 * @param {Function} fn - the function to deprecate
65188 * @param {String} msg - the string to print to the console when `fn` is invoked
65189 * @returns {Function} a new "deprecated" version of `fn`
65190 * @api public
65191 */
65192
65193 function deprecate (fn, msg) {
65194 if (config('noDeprecation')) {
65195 return fn;
65196 }
65197
65198 var warned = false;
65199 function deprecated() {
65200 if (!warned) {
65201 if (config('throwDeprecation')) {
65202 throw new Error(msg);
65203 } else if (config('traceDeprecation')) {
65204 console.trace(msg);
65205 } else {
65206 console.warn(msg);
65207 }
65208 warned = true;
65209 }
65210 return fn.apply(this, arguments);
65211 }
65212
65213 return deprecated;
65214 }
65215
65216 /**
65217 * Checks `localStorage` for boolean values for the given `name`.
65218 *
65219 * @param {String} name
65220 * @returns {Boolean}
65221 * @api private
65222 */
65223
65224 function config (name) {
65225 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
65226 try {
65227 if (!global.localStorage) return false;
65228 } catch (_) {
65229 return false;
65230 }
65231 var val = global.localStorage[name];
65232 if (null == val) return false;
65233 return String(val).toLowerCase() === 'true';
65234 }
65235
65236 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
65237 },{}],146:[function(require,module,exports){
65238 arguments[4][95][0].apply(exports,arguments)
65239 },{"dup":95}],147:[function(require,module,exports){
65240 module.exports = function isBuffer(arg) {
65241 return arg && typeof arg === 'object'
65242 && typeof arg.copy === 'function'
65243 && typeof arg.fill === 'function'
65244 && typeof arg.readUInt8 === 'function';
65245 }
65246 },{}],148:[function(require,module,exports){
65247 (function (process,global){
65248 // Copyright Joyent, Inc. and other Node contributors.
65249 //
65250 // Permission is hereby granted, free of charge, to any person obtaining a
65251 // copy of this software and associated documentation files (the
65252 // "Software"), to deal in the Software without restriction, including
65253 // without limitation the rights to use, copy, modify, merge, publish,
65254 // distribute, sublicense, and/or sell copies of the Software, and to permit
65255 // persons to whom the Software is furnished to do so, subject to the
65256 // following conditions:
65257 //
65258 // The above copyright notice and this permission notice shall be included
65259 // in all copies or substantial portions of the Software.
65260 //
65261 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
65262 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
65263 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
65264 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
65265 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
65266 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
65267 // USE OR OTHER DEALINGS IN THE SOFTWARE.
65268
65269 var formatRegExp = /%[sdj%]/g;
65270 exports.format = function(f) {
65271 if (!isString(f)) {
65272 var objects = [];
65273 for (var i = 0; i < arguments.length; i++) {
65274 objects.push(inspect(arguments[i]));
65275 }
65276 return objects.join(' ');
65277 }
65278
65279 var i = 1;
65280 var args = arguments;
65281 var len = args.length;
65282 var str = String(f).replace(formatRegExp, function(x) {
65283 if (x === '%%') return '%';
65284 if (i >= len) return x;
65285 switch (x) {
65286 case '%s': return String(args[i++]);
65287 case '%d': return Number(args[i++]);
65288 case '%j':
65289 try {
65290 return JSON.stringify(args[i++]);
65291 } catch (_) {
65292 return '[Circular]';
65293 }
65294 default:
65295 return x;
65296 }
65297 });
65298 for (var x = args[i]; i < len; x = args[++i]) {
65299 if (isNull(x) || !isObject(x)) {
65300 str += ' ' + x;
65301 } else {
65302 str += ' ' + inspect(x);
65303 }
65304 }
65305 return str;
65306 };
65307
65308
65309 // Mark that a method should not be used.
65310 // Returns a modified function which warns once by default.
65311 // If --no-deprecation is set, then it is a no-op.
65312 exports.deprecate = function(fn, msg) {
65313 // Allow for deprecating things in the process of starting up.
65314 if (isUndefined(global.process)) {
65315 return function() {
65316 return exports.deprecate(fn, msg).apply(this, arguments);
65317 };
65318 }
65319
65320 if (process.noDeprecation === true) {
65321 return fn;
65322 }
65323
65324 var warned = false;
65325 function deprecated() {
65326 if (!warned) {
65327 if (process.throwDeprecation) {
65328 throw new Error(msg);
65329 } else if (process.traceDeprecation) {
65330 console.trace(msg);
65331 } else {
65332 console.error(msg);
65333 }
65334 warned = true;
65335 }
65336 return fn.apply(this, arguments);
65337 }
65338
65339 return deprecated;
65340 };
65341
65342
65343 var debugs = {};
65344 var debugEnviron;
65345 exports.debuglog = function(set) {
65346 if (isUndefined(debugEnviron))
65347 debugEnviron = process.env.NODE_DEBUG || '';
65348 set = set.toUpperCase();
65349 if (!debugs[set]) {
65350 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
65351 var pid = process.pid;
65352 debugs[set] = function() {
65353 var msg = exports.format.apply(exports, arguments);
65354 console.error('%s %d: %s', set, pid, msg);
65355 };
65356 } else {
65357 debugs[set] = function() {};
65358 }
65359 }
65360 return debugs[set];
65361 };
65362
65363
65364 /**
65365 * Echos the value of a value. Trys to print the value out
65366 * in the best way possible given the different types.
65367 *
65368 * @param {Object} obj The object to print out.
65369 * @param {Object} opts Optional options object that alters the output.
65370 */
65371 /* legacy: obj, showHidden, depth, colors*/
65372 function inspect(obj, opts) {
65373 // default options
65374 var ctx = {
65375 seen: [],
65376 stylize: stylizeNoColor
65377 };
65378 // legacy...
65379 if (arguments.length >= 3) ctx.depth = arguments[2];
65380 if (arguments.length >= 4) ctx.colors = arguments[3];
65381 if (isBoolean(opts)) {
65382 // legacy...
65383 ctx.showHidden = opts;
65384 } else if (opts) {
65385 // got an "options" object
65386 exports._extend(ctx, opts);
65387 }
65388 // set default options
65389 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
65390 if (isUndefined(ctx.depth)) ctx.depth = 2;
65391 if (isUndefined(ctx.colors)) ctx.colors = false;
65392 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
65393 if (ctx.colors) ctx.stylize = stylizeWithColor;
65394 return formatValue(ctx, obj, ctx.depth);
65395 }
65396 exports.inspect = inspect;
65397
65398
65399 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
65400 inspect.colors = {
65401 'bold' : [1, 22],
65402 'italic' : [3, 23],
65403 'underline' : [4, 24],
65404 'inverse' : [7, 27],
65405 'white' : [37, 39],
65406 'grey' : [90, 39],
65407 'black' : [30, 39],
65408 'blue' : [34, 39],
65409 'cyan' : [36, 39],
65410 'green' : [32, 39],
65411 'magenta' : [35, 39],
65412 'red' : [31, 39],
65413 'yellow' : [33, 39]
65414 };
65415
65416 // Don't use 'blue' not visible on cmd.exe
65417 inspect.styles = {
65418 'special': 'cyan',
65419 'number': 'yellow',
65420 'boolean': 'yellow',
65421 'undefined': 'grey',
65422 'null': 'bold',
65423 'string': 'green',
65424 'date': 'magenta',
65425 // "name": intentionally not styling
65426 'regexp': 'red'
65427 };
65428
65429
65430 function stylizeWithColor(str, styleType) {
65431 var style = inspect.styles[styleType];
65432
65433 if (style) {
65434 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
65435 '\u001b[' + inspect.colors[style][1] + 'm';
65436 } else {
65437 return str;
65438 }
65439 }
65440
65441
65442 function stylizeNoColor(str, styleType) {
65443 return str;
65444 }
65445
65446
65447 function arrayToHash(array) {
65448 var hash = {};
65449
65450 array.forEach(function(val, idx) {
65451 hash[val] = true;
65452 });
65453
65454 return hash;
65455 }
65456
65457
65458 function formatValue(ctx, value, recurseTimes) {
65459 // Provide a hook for user-specified inspect functions.
65460 // Check that value is an object with an inspect function on it
65461 if (ctx.customInspect &&
65462 value &&
65463 isFunction(value.inspect) &&
65464 // Filter out the util module, it's inspect function is special
65465 value.inspect !== exports.inspect &&
65466 // Also filter out any prototype objects using the circular check.
65467 !(value.constructor && value.constructor.prototype === value)) {
65468 var ret = value.inspect(recurseTimes, ctx);
65469 if (!isString(ret)) {
65470 ret = formatValue(ctx, ret, recurseTimes);
65471 }
65472 return ret;
65473 }
65474
65475 // Primitive types cannot have properties
65476 var primitive = formatPrimitive(ctx, value);
65477 if (primitive) {
65478 return primitive;
65479 }
65480
65481 // Look up the keys of the object.
65482 var keys = Object.keys(value);
65483 var visibleKeys = arrayToHash(keys);
65484
65485 if (ctx.showHidden) {
65486 keys = Object.getOwnPropertyNames(value);
65487 }
65488
65489 // IE doesn't make error fields non-enumerable
65490 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
65491 if (isError(value)
65492 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
65493 return formatError(value);
65494 }
65495
65496 // Some type of object without properties can be shortcutted.
65497 if (keys.length === 0) {
65498 if (isFunction(value)) {
65499 var name = value.name ? ': ' + value.name : '';
65500 return ctx.stylize('[Function' + name + ']', 'special');
65501 }
65502 if (isRegExp(value)) {
65503 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
65504 }
65505 if (isDate(value)) {
65506 return ctx.stylize(Date.prototype.toString.call(value), 'date');
65507 }
65508 if (isError(value)) {
65509 return formatError(value);
65510 }
65511 }
65512
65513 var base = '', array = false, braces = ['{', '}'];
65514
65515 // Make Array say that they are Array
65516 if (isArray(value)) {
65517 array = true;
65518 braces = ['[', ']'];
65519 }
65520
65521 // Make functions say that they are functions
65522 if (isFunction(value)) {
65523 var n = value.name ? ': ' + value.name : '';
65524 base = ' [Function' + n + ']';
65525 }
65526
65527 // Make RegExps say that they are RegExps
65528 if (isRegExp(value)) {
65529 base = ' ' + RegExp.prototype.toString.call(value);
65530 }
65531
65532 // Make dates with properties first say the date
65533 if (isDate(value)) {
65534 base = ' ' + Date.prototype.toUTCString.call(value);
65535 }
65536
65537 // Make error with message first say the error
65538 if (isError(value)) {
65539 base = ' ' + formatError(value);
65540 }
65541
65542 if (keys.length === 0 && (!array || value.length == 0)) {
65543 return braces[0] + base + braces[1];
65544 }
65545
65546 if (recurseTimes < 0) {
65547 if (isRegExp(value)) {
65548 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
65549 } else {
65550 return ctx.stylize('[Object]', 'special');
65551 }
65552 }
65553
65554 ctx.seen.push(value);
65555
65556 var output;
65557 if (array) {
65558 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
65559 } else {
65560 output = keys.map(function(key) {
65561 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
65562 });
65563 }
65564
65565 ctx.seen.pop();
65566
65567 return reduceToSingleString(output, base, braces);
65568 }
65569
65570
65571 function formatPrimitive(ctx, value) {
65572 if (isUndefined(value))
65573 return ctx.stylize('undefined', 'undefined');
65574 if (isString(value)) {
65575 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
65576 .replace(/'/g, "\\'")
65577 .replace(/\\"/g, '"') + '\'';
65578 return ctx.stylize(simple, 'string');
65579 }
65580 if (isNumber(value))
65581 return ctx.stylize('' + value, 'number');
65582 if (isBoolean(value))
65583 return ctx.stylize('' + value, 'boolean');
65584 // For some reason typeof null is "object", so special case here.
65585 if (isNull(value))
65586 return ctx.stylize('null', 'null');
65587 }
65588
65589
65590 function formatError(value) {
65591 return '[' + Error.prototype.toString.call(value) + ']';
65592 }
65593
65594
65595 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
65596 var output = [];
65597 for (var i = 0, l = value.length; i < l; ++i) {
65598 if (hasOwnProperty(value, String(i))) {
65599 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
65600 String(i), true));
65601 } else {
65602 output.push('');
65603 }
65604 }
65605 keys.forEach(function(key) {
65606 if (!key.match(/^\d+$/)) {
65607 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
65608 key, true));
65609 }
65610 });
65611 return output;
65612 }
65613
65614
65615 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
65616 var name, str, desc;
65617 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
65618 if (desc.get) {
65619 if (desc.set) {
65620 str = ctx.stylize('[Getter/Setter]', 'special');
65621 } else {
65622 str = ctx.stylize('[Getter]', 'special');
65623 }
65624 } else {
65625 if (desc.set) {
65626 str = ctx.stylize('[Setter]', 'special');
65627 }
65628 }
65629 if (!hasOwnProperty(visibleKeys, key)) {
65630 name = '[' + key + ']';
65631 }
65632 if (!str) {
65633 if (ctx.seen.indexOf(desc.value) < 0) {
65634 if (isNull(recurseTimes)) {
65635 str = formatValue(ctx, desc.value, null);
65636 } else {
65637 str = formatValue(ctx, desc.value, recurseTimes - 1);
65638 }
65639 if (str.indexOf('\n') > -1) {
65640 if (array) {
65641 str = str.split('\n').map(function(line) {
65642 return ' ' + line;
65643 }).join('\n').substr(2);
65644 } else {
65645 str = '\n' + str.split('\n').map(function(line) {
65646 return ' ' + line;
65647 }).join('\n');
65648 }
65649 }
65650 } else {
65651 str = ctx.stylize('[Circular]', 'special');
65652 }
65653 }
65654 if (isUndefined(name)) {
65655 if (array && key.match(/^\d+$/)) {
65656 return str;
65657 }
65658 name = JSON.stringify('' + key);
65659 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
65660 name = name.substr(1, name.length - 2);
65661 name = ctx.stylize(name, 'name');
65662 } else {
65663 name = name.replace(/'/g, "\\'")
65664 .replace(/\\"/g, '"')
65665 .replace(/(^"|"$)/g, "'");
65666 name = ctx.stylize(name, 'string');
65667 }
65668 }
65669
65670 return name + ': ' + str;
65671 }
65672
65673
65674 function reduceToSingleString(output, base, braces) {
65675 var numLinesEst = 0;
65676 var length = output.reduce(function(prev, cur) {
65677 numLinesEst++;
65678 if (cur.indexOf('\n') >= 0) numLinesEst++;
65679 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
65680 }, 0);
65681
65682 if (length > 60) {
65683 return braces[0] +
65684 (base === '' ? '' : base + '\n ') +
65685 ' ' +
65686 output.join(',\n ') +
65687 ' ' +
65688 braces[1];
65689 }
65690
65691 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
65692 }
65693
65694
65695 // NOTE: These type checking functions intentionally don't use `instanceof`
65696 // because it is fragile and can be easily faked with `Object.create()`.
65697 function isArray(ar) {
65698 return Array.isArray(ar);
65699 }
65700 exports.isArray = isArray;
65701
65702 function isBoolean(arg) {
65703 return typeof arg === 'boolean';
65704 }
65705 exports.isBoolean = isBoolean;
65706
65707 function isNull(arg) {
65708 return arg === null;
65709 }
65710 exports.isNull = isNull;
65711
65712 function isNullOrUndefined(arg) {
65713 return arg == null;
65714 }
65715 exports.isNullOrUndefined = isNullOrUndefined;
65716
65717 function isNumber(arg) {
65718 return typeof arg === 'number';
65719 }
65720 exports.isNumber = isNumber;
65721
65722 function isString(arg) {
65723 return typeof arg === 'string';
65724 }
65725 exports.isString = isString;
65726
65727 function isSymbol(arg) {
65728 return typeof arg === 'symbol';
65729 }
65730 exports.isSymbol = isSymbol;
65731
65732 function isUndefined(arg) {
65733 return arg === void 0;
65734 }
65735 exports.isUndefined = isUndefined;
65736
65737 function isRegExp(re) {
65738 return isObject(re) && objectToString(re) === '[object RegExp]';
65739 }
65740 exports.isRegExp = isRegExp;
65741
65742 function isObject(arg) {
65743 return typeof arg === 'object' && arg !== null;
65744 }
65745 exports.isObject = isObject;
65746
65747 function isDate(d) {
65748 return isObject(d) && objectToString(d) === '[object Date]';
65749 }
65750 exports.isDate = isDate;
65751
65752 function isError(e) {
65753 return isObject(e) &&
65754 (objectToString(e) === '[object Error]' || e instanceof Error);
65755 }
65756 exports.isError = isError;
65757
65758 function isFunction(arg) {
65759 return typeof arg === 'function';
65760 }
65761 exports.isFunction = isFunction;
65762
65763 function isPrimitive(arg) {
65764 return arg === null ||
65765 typeof arg === 'boolean' ||
65766 typeof arg === 'number' ||
65767 typeof arg === 'string' ||
65768 typeof arg === 'symbol' || // ES6 symbol
65769 typeof arg === 'undefined';
65770 }
65771 exports.isPrimitive = isPrimitive;
65772
65773 exports.isBuffer = require('./support/isBuffer');
65774
65775 function objectToString(o) {
65776 return Object.prototype.toString.call(o);
65777 }
65778
65779
65780 function pad(n) {
65781 return n < 10 ? '0' + n.toString(10) : n.toString(10);
65782 }
65783
65784
65785 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
65786 'Oct', 'Nov', 'Dec'];
65787
65788 // 26 Feb 16:19:34
65789 function timestamp() {
65790 var d = new Date();
65791 var time = [pad(d.getHours()),
65792 pad(d.getMinutes()),
65793 pad(d.getSeconds())].join(':');
65794 return [d.getDate(), months[d.getMonth()], time].join(' ');
65795 }
65796
65797
65798 // log is just a thin wrapper to console.log that prepends a timestamp
65799 exports.log = function() {
65800 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
65801 };
65802
65803
65804 /**
65805 * Inherit the prototype methods from one constructor into another.
65806 *
65807 * The Function.prototype.inherits from lang.js rewritten as a standalone
65808 * function (not on Function.prototype). NOTE: If this file is to be loaded
65809 * during bootstrapping this function needs to be rewritten using some native
65810 * functions as prototype setup using normal JavaScript does not work as
65811 * expected during bootstrapping (see mirror.js in r114903).
65812 *
65813 * @param {function} ctor Constructor function which needs to inherit the
65814 * prototype.
65815 * @param {function} superCtor Constructor function to inherit prototype from.
65816 */
65817 exports.inherits = require('inherits');
65818
65819 exports._extend = function(origin, add) {
65820 // Don't do anything if add isn't an object
65821 if (!add || !isObject(add)) return origin;
65822
65823 var keys = Object.keys(add);
65824 var i = keys.length;
65825 while (i--) {
65826 origin[keys[i]] = add[keys[i]];
65827 }
65828 return origin;
65829 };
65830
65831 function hasOwnProperty(obj, prop) {
65832 return Object.prototype.hasOwnProperty.call(obj, prop);
65833 }
65834
65835 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
65836 },{"./support/isBuffer":147,"_process":112,"inherits":146}],149:[function(require,module,exports){
65837 var indexOf = require('indexof');
65838
65839 var Object_keys = function (obj) {
65840 if (Object.keys) return Object.keys(obj)
65841 else {
65842 var res = [];
65843 for (var key in obj) res.push(key)
65844 return res;
65845 }
65846 };
65847
65848 var forEach = function (xs, fn) {
65849 if (xs.forEach) return xs.forEach(fn)
65850 else for (var i = 0; i < xs.length; i++) {
65851 fn(xs[i], i, xs);
65852 }
65853 };
65854
65855 var defineProp = (function() {
65856 try {
65857 Object.defineProperty({}, '_', {});
65858 return function(obj, name, value) {
65859 Object.defineProperty(obj, name, {
65860 writable: true,
65861 enumerable: false,
65862 configurable: true,
65863 value: value
65864 })
65865 };
65866 } catch(e) {
65867 return function(obj, name, value) {
65868 obj[name] = value;
65869 };
65870 }
65871 }());
65872
65873 var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',
65874 'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',
65875 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',
65876 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',
65877 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];
65878
65879 function Context() {}
65880 Context.prototype = {};
65881
65882 var Script = exports.Script = function NodeScript (code) {
65883 if (!(this instanceof Script)) return new Script(code);
65884 this.code = code;
65885 };
65886
65887 Script.prototype.runInContext = function (context) {
65888 if (!(context instanceof Context)) {
65889 throw new TypeError("needs a 'context' argument.");
65890 }
65891
65892 var iframe = document.createElement('iframe');
65893 if (!iframe.style) iframe.style = {};
65894 iframe.style.display = 'none';
65895
65896 document.body.appendChild(iframe);
65897
65898 var win = iframe.contentWindow;
65899 var wEval = win.eval, wExecScript = win.execScript;
65900
65901 if (!wEval && wExecScript) {
65902 // win.eval() magically appears when this is called in IE:
65903 wExecScript.call(win, 'null');
65904 wEval = win.eval;
65905 }
65906
65907 forEach(Object_keys(context), function (key) {
65908 win[key] = context[key];
65909 });
65910 forEach(globals, function (key) {
65911 if (context[key]) {
65912 win[key] = context[key];
65913 }
65914 });
65915
65916 var winKeys = Object_keys(win);
65917
65918 var res = wEval.call(win, this.code);
65919
65920 forEach(Object_keys(win), function (key) {
65921 // Avoid copying circular objects like `top` and `window` by only
65922 // updating existing context properties or new properties in the `win`
65923 // that was only introduced after the eval.
65924 if (key in context || indexOf(winKeys, key) === -1) {
65925 context[key] = win[key];
65926 }
65927 });
65928
65929 forEach(globals, function (key) {
65930 if (!(key in context)) {
65931 defineProp(context, key, win[key]);
65932 }
65933 });
65934
65935 document.body.removeChild(iframe);
65936
65937 return res;
65938 };
65939
65940 Script.prototype.runInThisContext = function () {
65941 return eval(this.code); // maybe...
65942 };
65943
65944 Script.prototype.runInNewContext = function (context) {
65945 var ctx = Script.createContext(context);
65946 var res = this.runInContext(ctx);
65947
65948 forEach(Object_keys(ctx), function (key) {
65949 context[key] = ctx[key];
65950 });
65951
65952 return res;
65953 };
65954
65955 forEach(Object_keys(Script.prototype), function (name) {
65956 exports[name] = Script[name] = function (code) {
65957 var s = Script(code);
65958 return s[name].apply(s, [].slice.call(arguments, 1));
65959 };
65960 });
65961
65962 exports.createScript = function (code) {
65963 return exports.Script(code);
65964 };
65965
65966 exports.createContext = Script.createContext = function (context) {
65967 var copy = new Context();
65968 if(typeof context === 'object') {
65969 forEach(Object_keys(context), function (key) {
65970 copy[key] = context[key];
65971 });
65972 }
65973 return copy;
65974 };
65975
65976 },{"indexof":94}],150:[function(require,module,exports){
65977 var aes = require('browserify-aes')
65978 var assert = require('assert')
65979 var Buffer = require('safe-buffer').Buffer
65980 var bs58check = require('bs58check')
65981 var createHash = require('create-hash')
65982 var scrypt = require('scryptsy')
65983 var xor = require('buffer-xor/inplace')
65984
65985 var ecurve = require('ecurve')
65986 var curve = ecurve.getCurveByName('secp256k1')
65987
65988 var BigInteger = require('bigi')
65989
65990 // constants
65991 var SCRYPT_PARAMS = {
65992 N: 16384, // specified by BIP38
65993 r: 8,
65994 p: 8
65995 }
65996 var NULL = Buffer.alloc(0)
65997
65998 function hash160 (buffer) {
65999 return createHash('rmd160').update(
66000 createHash('sha256').update(buffer).digest()
66001 ).digest()
66002 }
66003
66004 function hash256 (buffer) {
66005 return createHash('sha256').update(
66006 createHash('sha256').update(buffer).digest()
66007 ).digest()
66008 }
66009
66010 function getAddress (d, compressed) {
66011 var Q = curve.G.multiply(d).getEncoded(compressed)
66012 var hash = hash160(Q)
66013 var payload = Buffer.allocUnsafe(21)
66014 payload.writeUInt8(0x00, 0) // XXX TODO FIXME bitcoin only??? damn you BIP38
66015 hash.copy(payload, 1)
66016
66017 return bs58check.encode(payload)
66018 }
66019
66020 function encryptRaw (buffer, compressed, passphrase, progressCallback, scryptParams) {
66021 if (buffer.length !== 32) throw new Error('Invalid private key length')
66022 scryptParams = scryptParams || SCRYPT_PARAMS
66023
66024 var d = BigInteger.fromBuffer(buffer)
66025 var address = getAddress(d, compressed)
66026 var secret = Buffer.from(passphrase, 'utf8')
66027 var salt = hash256(address).slice(0, 4)
66028
66029 var N = scryptParams.N
66030 var r = scryptParams.r
66031 var p = scryptParams.p
66032
66033 var scryptBuf = scrypt(secret, salt, N, r, p, 64, progressCallback)
66034 var derivedHalf1 = scryptBuf.slice(0, 32)
66035 var derivedHalf2 = scryptBuf.slice(32, 64)
66036
66037 var xorBuf = xor(derivedHalf1, buffer)
66038 var cipher = aes.createCipheriv('aes-256-ecb', derivedHalf2, NULL)
66039 cipher.setAutoPadding(false)
66040 cipher.end(xorBuf)
66041
66042 var cipherText = cipher.read()
66043
66044 // 0x01 | 0x42 | flagByte | salt (4) | cipherText (32)
66045 var result = Buffer.allocUnsafe(7 + 32)
66046 result.writeUInt8(0x01, 0)
66047 result.writeUInt8(0x42, 1)
66048 result.writeUInt8(compressed ? 0xe0 : 0xc0, 2)
66049 salt.copy(result, 3)
66050 cipherText.copy(result, 7)
66051
66052 return result
66053 }
66054
66055 function encrypt (buffer, compressed, passphrase, progressCallback, scryptParams) {
66056 return bs58check.encode(encryptRaw(buffer, compressed, passphrase, progressCallback, scryptParams))
66057 }
66058
66059 // some of the techniques borrowed from: https://github.com/pointbiz/bitaddress.org
66060 function decryptRaw (buffer, passphrase, progressCallback, scryptParams) {
66061 // 39 bytes: 2 bytes prefix, 37 bytes payload
66062 if (buffer.length !== 39) throw new Error('Invalid BIP38 data length')
66063 if (buffer.readUInt8(0) !== 0x01) throw new Error('Invalid BIP38 prefix')
66064 scryptParams = scryptParams || SCRYPT_PARAMS
66065
66066 // check if BIP38 EC multiply
66067 var type = buffer.readUInt8(1)
66068 if (type === 0x43) return decryptECMult(buffer, passphrase, progressCallback, scryptParams)
66069 if (type !== 0x42) throw new Error('Invalid BIP38 type')
66070
66071 passphrase = Buffer.from(passphrase, 'utf8')
66072
66073 var flagByte = buffer.readUInt8(2)
66074 var compressed = flagByte === 0xe0
66075 if (!compressed && flagByte !== 0xc0) throw new Error('Invalid BIP38 compression flag')
66076
66077 var N = scryptParams.N
66078 var r = scryptParams.r
66079 var p = scryptParams.p
66080
66081 var salt = buffer.slice(3, 7)
66082 var scryptBuf = scrypt(passphrase, salt, N, r, p, 64, progressCallback)
66083 var derivedHalf1 = scryptBuf.slice(0, 32)
66084 var derivedHalf2 = scryptBuf.slice(32, 64)
66085
66086 var privKeyBuf = buffer.slice(7, 7 + 32)
66087 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, NULL)
66088 decipher.setAutoPadding(false)
66089 decipher.end(privKeyBuf)
66090
66091 var plainText = decipher.read()
66092 var privateKey = xor(derivedHalf1, plainText)
66093
66094 // verify salt matches address
66095 var d = BigInteger.fromBuffer(privateKey)
66096 var address = getAddress(d, compressed)
66097 var checksum = hash256(address).slice(0, 4)
66098 assert.deepEqual(salt, checksum)
66099
66100 return {
66101 privateKey: privateKey,
66102 compressed: compressed
66103 }
66104 }
66105
66106 function decrypt (string, passphrase, progressCallback, scryptParams) {
66107 return decryptRaw(bs58check.decode(string), passphrase, progressCallback, scryptParams)
66108 }
66109
66110 function decryptECMult (buffer, passphrase, progressCallback, scryptParams) {
66111 passphrase = Buffer.from(passphrase, 'utf8')
66112 buffer = buffer.slice(1) // FIXME: we can avoid this
66113 scryptParams = scryptParams || SCRYPT_PARAMS
66114
66115 var flag = buffer.readUInt8(1)
66116 var compressed = (flag & 0x20) !== 0
66117 var hasLotSeq = (flag & 0x04) !== 0
66118
66119 assert.equal((flag & 0x24), flag, 'Invalid private key.')
66120
66121 var addressHash = buffer.slice(2, 6)
66122 var ownerEntropy = buffer.slice(6, 14)
66123 var ownerSalt
66124
66125 // 4 bytes ownerSalt if 4 bytes lot/sequence
66126 if (hasLotSeq) {
66127 ownerSalt = ownerEntropy.slice(0, 4)
66128
66129 // else, 8 bytes ownerSalt
66130 } else {
66131 ownerSalt = ownerEntropy
66132 }
66133
66134 var encryptedPart1 = buffer.slice(14, 22) // First 8 bytes
66135 var encryptedPart2 = buffer.slice(22, 38) // 16 bytes
66136
66137 var N = scryptParams.N
66138 var r = scryptParams.r
66139 var p = scryptParams.p
66140 var preFactor = scrypt(passphrase, ownerSalt, N, r, p, 32, progressCallback)
66141
66142 var passFactor
66143 if (hasLotSeq) {
66144 var hashTarget = Buffer.concat([preFactor, ownerEntropy])
66145 passFactor = hash256(hashTarget)
66146 } else {
66147 passFactor = preFactor
66148 }
66149
66150 var passInt = BigInteger.fromBuffer(passFactor)
66151 var passPoint = curve.G.multiply(passInt).getEncoded(true)
66152
66153 var seedBPass = scrypt(passPoint, Buffer.concat([addressHash, ownerEntropy]), 1024, 1, 1, 64)
66154 var derivedHalf1 = seedBPass.slice(0, 32)
66155 var derivedHalf2 = seedBPass.slice(32, 64)
66156
66157 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
66158 decipher.setAutoPadding(false)
66159 decipher.end(encryptedPart2)
66160
66161 var decryptedPart2 = decipher.read()
66162 var tmp = xor(decryptedPart2, derivedHalf1.slice(16, 32))
66163 var seedBPart2 = tmp.slice(8, 16)
66164
66165 var decipher2 = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
66166 decipher2.setAutoPadding(false)
66167 decipher2.write(encryptedPart1) // first 8 bytes
66168 decipher2.end(tmp.slice(0, 8)) // last 8 bytes
66169
66170 var seedBPart1 = xor(decipher2.read(), derivedHalf1.slice(0, 16))
66171 var seedB = Buffer.concat([seedBPart1, seedBPart2], 24)
66172 var factorB = BigInteger.fromBuffer(hash256(seedB))
66173
66174 // d = passFactor * factorB (mod n)
66175 var d = passInt.multiply(factorB).mod(curve.n)
66176
66177 return {
66178 privateKey: d.toBuffer(32),
66179 compressed: compressed
66180 }
66181 }
66182
66183 function verify (string) {
66184 var decoded = bs58check.decodeUnsafe(string)
66185 if (!decoded) return false
66186
66187 if (decoded.length !== 39) return false
66188 if (decoded.readUInt8(0) !== 0x01) return false
66189
66190 var type = decoded.readUInt8(1)
66191 var flag = decoded.readUInt8(2)
66192
66193 // encrypted WIF
66194 if (type === 0x42) {
66195 if (flag !== 0xc0 && flag !== 0xe0) return false
66196
66197 // EC mult
66198 } else if (type === 0x43) {
66199 if ((flag & ~0x24)) return false
66200 } else {
66201 return false
66202 }
66203
66204 return true
66205 }
66206
66207 module.exports = {
66208 decrypt: decrypt,
66209 decryptECMult: decryptECMult,
66210 decryptRaw: decryptRaw,
66211 encrypt: encrypt,
66212 encryptRaw: encryptRaw,
66213 verify: verify
66214 }
66215
66216 },{"assert":15,"bigi":154,"browserify-aes":158,"bs58check":175,"buffer-xor/inplace":177,"create-hash":179,"ecurve":184,"safe-buffer":193,"scryptsy":194}],151:[function(require,module,exports){
66217 // base-x encoding
66218 // Forked from https://github.com/cryptocoinjs/bs58
66219 // Originally written by Mike Hearn for BitcoinJ
66220 // Copyright (c) 2011 Google Inc
66221 // Ported to JavaScript by Stefan Thomas
66222 // Merged Buffer refactorings from base58-native by Stephen Pair
66223 // Copyright (c) 2013 BitPay Inc
66224
66225 var Buffer = require('safe-buffer').Buffer
66226
66227 module.exports = function base (ALPHABET) {
66228 var ALPHABET_MAP = {}
66229 var BASE = ALPHABET.length
66230 var LEADER = ALPHABET.charAt(0)
66231
66232 // pre-compute lookup table
66233 for (var z = 0; z < ALPHABET.length; z++) {
66234 var x = ALPHABET.charAt(z)
66235
66236 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
66237 ALPHABET_MAP[x] = z
66238 }
66239
66240 function encode (source) {
66241 if (source.length === 0) return ''
66242
66243 var digits = [0]
66244 for (var i = 0; i < source.length; ++i) {
66245 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
66246 carry += digits[j] << 8
66247 digits[j] = carry % BASE
66248 carry = (carry / BASE) | 0
66249 }
66250
66251 while (carry > 0) {
66252 digits.push(carry % BASE)
66253 carry = (carry / BASE) | 0
66254 }
66255 }
66256
66257 var string = ''
66258
66259 // deal with leading zeros
66260 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
66261 // convert digits to a string
66262 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
66263
66264 return string
66265 }
66266
66267 function decodeUnsafe (string) {
66268 if (typeof string !== 'string') throw new TypeError('Expected String')
66269 if (string.length === 0) return Buffer.allocUnsafe(0)
66270
66271 var bytes = [0]
66272 for (var i = 0; i < string.length; i++) {
66273 var value = ALPHABET_MAP[string[i]]
66274 if (value === undefined) return
66275
66276 for (var j = 0, carry = value; j < bytes.length; ++j) {
66277 carry += bytes[j] * BASE
66278 bytes[j] = carry & 0xff
66279 carry >>= 8
66280 }
66281
66282 while (carry > 0) {
66283 bytes.push(carry & 0xff)
66284 carry >>= 8
66285 }
66286 }
66287
66288 // deal with leading zeros
66289 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
66290 bytes.push(0)
66291 }
66292
66293 return Buffer.from(bytes.reverse())
66294 }
66295
66296 function decode (string) {
66297 var buffer = decodeUnsafe(string)
66298 if (buffer) return buffer
66299
66300 throw new Error('Non-base' + BASE + ' character')
66301 }
66302
66303 return {
66304 encode: encode,
66305 decodeUnsafe: decodeUnsafe,
66306 decode: decode
66307 }
66308 }
66309
66310 },{"safe-buffer":193}],152:[function(require,module,exports){
66311 // (public) Constructor
66312 function BigInteger(a, b, c) {
66313 if (!(this instanceof BigInteger))
66314 return new BigInteger(a, b, c)
66315
66316 if (a != null) {
66317 if ("number" == typeof a) this.fromNumber(a, b, c)
66318 else if (b == null && "string" != typeof a) this.fromString(a, 256)
66319 else this.fromString(a, b)
66320 }
66321 }
66322
66323 var proto = BigInteger.prototype
66324
66325 // duck-typed isBigInteger
66326 proto.__bigi = require('../package.json').version
66327 BigInteger.isBigInteger = function (obj, check_ver) {
66328 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
66329 }
66330
66331 // Bits per digit
66332 var dbits
66333
66334 // am: Compute w_j += (x*this_i), propagate carries,
66335 // c is initial carry, returns final carry.
66336 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
66337 // We need to select the fastest one that works in this environment.
66338
66339 // am1: use a single mult and divide to get the high bits,
66340 // max digit bits should be 26 because
66341 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
66342 function am1(i, x, w, j, c, n) {
66343 while (--n >= 0) {
66344 var v = x * this[i++] + w[j] + c
66345 c = Math.floor(v / 0x4000000)
66346 w[j++] = v & 0x3ffffff
66347 }
66348 return c
66349 }
66350 // am2 avoids a big mult-and-extract completely.
66351 // Max digit bits should be <= 30 because we do bitwise ops
66352 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
66353 function am2(i, x, w, j, c, n) {
66354 var xl = x & 0x7fff,
66355 xh = x >> 15
66356 while (--n >= 0) {
66357 var l = this[i] & 0x7fff
66358 var h = this[i++] >> 15
66359 var m = xh * l + h * xl
66360 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
66361 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
66362 w[j++] = l & 0x3fffffff
66363 }
66364 return c
66365 }
66366 // Alternately, set max digit bits to 28 since some
66367 // browsers slow down when dealing with 32-bit numbers.
66368 function am3(i, x, w, j, c, n) {
66369 var xl = x & 0x3fff,
66370 xh = x >> 14
66371 while (--n >= 0) {
66372 var l = this[i] & 0x3fff
66373 var h = this[i++] >> 14
66374 var m = xh * l + h * xl
66375 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
66376 c = (l >> 28) + (m >> 14) + xh * h
66377 w[j++] = l & 0xfffffff
66378 }
66379 return c
66380 }
66381
66382 // wtf?
66383 BigInteger.prototype.am = am1
66384 dbits = 26
66385
66386 BigInteger.prototype.DB = dbits
66387 BigInteger.prototype.DM = ((1 << dbits) - 1)
66388 var DV = BigInteger.prototype.DV = (1 << dbits)
66389
66390 var BI_FP = 52
66391 BigInteger.prototype.FV = Math.pow(2, BI_FP)
66392 BigInteger.prototype.F1 = BI_FP - dbits
66393 BigInteger.prototype.F2 = 2 * dbits - BI_FP
66394
66395 // Digit conversions
66396 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
66397 var BI_RC = new Array()
66398 var rr, vv
66399 rr = "0".charCodeAt(0)
66400 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
66401 rr = "a".charCodeAt(0)
66402 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
66403 rr = "A".charCodeAt(0)
66404 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
66405
66406 function int2char(n) {
66407 return BI_RM.charAt(n)
66408 }
66409
66410 function intAt(s, i) {
66411 var c = BI_RC[s.charCodeAt(i)]
66412 return (c == null) ? -1 : c
66413 }
66414
66415 // (protected) copy this to r
66416 function bnpCopyTo(r) {
66417 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
66418 r.t = this.t
66419 r.s = this.s
66420 }
66421
66422 // (protected) set from integer value x, -DV <= x < DV
66423 function bnpFromInt(x) {
66424 this.t = 1
66425 this.s = (x < 0) ? -1 : 0
66426 if (x > 0) this[0] = x
66427 else if (x < -1) this[0] = x + DV
66428 else this.t = 0
66429 }
66430
66431 // return bigint initialized to value
66432 function nbv(i) {
66433 var r = new BigInteger()
66434 r.fromInt(i)
66435 return r
66436 }
66437
66438 // (protected) set from string and radix
66439 function bnpFromString(s, b) {
66440 var self = this
66441
66442 var k
66443 if (b == 16) k = 4
66444 else if (b == 8) k = 3
66445 else if (b == 256) k = 8; // byte array
66446 else if (b == 2) k = 1
66447 else if (b == 32) k = 5
66448 else if (b == 4) k = 2
66449 else {
66450 self.fromRadix(s, b)
66451 return
66452 }
66453 self.t = 0
66454 self.s = 0
66455 var i = s.length,
66456 mi = false,
66457 sh = 0
66458 while (--i >= 0) {
66459 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
66460 if (x < 0) {
66461 if (s.charAt(i) == "-") mi = true
66462 continue
66463 }
66464 mi = false
66465 if (sh == 0)
66466 self[self.t++] = x
66467 else if (sh + k > self.DB) {
66468 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
66469 self[self.t++] = (x >> (self.DB - sh))
66470 } else
66471 self[self.t - 1] |= x << sh
66472 sh += k
66473 if (sh >= self.DB) sh -= self.DB
66474 }
66475 if (k == 8 && (s[0] & 0x80) != 0) {
66476 self.s = -1
66477 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
66478 }
66479 self.clamp()
66480 if (mi) BigInteger.ZERO.subTo(self, self)
66481 }
66482
66483 // (protected) clamp off excess high words
66484 function bnpClamp() {
66485 var c = this.s & this.DM
66486 while (this.t > 0 && this[this.t - 1] == c)--this.t
66487 }
66488
66489 // (public) return string representation in given radix
66490 function bnToString(b) {
66491 var self = this
66492 if (self.s < 0) return "-" + self.negate()
66493 .toString(b)
66494 var k
66495 if (b == 16) k = 4
66496 else if (b == 8) k = 3
66497 else if (b == 2) k = 1
66498 else if (b == 32) k = 5
66499 else if (b == 4) k = 2
66500 else return self.toRadix(b)
66501 var km = (1 << k) - 1,
66502 d, m = false,
66503 r = "",
66504 i = self.t
66505 var p = self.DB - (i * self.DB) % k
66506 if (i-- > 0) {
66507 if (p < self.DB && (d = self[i] >> p) > 0) {
66508 m = true
66509 r = int2char(d)
66510 }
66511 while (i >= 0) {
66512 if (p < k) {
66513 d = (self[i] & ((1 << p) - 1)) << (k - p)
66514 d |= self[--i] >> (p += self.DB - k)
66515 } else {
66516 d = (self[i] >> (p -= k)) & km
66517 if (p <= 0) {
66518 p += self.DB
66519 --i
66520 }
66521 }
66522 if (d > 0) m = true
66523 if (m) r += int2char(d)
66524 }
66525 }
66526 return m ? r : "0"
66527 }
66528
66529 // (public) -this
66530 function bnNegate() {
66531 var r = new BigInteger()
66532 BigInteger.ZERO.subTo(this, r)
66533 return r
66534 }
66535
66536 // (public) |this|
66537 function bnAbs() {
66538 return (this.s < 0) ? this.negate() : this
66539 }
66540
66541 // (public) return + if this > a, - if this < a, 0 if equal
66542 function bnCompareTo(a) {
66543 var r = this.s - a.s
66544 if (r != 0) return r
66545 var i = this.t
66546 r = i - a.t
66547 if (r != 0) return (this.s < 0) ? -r : r
66548 while (--i >= 0)
66549 if ((r = this[i] - a[i]) != 0) return r
66550 return 0
66551 }
66552
66553 // returns bit length of the integer x
66554 function nbits(x) {
66555 var r = 1,
66556 t
66557 if ((t = x >>> 16) != 0) {
66558 x = t
66559 r += 16
66560 }
66561 if ((t = x >> 8) != 0) {
66562 x = t
66563 r += 8
66564 }
66565 if ((t = x >> 4) != 0) {
66566 x = t
66567 r += 4
66568 }
66569 if ((t = x >> 2) != 0) {
66570 x = t
66571 r += 2
66572 }
66573 if ((t = x >> 1) != 0) {
66574 x = t
66575 r += 1
66576 }
66577 return r
66578 }
66579
66580 // (public) return the number of bits in "this"
66581 function bnBitLength() {
66582 if (this.t <= 0) return 0
66583 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
66584 }
66585
66586 // (public) return the number of bytes in "this"
66587 function bnByteLength() {
66588 return this.bitLength() >> 3
66589 }
66590
66591 // (protected) r = this << n*DB
66592 function bnpDLShiftTo(n, r) {
66593 var i
66594 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
66595 for (i = n - 1; i >= 0; --i) r[i] = 0
66596 r.t = this.t + n
66597 r.s = this.s
66598 }
66599
66600 // (protected) r = this >> n*DB
66601 function bnpDRShiftTo(n, r) {
66602 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
66603 r.t = Math.max(this.t - n, 0)
66604 r.s = this.s
66605 }
66606
66607 // (protected) r = this << n
66608 function bnpLShiftTo(n, r) {
66609 var self = this
66610 var bs = n % self.DB
66611 var cbs = self.DB - bs
66612 var bm = (1 << cbs) - 1
66613 var ds = Math.floor(n / self.DB),
66614 c = (self.s << bs) & self.DM,
66615 i
66616 for (i = self.t - 1; i >= 0; --i) {
66617 r[i + ds + 1] = (self[i] >> cbs) | c
66618 c = (self[i] & bm) << bs
66619 }
66620 for (i = ds - 1; i >= 0; --i) r[i] = 0
66621 r[ds] = c
66622 r.t = self.t + ds + 1
66623 r.s = self.s
66624 r.clamp()
66625 }
66626
66627 // (protected) r = this >> n
66628 function bnpRShiftTo(n, r) {
66629 var self = this
66630 r.s = self.s
66631 var ds = Math.floor(n / self.DB)
66632 if (ds >= self.t) {
66633 r.t = 0
66634 return
66635 }
66636 var bs = n % self.DB
66637 var cbs = self.DB - bs
66638 var bm = (1 << bs) - 1
66639 r[0] = self[ds] >> bs
66640 for (var i = ds + 1; i < self.t; ++i) {
66641 r[i - ds - 1] |= (self[i] & bm) << cbs
66642 r[i - ds] = self[i] >> bs
66643 }
66644 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
66645 r.t = self.t - ds
66646 r.clamp()
66647 }
66648
66649 // (protected) r = this - a
66650 function bnpSubTo(a, r) {
66651 var self = this
66652 var i = 0,
66653 c = 0,
66654 m = Math.min(a.t, self.t)
66655 while (i < m) {
66656 c += self[i] - a[i]
66657 r[i++] = c & self.DM
66658 c >>= self.DB
66659 }
66660 if (a.t < self.t) {
66661 c -= a.s
66662 while (i < self.t) {
66663 c += self[i]
66664 r[i++] = c & self.DM
66665 c >>= self.DB
66666 }
66667 c += self.s
66668 } else {
66669 c += self.s
66670 while (i < a.t) {
66671 c -= a[i]
66672 r[i++] = c & self.DM
66673 c >>= self.DB
66674 }
66675 c -= a.s
66676 }
66677 r.s = (c < 0) ? -1 : 0
66678 if (c < -1) r[i++] = self.DV + c
66679 else if (c > 0) r[i++] = c
66680 r.t = i
66681 r.clamp()
66682 }
66683
66684 // (protected) r = this * a, r != this,a (HAC 14.12)
66685 // "this" should be the larger one if appropriate.
66686 function bnpMultiplyTo(a, r) {
66687 var x = this.abs(),
66688 y = a.abs()
66689 var i = x.t
66690 r.t = i + y.t
66691 while (--i >= 0) r[i] = 0
66692 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
66693 r.s = 0
66694 r.clamp()
66695 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
66696 }
66697
66698 // (protected) r = this^2, r != this (HAC 14.16)
66699 function bnpSquareTo(r) {
66700 var x = this.abs()
66701 var i = r.t = 2 * x.t
66702 while (--i >= 0) r[i] = 0
66703 for (i = 0; i < x.t - 1; ++i) {
66704 var c = x.am(i, x[i], r, 2 * i, 0, 1)
66705 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
66706 r[i + x.t] -= x.DV
66707 r[i + x.t + 1] = 1
66708 }
66709 }
66710 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
66711 r.s = 0
66712 r.clamp()
66713 }
66714
66715 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
66716 // r != q, this != m. q or r may be null.
66717 function bnpDivRemTo(m, q, r) {
66718 var self = this
66719 var pm = m.abs()
66720 if (pm.t <= 0) return
66721 var pt = self.abs()
66722 if (pt.t < pm.t) {
66723 if (q != null) q.fromInt(0)
66724 if (r != null) self.copyTo(r)
66725 return
66726 }
66727 if (r == null) r = new BigInteger()
66728 var y = new BigInteger(),
66729 ts = self.s,
66730 ms = m.s
66731 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
66732 if (nsh > 0) {
66733 pm.lShiftTo(nsh, y)
66734 pt.lShiftTo(nsh, r)
66735 } else {
66736 pm.copyTo(y)
66737 pt.copyTo(r)
66738 }
66739 var ys = y.t
66740 var y0 = y[ys - 1]
66741 if (y0 == 0) return
66742 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
66743 var d1 = self.FV / yt,
66744 d2 = (1 << self.F1) / yt,
66745 e = 1 << self.F2
66746 var i = r.t,
66747 j = i - ys,
66748 t = (q == null) ? new BigInteger() : q
66749 y.dlShiftTo(j, t)
66750 if (r.compareTo(t) >= 0) {
66751 r[r.t++] = 1
66752 r.subTo(t, r)
66753 }
66754 BigInteger.ONE.dlShiftTo(ys, t)
66755 t.subTo(y, y); // "negative" y so we can replace sub with am later
66756 while (y.t < ys) y[y.t++] = 0
66757 while (--j >= 0) {
66758 // Estimate quotient digit
66759 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
66760 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
66761 y.dlShiftTo(j, t)
66762 r.subTo(t, r)
66763 while (r[i] < --qd) r.subTo(t, r)
66764 }
66765 }
66766 if (q != null) {
66767 r.drShiftTo(ys, q)
66768 if (ts != ms) BigInteger.ZERO.subTo(q, q)
66769 }
66770 r.t = ys
66771 r.clamp()
66772 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
66773 if (ts < 0) BigInteger.ZERO.subTo(r, r)
66774 }
66775
66776 // (public) this mod a
66777 function bnMod(a) {
66778 var r = new BigInteger()
66779 this.abs()
66780 .divRemTo(a, null, r)
66781 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
66782 return r
66783 }
66784
66785 // Modular reduction using "classic" algorithm
66786 function Classic(m) {
66787 this.m = m
66788 }
66789
66790 function cConvert(x) {
66791 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
66792 else return x
66793 }
66794
66795 function cRevert(x) {
66796 return x
66797 }
66798
66799 function cReduce(x) {
66800 x.divRemTo(this.m, null, x)
66801 }
66802
66803 function cMulTo(x, y, r) {
66804 x.multiplyTo(y, r)
66805 this.reduce(r)
66806 }
66807
66808 function cSqrTo(x, r) {
66809 x.squareTo(r)
66810 this.reduce(r)
66811 }
66812
66813 Classic.prototype.convert = cConvert
66814 Classic.prototype.revert = cRevert
66815 Classic.prototype.reduce = cReduce
66816 Classic.prototype.mulTo = cMulTo
66817 Classic.prototype.sqrTo = cSqrTo
66818
66819 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
66820 // justification:
66821 // xy == 1 (mod m)
66822 // xy = 1+km
66823 // xy(2-xy) = (1+km)(1-km)
66824 // x[y(2-xy)] = 1-k^2m^2
66825 // x[y(2-xy)] == 1 (mod m^2)
66826 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
66827 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
66828 // JS multiply "overflows" differently from C/C++, so care is needed here.
66829 function bnpInvDigit() {
66830 if (this.t < 1) return 0
66831 var x = this[0]
66832 if ((x & 1) == 0) return 0
66833 var y = x & 3; // y == 1/x mod 2^2
66834 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
66835 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
66836 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
66837 // last step - calculate inverse mod DV directly
66838 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
66839 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
66840 // we really want the negative inverse, and -DV < y < DV
66841 return (y > 0) ? this.DV - y : -y
66842 }
66843
66844 // Montgomery reduction
66845 function Montgomery(m) {
66846 this.m = m
66847 this.mp = m.invDigit()
66848 this.mpl = this.mp & 0x7fff
66849 this.mph = this.mp >> 15
66850 this.um = (1 << (m.DB - 15)) - 1
66851 this.mt2 = 2 * m.t
66852 }
66853
66854 // xR mod m
66855 function montConvert(x) {
66856 var r = new BigInteger()
66857 x.abs()
66858 .dlShiftTo(this.m.t, r)
66859 r.divRemTo(this.m, null, r)
66860 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
66861 return r
66862 }
66863
66864 // x/R mod m
66865 function montRevert(x) {
66866 var r = new BigInteger()
66867 x.copyTo(r)
66868 this.reduce(r)
66869 return r
66870 }
66871
66872 // x = x/R mod m (HAC 14.32)
66873 function montReduce(x) {
66874 while (x.t <= this.mt2) // pad x so am has enough room later
66875 x[x.t++] = 0
66876 for (var i = 0; i < this.m.t; ++i) {
66877 // faster way of calculating u0 = x[i]*mp mod DV
66878 var j = x[i] & 0x7fff
66879 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
66880 // use am to combine the multiply-shift-add into one call
66881 j = i + this.m.t
66882 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
66883 // propagate carry
66884 while (x[j] >= x.DV) {
66885 x[j] -= x.DV
66886 x[++j]++
66887 }
66888 }
66889 x.clamp()
66890 x.drShiftTo(this.m.t, x)
66891 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
66892 }
66893
66894 // r = "x^2/R mod m"; x != r
66895 function montSqrTo(x, r) {
66896 x.squareTo(r)
66897 this.reduce(r)
66898 }
66899
66900 // r = "xy/R mod m"; x,y != r
66901 function montMulTo(x, y, r) {
66902 x.multiplyTo(y, r)
66903 this.reduce(r)
66904 }
66905
66906 Montgomery.prototype.convert = montConvert
66907 Montgomery.prototype.revert = montRevert
66908 Montgomery.prototype.reduce = montReduce
66909 Montgomery.prototype.mulTo = montMulTo
66910 Montgomery.prototype.sqrTo = montSqrTo
66911
66912 // (protected) true iff this is even
66913 function bnpIsEven() {
66914 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
66915 }
66916
66917 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
66918 function bnpExp(e, z) {
66919 if (e > 0xffffffff || e < 1) return BigInteger.ONE
66920 var r = new BigInteger(),
66921 r2 = new BigInteger(),
66922 g = z.convert(this),
66923 i = nbits(e) - 1
66924 g.copyTo(r)
66925 while (--i >= 0) {
66926 z.sqrTo(r, r2)
66927 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
66928 else {
66929 var t = r
66930 r = r2
66931 r2 = t
66932 }
66933 }
66934 return z.revert(r)
66935 }
66936
66937 // (public) this^e % m, 0 <= e < 2^32
66938 function bnModPowInt(e, m) {
66939 var z
66940 if (e < 256 || m.isEven()) z = new Classic(m)
66941 else z = new Montgomery(m)
66942 return this.exp(e, z)
66943 }
66944
66945 // protected
66946 proto.copyTo = bnpCopyTo
66947 proto.fromInt = bnpFromInt
66948 proto.fromString = bnpFromString
66949 proto.clamp = bnpClamp
66950 proto.dlShiftTo = bnpDLShiftTo
66951 proto.drShiftTo = bnpDRShiftTo
66952 proto.lShiftTo = bnpLShiftTo
66953 proto.rShiftTo = bnpRShiftTo
66954 proto.subTo = bnpSubTo
66955 proto.multiplyTo = bnpMultiplyTo
66956 proto.squareTo = bnpSquareTo
66957 proto.divRemTo = bnpDivRemTo
66958 proto.invDigit = bnpInvDigit
66959 proto.isEven = bnpIsEven
66960 proto.exp = bnpExp
66961
66962 // public
66963 proto.toString = bnToString
66964 proto.negate = bnNegate
66965 proto.abs = bnAbs
66966 proto.compareTo = bnCompareTo
66967 proto.bitLength = bnBitLength
66968 proto.byteLength = bnByteLength
66969 proto.mod = bnMod
66970 proto.modPowInt = bnModPowInt
66971
66972 // (public)
66973 function bnClone() {
66974 var r = new BigInteger()
66975 this.copyTo(r)
66976 return r
66977 }
66978
66979 // (public) return value as integer
66980 function bnIntValue() {
66981 if (this.s < 0) {
66982 if (this.t == 1) return this[0] - this.DV
66983 else if (this.t == 0) return -1
66984 } else if (this.t == 1) return this[0]
66985 else if (this.t == 0) return 0
66986 // assumes 16 < DB < 32
66987 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
66988 }
66989
66990 // (public) return value as byte
66991 function bnByteValue() {
66992 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
66993 }
66994
66995 // (public) return value as short (assumes DB>=16)
66996 function bnShortValue() {
66997 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
66998 }
66999
67000 // (protected) return x s.t. r^x < DV
67001 function bnpChunkSize(r) {
67002 return Math.floor(Math.LN2 * this.DB / Math.log(r))
67003 }
67004
67005 // (public) 0 if this == 0, 1 if this > 0
67006 function bnSigNum() {
67007 if (this.s < 0) return -1
67008 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
67009 else return 1
67010 }
67011
67012 // (protected) convert to radix string
67013 function bnpToRadix(b) {
67014 if (b == null) b = 10
67015 if (this.signum() == 0 || b < 2 || b > 36) return "0"
67016 var cs = this.chunkSize(b)
67017 var a = Math.pow(b, cs)
67018 var d = nbv(a),
67019 y = new BigInteger(),
67020 z = new BigInteger(),
67021 r = ""
67022 this.divRemTo(d, y, z)
67023 while (y.signum() > 0) {
67024 r = (a + z.intValue())
67025 .toString(b)
67026 .substr(1) + r
67027 y.divRemTo(d, y, z)
67028 }
67029 return z.intValue()
67030 .toString(b) + r
67031 }
67032
67033 // (protected) convert from radix string
67034 function bnpFromRadix(s, b) {
67035 var self = this
67036 self.fromInt(0)
67037 if (b == null) b = 10
67038 var cs = self.chunkSize(b)
67039 var d = Math.pow(b, cs),
67040 mi = false,
67041 j = 0,
67042 w = 0
67043 for (var i = 0; i < s.length; ++i) {
67044 var x = intAt(s, i)
67045 if (x < 0) {
67046 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
67047 continue
67048 }
67049 w = b * w + x
67050 if (++j >= cs) {
67051 self.dMultiply(d)
67052 self.dAddOffset(w, 0)
67053 j = 0
67054 w = 0
67055 }
67056 }
67057 if (j > 0) {
67058 self.dMultiply(Math.pow(b, j))
67059 self.dAddOffset(w, 0)
67060 }
67061 if (mi) BigInteger.ZERO.subTo(self, self)
67062 }
67063
67064 // (protected) alternate constructor
67065 function bnpFromNumber(a, b, c) {
67066 var self = this
67067 if ("number" == typeof b) {
67068 // new BigInteger(int,int,RNG)
67069 if (a < 2) self.fromInt(1)
67070 else {
67071 self.fromNumber(a, c)
67072 if (!self.testBit(a - 1)) // force MSB set
67073 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
67074 if (self.isEven()) self.dAddOffset(1, 0); // force odd
67075 while (!self.isProbablePrime(b)) {
67076 self.dAddOffset(2, 0)
67077 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
67078 }
67079 }
67080 } else {
67081 // new BigInteger(int,RNG)
67082 var x = new Array(),
67083 t = a & 7
67084 x.length = (a >> 3) + 1
67085 b.nextBytes(x)
67086 if (t > 0) x[0] &= ((1 << t) - 1)
67087 else x[0] = 0
67088 self.fromString(x, 256)
67089 }
67090 }
67091
67092 // (public) convert to bigendian byte array
67093 function bnToByteArray() {
67094 var self = this
67095 var i = self.t,
67096 r = new Array()
67097 r[0] = self.s
67098 var p = self.DB - (i * self.DB) % 8,
67099 d, k = 0
67100 if (i-- > 0) {
67101 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
67102 r[k++] = d | (self.s << (self.DB - p))
67103 while (i >= 0) {
67104 if (p < 8) {
67105 d = (self[i] & ((1 << p) - 1)) << (8 - p)
67106 d |= self[--i] >> (p += self.DB - 8)
67107 } else {
67108 d = (self[i] >> (p -= 8)) & 0xff
67109 if (p <= 0) {
67110 p += self.DB
67111 --i
67112 }
67113 }
67114 if ((d & 0x80) != 0) d |= -256
67115 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
67116 if (k > 0 || d != self.s) r[k++] = d
67117 }
67118 }
67119 return r
67120 }
67121
67122 function bnEquals(a) {
67123 return (this.compareTo(a) == 0)
67124 }
67125
67126 function bnMin(a) {
67127 return (this.compareTo(a) < 0) ? this : a
67128 }
67129
67130 function bnMax(a) {
67131 return (this.compareTo(a) > 0) ? this : a
67132 }
67133
67134 // (protected) r = this op a (bitwise)
67135 function bnpBitwiseTo(a, op, r) {
67136 var self = this
67137 var i, f, m = Math.min(a.t, self.t)
67138 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
67139 if (a.t < self.t) {
67140 f = a.s & self.DM
67141 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
67142 r.t = self.t
67143 } else {
67144 f = self.s & self.DM
67145 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
67146 r.t = a.t
67147 }
67148 r.s = op(self.s, a.s)
67149 r.clamp()
67150 }
67151
67152 // (public) this & a
67153 function op_and(x, y) {
67154 return x & y
67155 }
67156
67157 function bnAnd(a) {
67158 var r = new BigInteger()
67159 this.bitwiseTo(a, op_and, r)
67160 return r
67161 }
67162
67163 // (public) this | a
67164 function op_or(x, y) {
67165 return x | y
67166 }
67167
67168 function bnOr(a) {
67169 var r = new BigInteger()
67170 this.bitwiseTo(a, op_or, r)
67171 return r
67172 }
67173
67174 // (public) this ^ a
67175 function op_xor(x, y) {
67176 return x ^ y
67177 }
67178
67179 function bnXor(a) {
67180 var r = new BigInteger()
67181 this.bitwiseTo(a, op_xor, r)
67182 return r
67183 }
67184
67185 // (public) this & ~a
67186 function op_andnot(x, y) {
67187 return x & ~y
67188 }
67189
67190 function bnAndNot(a) {
67191 var r = new BigInteger()
67192 this.bitwiseTo(a, op_andnot, r)
67193 return r
67194 }
67195
67196 // (public) ~this
67197 function bnNot() {
67198 var r = new BigInteger()
67199 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
67200 r.t = this.t
67201 r.s = ~this.s
67202 return r
67203 }
67204
67205 // (public) this << n
67206 function bnShiftLeft(n) {
67207 var r = new BigInteger()
67208 if (n < 0) this.rShiftTo(-n, r)
67209 else this.lShiftTo(n, r)
67210 return r
67211 }
67212
67213 // (public) this >> n
67214 function bnShiftRight(n) {
67215 var r = new BigInteger()
67216 if (n < 0) this.lShiftTo(-n, r)
67217 else this.rShiftTo(n, r)
67218 return r
67219 }
67220
67221 // return index of lowest 1-bit in x, x < 2^31
67222 function lbit(x) {
67223 if (x == 0) return -1
67224 var r = 0
67225 if ((x & 0xffff) == 0) {
67226 x >>= 16
67227 r += 16
67228 }
67229 if ((x & 0xff) == 0) {
67230 x >>= 8
67231 r += 8
67232 }
67233 if ((x & 0xf) == 0) {
67234 x >>= 4
67235 r += 4
67236 }
67237 if ((x & 3) == 0) {
67238 x >>= 2
67239 r += 2
67240 }
67241 if ((x & 1) == 0)++r
67242 return r
67243 }
67244
67245 // (public) returns index of lowest 1-bit (or -1 if none)
67246 function bnGetLowestSetBit() {
67247 for (var i = 0; i < this.t; ++i)
67248 if (this[i] != 0) return i * this.DB + lbit(this[i])
67249 if (this.s < 0) return this.t * this.DB
67250 return -1
67251 }
67252
67253 // return number of 1 bits in x
67254 function cbit(x) {
67255 var r = 0
67256 while (x != 0) {
67257 x &= x - 1
67258 ++r
67259 }
67260 return r
67261 }
67262
67263 // (public) return number of set bits
67264 function bnBitCount() {
67265 var r = 0,
67266 x = this.s & this.DM
67267 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
67268 return r
67269 }
67270
67271 // (public) true iff nth bit is set
67272 function bnTestBit(n) {
67273 var j = Math.floor(n / this.DB)
67274 if (j >= this.t) return (this.s != 0)
67275 return ((this[j] & (1 << (n % this.DB))) != 0)
67276 }
67277
67278 // (protected) this op (1<<n)
67279 function bnpChangeBit(n, op) {
67280 var r = BigInteger.ONE.shiftLeft(n)
67281 this.bitwiseTo(r, op, r)
67282 return r
67283 }
67284
67285 // (public) this | (1<<n)
67286 function bnSetBit(n) {
67287 return this.changeBit(n, op_or)
67288 }
67289
67290 // (public) this & ~(1<<n)
67291 function bnClearBit(n) {
67292 return this.changeBit(n, op_andnot)
67293 }
67294
67295 // (public) this ^ (1<<n)
67296 function bnFlipBit(n) {
67297 return this.changeBit(n, op_xor)
67298 }
67299
67300 // (protected) r = this + a
67301 function bnpAddTo(a, r) {
67302 var self = this
67303
67304 var i = 0,
67305 c = 0,
67306 m = Math.min(a.t, self.t)
67307 while (i < m) {
67308 c += self[i] + a[i]
67309 r[i++] = c & self.DM
67310 c >>= self.DB
67311 }
67312 if (a.t < self.t) {
67313 c += a.s
67314 while (i < self.t) {
67315 c += self[i]
67316 r[i++] = c & self.DM
67317 c >>= self.DB
67318 }
67319 c += self.s
67320 } else {
67321 c += self.s
67322 while (i < a.t) {
67323 c += a[i]
67324 r[i++] = c & self.DM
67325 c >>= self.DB
67326 }
67327 c += a.s
67328 }
67329 r.s = (c < 0) ? -1 : 0
67330 if (c > 0) r[i++] = c
67331 else if (c < -1) r[i++] = self.DV + c
67332 r.t = i
67333 r.clamp()
67334 }
67335
67336 // (public) this + a
67337 function bnAdd(a) {
67338 var r = new BigInteger()
67339 this.addTo(a, r)
67340 return r
67341 }
67342
67343 // (public) this - a
67344 function bnSubtract(a) {
67345 var r = new BigInteger()
67346 this.subTo(a, r)
67347 return r
67348 }
67349
67350 // (public) this * a
67351 function bnMultiply(a) {
67352 var r = new BigInteger()
67353 this.multiplyTo(a, r)
67354 return r
67355 }
67356
67357 // (public) this^2
67358 function bnSquare() {
67359 var r = new BigInteger()
67360 this.squareTo(r)
67361 return r
67362 }
67363
67364 // (public) this / a
67365 function bnDivide(a) {
67366 var r = new BigInteger()
67367 this.divRemTo(a, r, null)
67368 return r
67369 }
67370
67371 // (public) this % a
67372 function bnRemainder(a) {
67373 var r = new BigInteger()
67374 this.divRemTo(a, null, r)
67375 return r
67376 }
67377
67378 // (public) [this/a,this%a]
67379 function bnDivideAndRemainder(a) {
67380 var q = new BigInteger(),
67381 r = new BigInteger()
67382 this.divRemTo(a, q, r)
67383 return new Array(q, r)
67384 }
67385
67386 // (protected) this *= n, this >= 0, 1 < n < DV
67387 function bnpDMultiply(n) {
67388 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
67389 ++this.t
67390 this.clamp()
67391 }
67392
67393 // (protected) this += n << w words, this >= 0
67394 function bnpDAddOffset(n, w) {
67395 if (n == 0) return
67396 while (this.t <= w) this[this.t++] = 0
67397 this[w] += n
67398 while (this[w] >= this.DV) {
67399 this[w] -= this.DV
67400 if (++w >= this.t) this[this.t++] = 0
67401 ++this[w]
67402 }
67403 }
67404
67405 // A "null" reducer
67406 function NullExp() {}
67407
67408 function nNop(x) {
67409 return x
67410 }
67411
67412 function nMulTo(x, y, r) {
67413 x.multiplyTo(y, r)
67414 }
67415
67416 function nSqrTo(x, r) {
67417 x.squareTo(r)
67418 }
67419
67420 NullExp.prototype.convert = nNop
67421 NullExp.prototype.revert = nNop
67422 NullExp.prototype.mulTo = nMulTo
67423 NullExp.prototype.sqrTo = nSqrTo
67424
67425 // (public) this^e
67426 function bnPow(e) {
67427 return this.exp(e, new NullExp())
67428 }
67429
67430 // (protected) r = lower n words of "this * a", a.t <= n
67431 // "this" should be the larger one if appropriate.
67432 function bnpMultiplyLowerTo(a, n, r) {
67433 var i = Math.min(this.t + a.t, n)
67434 r.s = 0; // assumes a,this >= 0
67435 r.t = i
67436 while (i > 0) r[--i] = 0
67437 var j
67438 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
67439 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
67440 r.clamp()
67441 }
67442
67443 // (protected) r = "this * a" without lower n words, n > 0
67444 // "this" should be the larger one if appropriate.
67445 function bnpMultiplyUpperTo(a, n, r) {
67446 --n
67447 var i = r.t = this.t + a.t - n
67448 r.s = 0; // assumes a,this >= 0
67449 while (--i >= 0) r[i] = 0
67450 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
67451 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
67452 r.clamp()
67453 r.drShiftTo(1, r)
67454 }
67455
67456 // Barrett modular reduction
67457 function Barrett(m) {
67458 // setup Barrett
67459 this.r2 = new BigInteger()
67460 this.q3 = new BigInteger()
67461 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
67462 this.mu = this.r2.divide(m)
67463 this.m = m
67464 }
67465
67466 function barrettConvert(x) {
67467 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
67468 else if (x.compareTo(this.m) < 0) return x
67469 else {
67470 var r = new BigInteger()
67471 x.copyTo(r)
67472 this.reduce(r)
67473 return r
67474 }
67475 }
67476
67477 function barrettRevert(x) {
67478 return x
67479 }
67480
67481 // x = x mod m (HAC 14.42)
67482 function barrettReduce(x) {
67483 var self = this
67484 x.drShiftTo(self.m.t - 1, self.r2)
67485 if (x.t > self.m.t + 1) {
67486 x.t = self.m.t + 1
67487 x.clamp()
67488 }
67489 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
67490 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
67491 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
67492 x.subTo(self.r2, x)
67493 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
67494 }
67495
67496 // r = x^2 mod m; x != r
67497 function barrettSqrTo(x, r) {
67498 x.squareTo(r)
67499 this.reduce(r)
67500 }
67501
67502 // r = x*y mod m; x,y != r
67503 function barrettMulTo(x, y, r) {
67504 x.multiplyTo(y, r)
67505 this.reduce(r)
67506 }
67507
67508 Barrett.prototype.convert = barrettConvert
67509 Barrett.prototype.revert = barrettRevert
67510 Barrett.prototype.reduce = barrettReduce
67511 Barrett.prototype.mulTo = barrettMulTo
67512 Barrett.prototype.sqrTo = barrettSqrTo
67513
67514 // (public) this^e % m (HAC 14.85)
67515 function bnModPow(e, m) {
67516 var i = e.bitLength(),
67517 k, r = nbv(1),
67518 z
67519 if (i <= 0) return r
67520 else if (i < 18) k = 1
67521 else if (i < 48) k = 3
67522 else if (i < 144) k = 4
67523 else if (i < 768) k = 5
67524 else k = 6
67525 if (i < 8)
67526 z = new Classic(m)
67527 else if (m.isEven())
67528 z = new Barrett(m)
67529 else
67530 z = new Montgomery(m)
67531
67532 // precomputation
67533 var g = new Array(),
67534 n = 3,
67535 k1 = k - 1,
67536 km = (1 << k) - 1
67537 g[1] = z.convert(this)
67538 if (k > 1) {
67539 var g2 = new BigInteger()
67540 z.sqrTo(g[1], g2)
67541 while (n <= km) {
67542 g[n] = new BigInteger()
67543 z.mulTo(g2, g[n - 2], g[n])
67544 n += 2
67545 }
67546 }
67547
67548 var j = e.t - 1,
67549 w, is1 = true,
67550 r2 = new BigInteger(),
67551 t
67552 i = nbits(e[j]) - 1
67553 while (j >= 0) {
67554 if (i >= k1) w = (e[j] >> (i - k1)) & km
67555 else {
67556 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
67557 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
67558 }
67559
67560 n = k
67561 while ((w & 1) == 0) {
67562 w >>= 1
67563 --n
67564 }
67565 if ((i -= n) < 0) {
67566 i += this.DB
67567 --j
67568 }
67569 if (is1) { // ret == 1, don't bother squaring or multiplying it
67570 g[w].copyTo(r)
67571 is1 = false
67572 } else {
67573 while (n > 1) {
67574 z.sqrTo(r, r2)
67575 z.sqrTo(r2, r)
67576 n -= 2
67577 }
67578 if (n > 0) z.sqrTo(r, r2)
67579 else {
67580 t = r
67581 r = r2
67582 r2 = t
67583 }
67584 z.mulTo(r2, g[w], r)
67585 }
67586
67587 while (j >= 0 && (e[j] & (1 << i)) == 0) {
67588 z.sqrTo(r, r2)
67589 t = r
67590 r = r2
67591 r2 = t
67592 if (--i < 0) {
67593 i = this.DB - 1
67594 --j
67595 }
67596 }
67597 }
67598 return z.revert(r)
67599 }
67600
67601 // (public) gcd(this,a) (HAC 14.54)
67602 function bnGCD(a) {
67603 var x = (this.s < 0) ? this.negate() : this.clone()
67604 var y = (a.s < 0) ? a.negate() : a.clone()
67605 if (x.compareTo(y) < 0) {
67606 var t = x
67607 x = y
67608 y = t
67609 }
67610 var i = x.getLowestSetBit(),
67611 g = y.getLowestSetBit()
67612 if (g < 0) return x
67613 if (i < g) g = i
67614 if (g > 0) {
67615 x.rShiftTo(g, x)
67616 y.rShiftTo(g, y)
67617 }
67618 while (x.signum() > 0) {
67619 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
67620 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
67621 if (x.compareTo(y) >= 0) {
67622 x.subTo(y, x)
67623 x.rShiftTo(1, x)
67624 } else {
67625 y.subTo(x, y)
67626 y.rShiftTo(1, y)
67627 }
67628 }
67629 if (g > 0) y.lShiftTo(g, y)
67630 return y
67631 }
67632
67633 // (protected) this % n, n < 2^26
67634 function bnpModInt(n) {
67635 if (n <= 0) return 0
67636 var d = this.DV % n,
67637 r = (this.s < 0) ? n - 1 : 0
67638 if (this.t > 0)
67639 if (d == 0) r = this[0] % n
67640 else
67641 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
67642 return r
67643 }
67644
67645 // (public) 1/this % m (HAC 14.61)
67646 function bnModInverse(m) {
67647 var ac = m.isEven()
67648 if (this.signum() === 0) throw new Error('division by zero')
67649 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
67650 var u = m.clone(),
67651 v = this.clone()
67652 var a = nbv(1),
67653 b = nbv(0),
67654 c = nbv(0),
67655 d = nbv(1)
67656 while (u.signum() != 0) {
67657 while (u.isEven()) {
67658 u.rShiftTo(1, u)
67659 if (ac) {
67660 if (!a.isEven() || !b.isEven()) {
67661 a.addTo(this, a)
67662 b.subTo(m, b)
67663 }
67664 a.rShiftTo(1, a)
67665 } else if (!b.isEven()) b.subTo(m, b)
67666 b.rShiftTo(1, b)
67667 }
67668 while (v.isEven()) {
67669 v.rShiftTo(1, v)
67670 if (ac) {
67671 if (!c.isEven() || !d.isEven()) {
67672 c.addTo(this, c)
67673 d.subTo(m, d)
67674 }
67675 c.rShiftTo(1, c)
67676 } else if (!d.isEven()) d.subTo(m, d)
67677 d.rShiftTo(1, d)
67678 }
67679 if (u.compareTo(v) >= 0) {
67680 u.subTo(v, u)
67681 if (ac) a.subTo(c, a)
67682 b.subTo(d, b)
67683 } else {
67684 v.subTo(u, v)
67685 if (ac) c.subTo(a, c)
67686 d.subTo(b, d)
67687 }
67688 }
67689 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
67690 while (d.compareTo(m) >= 0) d.subTo(m, d)
67691 while (d.signum() < 0) d.addTo(m, d)
67692 return d
67693 }
67694
67695 var lowprimes = [
67696 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
67697 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
67698 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
67699 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
67700 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
67701 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
67702 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
67703 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
67704 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
67705 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
67706 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
67707 ]
67708
67709 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
67710
67711 // (public) test primality with certainty >= 1-.5^t
67712 function bnIsProbablePrime(t) {
67713 var i, x = this.abs()
67714 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
67715 for (i = 0; i < lowprimes.length; ++i)
67716 if (x[0] == lowprimes[i]) return true
67717 return false
67718 }
67719 if (x.isEven()) return false
67720 i = 1
67721 while (i < lowprimes.length) {
67722 var m = lowprimes[i],
67723 j = i + 1
67724 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
67725 m = x.modInt(m)
67726 while (i < j) if (m % lowprimes[i++] == 0) return false
67727 }
67728 return x.millerRabin(t)
67729 }
67730
67731 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
67732 function bnpMillerRabin(t) {
67733 var n1 = this.subtract(BigInteger.ONE)
67734 var k = n1.getLowestSetBit()
67735 if (k <= 0) return false
67736 var r = n1.shiftRight(k)
67737 t = (t + 1) >> 1
67738 if (t > lowprimes.length) t = lowprimes.length
67739 var a = new BigInteger(null)
67740 var j, bases = []
67741 for (var i = 0; i < t; ++i) {
67742 for (;;) {
67743 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
67744 if (bases.indexOf(j) == -1) break
67745 }
67746 bases.push(j)
67747 a.fromInt(j)
67748 var y = a.modPow(r, this)
67749 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
67750 var j = 1
67751 while (j++ < k && y.compareTo(n1) != 0) {
67752 y = y.modPowInt(2, this)
67753 if (y.compareTo(BigInteger.ONE) == 0) return false
67754 }
67755 if (y.compareTo(n1) != 0) return false
67756 }
67757 }
67758 return true
67759 }
67760
67761 // protected
67762 proto.chunkSize = bnpChunkSize
67763 proto.toRadix = bnpToRadix
67764 proto.fromRadix = bnpFromRadix
67765 proto.fromNumber = bnpFromNumber
67766 proto.bitwiseTo = bnpBitwiseTo
67767 proto.changeBit = bnpChangeBit
67768 proto.addTo = bnpAddTo
67769 proto.dMultiply = bnpDMultiply
67770 proto.dAddOffset = bnpDAddOffset
67771 proto.multiplyLowerTo = bnpMultiplyLowerTo
67772 proto.multiplyUpperTo = bnpMultiplyUpperTo
67773 proto.modInt = bnpModInt
67774 proto.millerRabin = bnpMillerRabin
67775
67776 // public
67777 proto.clone = bnClone
67778 proto.intValue = bnIntValue
67779 proto.byteValue = bnByteValue
67780 proto.shortValue = bnShortValue
67781 proto.signum = bnSigNum
67782 proto.toByteArray = bnToByteArray
67783 proto.equals = bnEquals
67784 proto.min = bnMin
67785 proto.max = bnMax
67786 proto.and = bnAnd
67787 proto.or = bnOr
67788 proto.xor = bnXor
67789 proto.andNot = bnAndNot
67790 proto.not = bnNot
67791 proto.shiftLeft = bnShiftLeft
67792 proto.shiftRight = bnShiftRight
67793 proto.getLowestSetBit = bnGetLowestSetBit
67794 proto.bitCount = bnBitCount
67795 proto.testBit = bnTestBit
67796 proto.setBit = bnSetBit
67797 proto.clearBit = bnClearBit
67798 proto.flipBit = bnFlipBit
67799 proto.add = bnAdd
67800 proto.subtract = bnSubtract
67801 proto.multiply = bnMultiply
67802 proto.divide = bnDivide
67803 proto.remainder = bnRemainder
67804 proto.divideAndRemainder = bnDivideAndRemainder
67805 proto.modPow = bnModPow
67806 proto.modInverse = bnModInverse
67807 proto.pow = bnPow
67808 proto.gcd = bnGCD
67809 proto.isProbablePrime = bnIsProbablePrime
67810
67811 // JSBN-specific extension
67812 proto.square = bnSquare
67813
67814 // constants
67815 BigInteger.ZERO = nbv(0)
67816 BigInteger.ONE = nbv(1)
67817 BigInteger.valueOf = nbv
67818
67819 module.exports = BigInteger
67820
67821 },{"../package.json":155}],153:[function(require,module,exports){
67822 (function (Buffer){
67823 // FIXME: Kind of a weird way to throw exceptions, consider removing
67824 var assert = require('assert')
67825 var BigInteger = require('./bigi')
67826
67827 /**
67828 * Turns a byte array into a big integer.
67829 *
67830 * This function will interpret a byte array as a big integer in big
67831 * endian notation.
67832 */
67833 BigInteger.fromByteArrayUnsigned = function(byteArray) {
67834 // BigInteger expects a DER integer conformant byte array
67835 if (byteArray[0] & 0x80) {
67836 return new BigInteger([0].concat(byteArray))
67837 }
67838
67839 return new BigInteger(byteArray)
67840 }
67841
67842 /**
67843 * Returns a byte array representation of the big integer.
67844 *
67845 * This returns the absolute of the contained value in big endian
67846 * form. A value of zero results in an empty array.
67847 */
67848 BigInteger.prototype.toByteArrayUnsigned = function() {
67849 var byteArray = this.toByteArray()
67850 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
67851 }
67852
67853 BigInteger.fromDERInteger = function(byteArray) {
67854 return new BigInteger(byteArray)
67855 }
67856
67857 /*
67858 * Converts BigInteger to a DER integer representation.
67859 *
67860 * The format for this value uses the most significant bit as a sign
67861 * bit. If the most significant bit is already set and the integer is
67862 * positive, a 0x00 is prepended.
67863 *
67864 * Examples:
67865 *
67866 * 0 => 0x00
67867 * 1 => 0x01
67868 * -1 => 0xff
67869 * 127 => 0x7f
67870 * -127 => 0x81
67871 * 128 => 0x0080
67872 * -128 => 0x80
67873 * 255 => 0x00ff
67874 * -255 => 0xff01
67875 * 16300 => 0x3fac
67876 * -16300 => 0xc054
67877 * 62300 => 0x00f35c
67878 * -62300 => 0xff0ca4
67879 */
67880 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
67881
67882 BigInteger.fromBuffer = function(buffer) {
67883 // BigInteger expects a DER integer conformant byte array
67884 if (buffer[0] & 0x80) {
67885 var byteArray = Array.prototype.slice.call(buffer)
67886
67887 return new BigInteger([0].concat(byteArray))
67888 }
67889
67890 return new BigInteger(buffer)
67891 }
67892
67893 BigInteger.fromHex = function(hex) {
67894 if (hex === '') return BigInteger.ZERO
67895
67896 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
67897 assert.equal(hex.length % 2, 0, 'Incomplete hex')
67898 return new BigInteger(hex, 16)
67899 }
67900
67901 BigInteger.prototype.toBuffer = function(size) {
67902 var byteArray = this.toByteArrayUnsigned()
67903 var zeros = []
67904
67905 var padding = size - byteArray.length
67906 while (zeros.length < padding) zeros.push(0)
67907
67908 return new Buffer(zeros.concat(byteArray))
67909 }
67910
67911 BigInteger.prototype.toHex = function(size) {
67912 return this.toBuffer(size).toString('hex')
67913 }
67914
67915 }).call(this,require("buffer").Buffer)
67916 },{"./bigi":152,"assert":15,"buffer":47}],154:[function(require,module,exports){
67917 var BigInteger = require('./bigi')
67918
67919 //addons
67920 require('./convert')
67921
67922 module.exports = BigInteger
67923 },{"./bigi":152,"./convert":153}],155:[function(require,module,exports){
67924 module.exports={
67925 "_args": [
67926 [
67927 "bigi@^1.2.0",
67928 "/home/ian/git/bitcoin/bitcoinjs-bip38"
67929 ]
67930 ],
67931 "_from": "bigi@>=1.2.0 <2.0.0",
67932 "_id": "bigi@1.4.2",
67933 "_inCache": true,
67934 "_installable": true,
67935 "_location": "/bigi",
67936 "_nodeVersion": "6.1.0",
67937 "_npmOperationalInternal": {
67938 "host": "packages-12-west.internal.npmjs.com",
67939 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
67940 },
67941 "_npmUser": {
67942 "email": "jprichardson@gmail.com",
67943 "name": "jprichardson"
67944 },
67945 "_npmVersion": "3.8.6",
67946 "_phantomChildren": {},
67947 "_requested": {
67948 "name": "bigi",
67949 "raw": "bigi@^1.2.0",
67950 "rawSpec": "^1.2.0",
67951 "scope": null,
67952 "spec": ">=1.2.0 <2.0.0",
67953 "type": "range"
67954 },
67955 "_requiredBy": [
67956 "/",
67957 "/ecurve"
67958 ],
67959 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
67960 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
67961 "_shrinkwrap": null,
67962 "_spec": "bigi@^1.2.0",
67963 "_where": "/home/ian/git/bitcoin/bitcoinjs-bip38",
67964 "bugs": {
67965 "url": "https://github.com/cryptocoinjs/bigi/issues"
67966 },
67967 "dependencies": {},
67968 "description": "Big integers.",
67969 "devDependencies": {
67970 "coveralls": "^2.11.2",
67971 "istanbul": "^0.3.5",
67972 "jshint": "^2.5.1",
67973 "mocha": "^2.1.0",
67974 "mochify": "^2.1.0"
67975 },
67976 "directories": {},
67977 "dist": {
67978 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
67979 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
67980 },
67981 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
67982 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
67983 "keywords": [
67984 "cryptography",
67985 "math",
67986 "bitcoin",
67987 "arbitrary",
67988 "precision",
67989 "arithmetic",
67990 "big",
67991 "integer",
67992 "int",
67993 "number",
67994 "biginteger",
67995 "bigint",
67996 "bignumber",
67997 "decimal",
67998 "float"
67999 ],
68000 "main": "./lib/index.js",
68001 "maintainers": [
68002 {
68003 "email": "boydb@midnightdesign.ws",
68004 "name": "midnightlightning"
68005 },
68006 {
68007 "email": "sidazhang89@gmail.com",
68008 "name": "sidazhang"
68009 },
68010 {
68011 "email": "npm@shesek.info",
68012 "name": "nadav"
68013 },
68014 {
68015 "email": "jprichardson@gmail.com",
68016 "name": "jprichardson"
68017 }
68018 ],
68019 "name": "bigi",
68020 "optionalDependencies": {},
68021 "readme": "ERROR: No README data found!",
68022 "repository": {
68023 "type": "git",
68024 "url": "git+https://github.com/cryptocoinjs/bigi.git"
68025 },
68026 "scripts": {
68027 "browser-test": "mochify --wd -R spec",
68028 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
68029 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
68030 "jshint": "jshint --config jshint.json lib/*.js ; true",
68031 "test": "_mocha -- test/*.js",
68032 "unit": "mocha"
68033 },
68034 "testling": {
68035 "browsers": [
68036 "ie/9..latest",
68037 "firefox/latest",
68038 "chrome/latest",
68039 "safari/6.0..latest",
68040 "iphone/6.0..latest",
68041 "android-browser/4.2..latest"
68042 ],
68043 "files": "test/*.js",
68044 "harness": "mocha"
68045 },
68046 "version": "1.4.2"
68047 }
68048
68049 },{}],156:[function(require,module,exports){
68050 // based on the aes implimentation in triple sec
68051 // https://github.com/keybase/triplesec
68052 // which is in turn based on the one from crypto-js
68053 // https://code.google.com/p/crypto-js/
68054
68055 var Buffer = require('safe-buffer').Buffer
68056
68057 function asUInt32Array (buf) {
68058 if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
68059
68060 var len = (buf.length / 4) | 0
68061 var out = new Array(len)
68062
68063 for (var i = 0; i < len; i++) {
68064 out[i] = buf.readUInt32BE(i * 4)
68065 }
68066
68067 return out
68068 }
68069
68070 function scrubVec (v) {
68071 for (var i = 0; i < v.length; v++) {
68072 v[i] = 0
68073 }
68074 }
68075
68076 function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
68077 var SUB_MIX0 = SUB_MIX[0]
68078 var SUB_MIX1 = SUB_MIX[1]
68079 var SUB_MIX2 = SUB_MIX[2]
68080 var SUB_MIX3 = SUB_MIX[3]
68081
68082 var s0 = M[0] ^ keySchedule[0]
68083 var s1 = M[1] ^ keySchedule[1]
68084 var s2 = M[2] ^ keySchedule[2]
68085 var s3 = M[3] ^ keySchedule[3]
68086 var t0, t1, t2, t3
68087 var ksRow = 4
68088
68089 for (var round = 1; round < nRounds; round++) {
68090 t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
68091 t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
68092 t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
68093 t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
68094 s0 = t0
68095 s1 = t1
68096 s2 = t2
68097 s3 = t3
68098 }
68099
68100 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
68101 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
68102 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
68103 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
68104 t0 = t0 >>> 0
68105 t1 = t1 >>> 0
68106 t2 = t2 >>> 0
68107 t3 = t3 >>> 0
68108
68109 return [t0, t1, t2, t3]
68110 }
68111
68112 // AES constants
68113 var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
68114 var G = (function () {
68115 // Compute double table
68116 var d = new Array(256)
68117 for (var j = 0; j < 256; j++) {
68118 if (j < 128) {
68119 d[j] = j << 1
68120 } else {
68121 d[j] = (j << 1) ^ 0x11b
68122 }
68123 }
68124
68125 var SBOX = []
68126 var INV_SBOX = []
68127 var SUB_MIX = [[], [], [], []]
68128 var INV_SUB_MIX = [[], [], [], []]
68129
68130 // Walk GF(2^8)
68131 var x = 0
68132 var xi = 0
68133 for (var i = 0; i < 256; ++i) {
68134 // Compute sbox
68135 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
68136 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
68137 SBOX[x] = sx
68138 INV_SBOX[sx] = x
68139
68140 // Compute multiplication
68141 var x2 = d[x]
68142 var x4 = d[x2]
68143 var x8 = d[x4]
68144
68145 // Compute sub bytes, mix columns tables
68146 var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
68147 SUB_MIX[0][x] = (t << 24) | (t >>> 8)
68148 SUB_MIX[1][x] = (t << 16) | (t >>> 16)
68149 SUB_MIX[2][x] = (t << 8) | (t >>> 24)
68150 SUB_MIX[3][x] = t
68151
68152 // Compute inv sub bytes, inv mix columns tables
68153 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
68154 INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
68155 INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
68156 INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
68157 INV_SUB_MIX[3][sx] = t
68158
68159 if (x === 0) {
68160 x = xi = 1
68161 } else {
68162 x = x2 ^ d[d[d[x8 ^ x2]]]
68163 xi ^= d[d[xi]]
68164 }
68165 }
68166
68167 return {
68168 SBOX: SBOX,
68169 INV_SBOX: INV_SBOX,
68170 SUB_MIX: SUB_MIX,
68171 INV_SUB_MIX: INV_SUB_MIX
68172 }
68173 })()
68174
68175 function AES (key) {
68176 this._key = asUInt32Array(key)
68177 this._reset()
68178 }
68179
68180 AES.blockSize = 4 * 4
68181 AES.keySize = 256 / 8
68182 AES.prototype.blockSize = AES.blockSize
68183 AES.prototype.keySize = AES.keySize
68184 AES.prototype._reset = function () {
68185 var keyWords = this._key
68186 var keySize = keyWords.length
68187 var nRounds = keySize + 6
68188 var ksRows = (nRounds + 1) * 4
68189
68190 var keySchedule = []
68191 for (var k = 0; k < keySize; k++) {
68192 keySchedule[k] = keyWords[k]
68193 }
68194
68195 for (k = keySize; k < ksRows; k++) {
68196 var t = keySchedule[k - 1]
68197
68198 if (k % keySize === 0) {
68199 t = (t << 8) | (t >>> 24)
68200 t =
68201 (G.SBOX[t >>> 24] << 24) |
68202 (G.SBOX[(t >>> 16) & 0xff] << 16) |
68203 (G.SBOX[(t >>> 8) & 0xff] << 8) |
68204 (G.SBOX[t & 0xff])
68205
68206 t ^= RCON[(k / keySize) | 0] << 24
68207 } else if (keySize > 6 && k % keySize === 4) {
68208 t =
68209 (G.SBOX[t >>> 24] << 24) |
68210 (G.SBOX[(t >>> 16) & 0xff] << 16) |
68211 (G.SBOX[(t >>> 8) & 0xff] << 8) |
68212 (G.SBOX[t & 0xff])
68213 }
68214
68215 keySchedule[k] = keySchedule[k - keySize] ^ t
68216 }
68217
68218 var invKeySchedule = []
68219 for (var ik = 0; ik < ksRows; ik++) {
68220 var ksR = ksRows - ik
68221 var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
68222
68223 if (ik < 4 || ksR <= 4) {
68224 invKeySchedule[ik] = tt
68225 } else {
68226 invKeySchedule[ik] =
68227 G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
68228 G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
68229 G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
68230 G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
68231 }
68232 }
68233
68234 this._nRounds = nRounds
68235 this._keySchedule = keySchedule
68236 this._invKeySchedule = invKeySchedule
68237 }
68238
68239 AES.prototype.encryptBlockRaw = function (M) {
68240 M = asUInt32Array(M)
68241 return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
68242 }
68243
68244 AES.prototype.encryptBlock = function (M) {
68245 var out = this.encryptBlockRaw(M)
68246 var buf = Buffer.allocUnsafe(16)
68247 buf.writeUInt32BE(out[0], 0)
68248 buf.writeUInt32BE(out[1], 4)
68249 buf.writeUInt32BE(out[2], 8)
68250 buf.writeUInt32BE(out[3], 12)
68251 return buf
68252 }
68253
68254 AES.prototype.decryptBlock = function (M) {
68255 M = asUInt32Array(M)
68256
68257 // swap
68258 var m1 = M[1]
68259 M[1] = M[3]
68260 M[3] = m1
68261
68262 var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
68263 var buf = Buffer.allocUnsafe(16)
68264 buf.writeUInt32BE(out[0], 0)
68265 buf.writeUInt32BE(out[3], 4)
68266 buf.writeUInt32BE(out[2], 8)
68267 buf.writeUInt32BE(out[1], 12)
68268 return buf
68269 }
68270
68271 AES.prototype.scrub = function () {
68272 scrubVec(this._keySchedule)
68273 scrubVec(this._invKeySchedule)
68274 scrubVec(this._key)
68275 }
68276
68277 module.exports.AES = AES
68278
68279 },{"safe-buffer":193}],157:[function(require,module,exports){
68280 var aes = require('./aes')
68281 var Buffer = require('safe-buffer').Buffer
68282 var Transform = require('cipher-base')
68283 var inherits = require('inherits')
68284 var GHASH = require('./ghash')
68285 var xor = require('buffer-xor')
68286 var incr32 = require('./incr32')
68287
68288 function xorTest (a, b) {
68289 var out = 0
68290 if (a.length !== b.length) out++
68291
68292 var len = Math.min(a.length, b.length)
68293 for (var i = 0; i < len; ++i) {
68294 out += (a[i] ^ b[i])
68295 }
68296
68297 return out
68298 }
68299
68300 function calcIv (self, iv, ck) {
68301 if (iv.length === 12) {
68302 self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])
68303 return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])
68304 }
68305 var ghash = new GHASH(ck)
68306 var len = iv.length
68307 var toPad = len % 16
68308 ghash.update(iv)
68309 if (toPad) {
68310 toPad = 16 - toPad
68311 ghash.update(Buffer.alloc(toPad, 0))
68312 }
68313 ghash.update(Buffer.alloc(8, 0))
68314 var ivBits = len * 8
68315 var tail = Buffer.alloc(8)
68316 tail.writeUIntBE(ivBits, 0, 8)
68317 ghash.update(tail)
68318 self._finID = ghash.state
68319 var out = Buffer.from(self._finID)
68320 incr32(out)
68321 return out
68322 }
68323 function StreamCipher (mode, key, iv, decrypt) {
68324 Transform.call(this)
68325
68326 var h = Buffer.alloc(4, 0)
68327
68328 this._cipher = new aes.AES(key)
68329 var ck = this._cipher.encryptBlock(h)
68330 this._ghash = new GHASH(ck)
68331 iv = calcIv(this, iv, ck)
68332
68333 this._prev = Buffer.from(iv)
68334 this._cache = Buffer.allocUnsafe(0)
68335 this._secCache = Buffer.allocUnsafe(0)
68336 this._decrypt = decrypt
68337 this._alen = 0
68338 this._len = 0
68339 this._mode = mode
68340
68341 this._authTag = null
68342 this._called = false
68343 }
68344
68345 inherits(StreamCipher, Transform)
68346
68347 StreamCipher.prototype._update = function (chunk) {
68348 if (!this._called && this._alen) {
68349 var rump = 16 - (this._alen % 16)
68350 if (rump < 16) {
68351 rump = Buffer.alloc(rump, 0)
68352 this._ghash.update(rump)
68353 }
68354 }
68355
68356 this._called = true
68357 var out = this._mode.encrypt(this, chunk)
68358 if (this._decrypt) {
68359 this._ghash.update(chunk)
68360 } else {
68361 this._ghash.update(out)
68362 }
68363 this._len += chunk.length
68364 return out
68365 }
68366
68367 StreamCipher.prototype._final = function () {
68368 if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')
68369
68370 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
68371 if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')
68372
68373 this._authTag = tag
68374 this._cipher.scrub()
68375 }
68376
68377 StreamCipher.prototype.getAuthTag = function getAuthTag () {
68378 if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')
68379
68380 return this._authTag
68381 }
68382
68383 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
68384 if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')
68385
68386 this._authTag = tag
68387 }
68388
68389 StreamCipher.prototype.setAAD = function setAAD (buf) {
68390 if (this._called) throw new Error('Attempting to set AAD in unsupported state')
68391
68392 this._ghash.update(buf)
68393 this._alen += buf.length
68394 }
68395
68396 module.exports = StreamCipher
68397
68398 },{"./aes":156,"./ghash":161,"./incr32":162,"buffer-xor":176,"cipher-base":178,"inherits":189,"safe-buffer":193}],158:[function(require,module,exports){
68399 var ciphers = require('./encrypter')
68400 var deciphers = require('./decrypter')
68401 var modes = require('./modes/list.json')
68402
68403 function getCiphers () {
68404 return Object.keys(modes)
68405 }
68406
68407 exports.createCipher = exports.Cipher = ciphers.createCipher
68408 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
68409 exports.createDecipher = exports.Decipher = deciphers.createDecipher
68410 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
68411 exports.listCiphers = exports.getCiphers = getCiphers
68412
68413 },{"./decrypter":159,"./encrypter":160,"./modes/list.json":170}],159:[function(require,module,exports){
68414 var AuthCipher = require('./authCipher')
68415 var Buffer = require('safe-buffer').Buffer
68416 var MODES = require('./modes')
68417 var StreamCipher = require('./streamCipher')
68418 var Transform = require('cipher-base')
68419 var aes = require('./aes')
68420 var ebtk = require('evp_bytestokey')
68421 var inherits = require('inherits')
68422
68423 function Decipher (mode, key, iv) {
68424 Transform.call(this)
68425
68426 this._cache = new Splitter()
68427 this._last = void 0
68428 this._cipher = new aes.AES(key)
68429 this._prev = Buffer.from(iv)
68430 this._mode = mode
68431 this._autopadding = true
68432 }
68433
68434 inherits(Decipher, Transform)
68435
68436 Decipher.prototype._update = function (data) {
68437 this._cache.add(data)
68438 var chunk
68439 var thing
68440 var out = []
68441 while ((chunk = this._cache.get(this._autopadding))) {
68442 thing = this._mode.decrypt(this, chunk)
68443 out.push(thing)
68444 }
68445 return Buffer.concat(out)
68446 }
68447
68448 Decipher.prototype._final = function () {
68449 var chunk = this._cache.flush()
68450 if (this._autopadding) {
68451 return unpad(this._mode.decrypt(this, chunk))
68452 } else if (chunk) {
68453 throw new Error('data not multiple of block length')
68454 }
68455 }
68456
68457 Decipher.prototype.setAutoPadding = function (setTo) {
68458 this._autopadding = !!setTo
68459 return this
68460 }
68461
68462 function Splitter () {
68463 this.cache = Buffer.allocUnsafe(0)
68464 }
68465
68466 Splitter.prototype.add = function (data) {
68467 this.cache = Buffer.concat([this.cache, data])
68468 }
68469
68470 Splitter.prototype.get = function (autoPadding) {
68471 var out
68472 if (autoPadding) {
68473 if (this.cache.length > 16) {
68474 out = this.cache.slice(0, 16)
68475 this.cache = this.cache.slice(16)
68476 return out
68477 }
68478 } else {
68479 if (this.cache.length >= 16) {
68480 out = this.cache.slice(0, 16)
68481 this.cache = this.cache.slice(16)
68482 return out
68483 }
68484 }
68485
68486 return null
68487 }
68488
68489 Splitter.prototype.flush = function () {
68490 if (this.cache.length) return this.cache
68491 }
68492
68493 function unpad (last) {
68494 var padded = last[15]
68495 var i = -1
68496 while (++i < padded) {
68497 if (last[(i + (16 - padded))] !== padded) {
68498 throw new Error('unable to decrypt data')
68499 }
68500 }
68501 if (padded === 16) return
68502
68503 return last.slice(0, 16 - padded)
68504 }
68505
68506 function createDecipheriv (suite, password, iv) {
68507 var config = MODES[suite.toLowerCase()]
68508 if (!config) throw new TypeError('invalid suite type')
68509
68510 if (typeof iv === 'string') iv = Buffer.from(iv)
68511 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
68512
68513 if (typeof password === 'string') password = Buffer.from(password)
68514 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
68515
68516 if (config.type === 'stream') {
68517 return new StreamCipher(config.module, password, iv, true)
68518 } else if (config.type === 'auth') {
68519 return new AuthCipher(config.module, password, iv, true)
68520 }
68521
68522 return new Decipher(config.module, password, iv)
68523 }
68524
68525 function createDecipher (suite, password) {
68526 var config = MODES[suite.toLowerCase()]
68527 if (!config) throw new TypeError('invalid suite type')
68528
68529 var keys = ebtk(password, false, config.key, config.iv)
68530 return createDecipheriv(suite, keys.key, keys.iv)
68531 }
68532
68533 exports.createDecipher = createDecipher
68534 exports.createDecipheriv = createDecipheriv
68535
68536 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],160:[function(require,module,exports){
68537 var MODES = require('./modes')
68538 var AuthCipher = require('./authCipher')
68539 var Buffer = require('safe-buffer').Buffer
68540 var StreamCipher = require('./streamCipher')
68541 var Transform = require('cipher-base')
68542 var aes = require('./aes')
68543 var ebtk = require('evp_bytestokey')
68544 var inherits = require('inherits')
68545
68546 function Cipher (mode, key, iv) {
68547 Transform.call(this)
68548
68549 this._cache = new Splitter()
68550 this._cipher = new aes.AES(key)
68551 this._prev = Buffer.from(iv)
68552 this._mode = mode
68553 this._autopadding = true
68554 }
68555
68556 inherits(Cipher, Transform)
68557
68558 Cipher.prototype._update = function (data) {
68559 this._cache.add(data)
68560 var chunk
68561 var thing
68562 var out = []
68563
68564 while ((chunk = this._cache.get())) {
68565 thing = this._mode.encrypt(this, chunk)
68566 out.push(thing)
68567 }
68568
68569 return Buffer.concat(out)
68570 }
68571
68572 var PADDING = Buffer.alloc(16, 0x10)
68573
68574 Cipher.prototype._final = function () {
68575 var chunk = this._cache.flush()
68576 if (this._autopadding) {
68577 chunk = this._mode.encrypt(this, chunk)
68578 this._cipher.scrub()
68579 return chunk
68580 }
68581
68582 if (!chunk.equals(PADDING)) {
68583 this._cipher.scrub()
68584 throw new Error('data not multiple of block length')
68585 }
68586 }
68587
68588 Cipher.prototype.setAutoPadding = function (setTo) {
68589 this._autopadding = !!setTo
68590 return this
68591 }
68592
68593 function Splitter () {
68594 this.cache = Buffer.allocUnsafe(0)
68595 }
68596
68597 Splitter.prototype.add = function (data) {
68598 this.cache = Buffer.concat([this.cache, data])
68599 }
68600
68601 Splitter.prototype.get = function () {
68602 if (this.cache.length > 15) {
68603 var out = this.cache.slice(0, 16)
68604 this.cache = this.cache.slice(16)
68605 return out
68606 }
68607 return null
68608 }
68609
68610 Splitter.prototype.flush = function () {
68611 var len = 16 - this.cache.length
68612 var padBuff = Buffer.allocUnsafe(len)
68613
68614 var i = -1
68615 while (++i < len) {
68616 padBuff.writeUInt8(len, i)
68617 }
68618
68619 return Buffer.concat([this.cache, padBuff])
68620 }
68621
68622 function createCipheriv (suite, password, iv) {
68623 var config = MODES[suite.toLowerCase()]
68624 if (!config) throw new TypeError('invalid suite type')
68625
68626 if (typeof password === 'string') password = Buffer.from(password)
68627 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
68628
68629 if (typeof iv === 'string') iv = Buffer.from(iv)
68630 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
68631
68632 if (config.type === 'stream') {
68633 return new StreamCipher(config.module, password, iv)
68634 } else if (config.type === 'auth') {
68635 return new AuthCipher(config.module, password, iv)
68636 }
68637
68638 return new Cipher(config.module, password, iv)
68639 }
68640
68641 function createCipher (suite, password) {
68642 var config = MODES[suite.toLowerCase()]
68643 if (!config) throw new TypeError('invalid suite type')
68644
68645 var keys = ebtk(password, false, config.key, config.iv)
68646 return createCipheriv(suite, keys.key, keys.iv)
68647 }
68648
68649 exports.createCipheriv = createCipheriv
68650 exports.createCipher = createCipher
68651
68652 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],161:[function(require,module,exports){
68653 var Buffer = require('safe-buffer').Buffer
68654 var ZEROES = Buffer.alloc(16, 0)
68655
68656 function toArray (buf) {
68657 return [
68658 buf.readUInt32BE(0),
68659 buf.readUInt32BE(4),
68660 buf.readUInt32BE(8),
68661 buf.readUInt32BE(12)
68662 ]
68663 }
68664
68665 function fromArray (out) {
68666 var buf = Buffer.allocUnsafe(16)
68667 buf.writeUInt32BE(out[0] >>> 0, 0)
68668 buf.writeUInt32BE(out[1] >>> 0, 4)
68669 buf.writeUInt32BE(out[2] >>> 0, 8)
68670 buf.writeUInt32BE(out[3] >>> 0, 12)
68671 return buf
68672 }
68673
68674 function GHASH (key) {
68675 this.h = key
68676 this.state = Buffer.alloc(16, 0)
68677 this.cache = Buffer.allocUnsafe(0)
68678 }
68679
68680 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
68681 // by Juho Vähä-Herttua
68682 GHASH.prototype.ghash = function (block) {
68683 var i = -1
68684 while (++i < block.length) {
68685 this.state[i] ^= block[i]
68686 }
68687 this._multiply()
68688 }
68689
68690 GHASH.prototype._multiply = function () {
68691 var Vi = toArray(this.h)
68692 var Zi = [0, 0, 0, 0]
68693 var j, xi, lsbVi
68694 var i = -1
68695 while (++i < 128) {
68696 xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0
68697 if (xi) {
68698 // Z_i+1 = Z_i ^ V_i
68699 Zi[0] ^= Vi[0]
68700 Zi[1] ^= Vi[1]
68701 Zi[2] ^= Vi[2]
68702 Zi[3] ^= Vi[3]
68703 }
68704
68705 // Store the value of LSB(V_i)
68706 lsbVi = (Vi[3] & 1) !== 0
68707
68708 // V_i+1 = V_i >> 1
68709 for (j = 3; j > 0; j--) {
68710 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
68711 }
68712 Vi[0] = Vi[0] >>> 1
68713
68714 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
68715 if (lsbVi) {
68716 Vi[0] = Vi[0] ^ (0xe1 << 24)
68717 }
68718 }
68719 this.state = fromArray(Zi)
68720 }
68721
68722 GHASH.prototype.update = function (buf) {
68723 this.cache = Buffer.concat([this.cache, buf])
68724 var chunk
68725 while (this.cache.length >= 16) {
68726 chunk = this.cache.slice(0, 16)
68727 this.cache = this.cache.slice(16)
68728 this.ghash(chunk)
68729 }
68730 }
68731
68732 GHASH.prototype.final = function (abl, bl) {
68733 if (this.cache.length) {
68734 this.ghash(Buffer.concat([this.cache, ZEROES], 16))
68735 }
68736
68737 this.ghash(fromArray([0, abl, 0, bl]))
68738 return this.state
68739 }
68740
68741 module.exports = GHASH
68742
68743 },{"safe-buffer":193}],162:[function(require,module,exports){
68744 function incr32 (iv) {
68745 var len = iv.length
68746 var item
68747 while (len--) {
68748 item = iv.readUInt8(len)
68749 if (item === 255) {
68750 iv.writeUInt8(0, len)
68751 } else {
68752 item++
68753 iv.writeUInt8(item, len)
68754 break
68755 }
68756 }
68757 }
68758 module.exports = incr32
68759
68760 },{}],163:[function(require,module,exports){
68761 arguments[4][27][0].apply(exports,arguments)
68762 },{"buffer-xor":176,"dup":27}],164:[function(require,module,exports){
68763 var Buffer = require('safe-buffer').Buffer
68764 var xor = require('buffer-xor')
68765
68766 function encryptStart (self, data, decrypt) {
68767 var len = data.length
68768 var out = xor(data, self._cache)
68769 self._cache = self._cache.slice(len)
68770 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
68771 return out
68772 }
68773
68774 exports.encrypt = function (self, data, decrypt) {
68775 var out = Buffer.allocUnsafe(0)
68776 var len
68777
68778 while (data.length) {
68779 if (self._cache.length === 0) {
68780 self._cache = self._cipher.encryptBlock(self._prev)
68781 self._prev = Buffer.allocUnsafe(0)
68782 }
68783
68784 if (self._cache.length <= data.length) {
68785 len = self._cache.length
68786 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
68787 data = data.slice(len)
68788 } else {
68789 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
68790 break
68791 }
68792 }
68793
68794 return out
68795 }
68796
68797 },{"buffer-xor":176,"safe-buffer":193}],165:[function(require,module,exports){
68798 var Buffer = require('safe-buffer').Buffer
68799
68800 function encryptByte (self, byteParam, decrypt) {
68801 var pad
68802 var i = -1
68803 var len = 8
68804 var out = 0
68805 var bit, value
68806 while (++i < len) {
68807 pad = self._cipher.encryptBlock(self._prev)
68808 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
68809 value = pad[0] ^ bit
68810 out += ((value & 0x80) >> (i % 8))
68811 self._prev = shiftIn(self._prev, decrypt ? bit : value)
68812 }
68813 return out
68814 }
68815
68816 function shiftIn (buffer, value) {
68817 var len = buffer.length
68818 var i = -1
68819 var out = Buffer.allocUnsafe(buffer.length)
68820 buffer = Buffer.concat([buffer, Buffer.from([value])])
68821
68822 while (++i < len) {
68823 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
68824 }
68825
68826 return out
68827 }
68828
68829 exports.encrypt = function (self, chunk, decrypt) {
68830 var len = chunk.length
68831 var out = Buffer.allocUnsafe(len)
68832 var i = -1
68833
68834 while (++i < len) {
68835 out[i] = encryptByte(self, chunk[i], decrypt)
68836 }
68837
68838 return out
68839 }
68840
68841 },{"safe-buffer":193}],166:[function(require,module,exports){
68842 var Buffer = require('safe-buffer').Buffer
68843
68844 function encryptByte (self, byteParam, decrypt) {
68845 var pad = self._cipher.encryptBlock(self._prev)
68846 var out = pad[0] ^ byteParam
68847
68848 self._prev = Buffer.concat([
68849 self._prev.slice(1),
68850 Buffer.from([decrypt ? byteParam : out])
68851 ])
68852
68853 return out
68854 }
68855
68856 exports.encrypt = function (self, chunk, decrypt) {
68857 var len = chunk.length
68858 var out = Buffer.allocUnsafe(len)
68859 var i = -1
68860
68861 while (++i < len) {
68862 out[i] = encryptByte(self, chunk[i], decrypt)
68863 }
68864
68865 return out
68866 }
68867
68868 },{"safe-buffer":193}],167:[function(require,module,exports){
68869 var xor = require('buffer-xor')
68870 var Buffer = require('safe-buffer').Buffer
68871 var incr32 = require('../incr32')
68872
68873 function getBlock (self) {
68874 var out = self._cipher.encryptBlockRaw(self._prev)
68875 incr32(self._prev)
68876 return out
68877 }
68878
68879 var blockSize = 16
68880 exports.encrypt = function (self, chunk) {
68881 var chunkNum = Math.ceil(chunk.length / blockSize)
68882 var start = self._cache.length
68883 self._cache = Buffer.concat([
68884 self._cache,
68885 Buffer.allocUnsafe(chunkNum * blockSize)
68886 ])
68887 for (var i = 0; i < chunkNum; i++) {
68888 var out = getBlock(self)
68889 var offset = start + i * blockSize
68890 self._cache.writeUInt32BE(out[0], offset + 0)
68891 self._cache.writeUInt32BE(out[1], offset + 4)
68892 self._cache.writeUInt32BE(out[2], offset + 8)
68893 self._cache.writeUInt32BE(out[3], offset + 12)
68894 }
68895 var pad = self._cache.slice(0, chunk.length)
68896 self._cache = self._cache.slice(chunk.length)
68897 return xor(chunk, pad)
68898 }
68899
68900 },{"../incr32":162,"buffer-xor":176,"safe-buffer":193}],168:[function(require,module,exports){
68901 exports.encrypt = function (self, block) {
68902 return self._cipher.encryptBlock(block)
68903 }
68904
68905 exports.decrypt = function (self, block) {
68906 return self._cipher.decryptBlock(block)
68907 }
68908
68909 },{}],169:[function(require,module,exports){
68910 var modeModules = {
68911 ECB: require('./ecb'),
68912 CBC: require('./cbc'),
68913 CFB: require('./cfb'),
68914 CFB8: require('./cfb8'),
68915 CFB1: require('./cfb1'),
68916 OFB: require('./ofb'),
68917 CTR: require('./ctr'),
68918 GCM: require('./ctr')
68919 }
68920
68921 var modes = require('./list.json')
68922
68923 for (var key in modes) {
68924 modes[key].module = modeModules[modes[key].mode]
68925 }
68926
68927 module.exports = modes
68928
68929 },{"./cbc":163,"./cfb":164,"./cfb1":165,"./cfb8":166,"./ctr":167,"./ecb":168,"./list.json":170,"./ofb":171}],170:[function(require,module,exports){
68930 module.exports={
68931 "aes-128-ecb": {
68932 "cipher": "AES",
68933 "key": 128,
68934 "iv": 0,
68935 "mode": "ECB",
68936 "type": "block"
68937 },
68938 "aes-192-ecb": {
68939 "cipher": "AES",
68940 "key": 192,
68941 "iv": 0,
68942 "mode": "ECB",
68943 "type": "block"
68944 },
68945 "aes-256-ecb": {
68946 "cipher": "AES",
68947 "key": 256,
68948 "iv": 0,
68949 "mode": "ECB",
68950 "type": "block"
68951 },
68952 "aes-128-cbc": {
68953 "cipher": "AES",
68954 "key": 128,
68955 "iv": 16,
68956 "mode": "CBC",
68957 "type": "block"
68958 },
68959 "aes-192-cbc": {
68960 "cipher": "AES",
68961 "key": 192,
68962 "iv": 16,
68963 "mode": "CBC",
68964 "type": "block"
68965 },
68966 "aes-256-cbc": {
68967 "cipher": "AES",
68968 "key": 256,
68969 "iv": 16,
68970 "mode": "CBC",
68971 "type": "block"
68972 },
68973 "aes128": {
68974 "cipher": "AES",
68975 "key": 128,
68976 "iv": 16,
68977 "mode": "CBC",
68978 "type": "block"
68979 },
68980 "aes192": {
68981 "cipher": "AES",
68982 "key": 192,
68983 "iv": 16,
68984 "mode": "CBC",
68985 "type": "block"
68986 },
68987 "aes256": {
68988 "cipher": "AES",
68989 "key": 256,
68990 "iv": 16,
68991 "mode": "CBC",
68992 "type": "block"
68993 },
68994 "aes-128-cfb": {
68995 "cipher": "AES",
68996 "key": 128,
68997 "iv": 16,
68998 "mode": "CFB",
68999 "type": "stream"
69000 },
69001 "aes-192-cfb": {
69002 "cipher": "AES",
69003 "key": 192,
69004 "iv": 16,
69005 "mode": "CFB",
69006 "type": "stream"
69007 },
69008 "aes-256-cfb": {
69009 "cipher": "AES",
69010 "key": 256,
69011 "iv": 16,
69012 "mode": "CFB",
69013 "type": "stream"
69014 },
69015 "aes-128-cfb8": {
69016 "cipher": "AES",
69017 "key": 128,
69018 "iv": 16,
69019 "mode": "CFB8",
69020 "type": "stream"
69021 },
69022 "aes-192-cfb8": {
69023 "cipher": "AES",
69024 "key": 192,
69025 "iv": 16,
69026 "mode": "CFB8",
69027 "type": "stream"
69028 },
69029 "aes-256-cfb8": {
69030 "cipher": "AES",
69031 "key": 256,
69032 "iv": 16,
69033 "mode": "CFB8",
69034 "type": "stream"
69035 },
69036 "aes-128-cfb1": {
69037 "cipher": "AES",
69038 "key": 128,
69039 "iv": 16,
69040 "mode": "CFB1",
69041 "type": "stream"
69042 },
69043 "aes-192-cfb1": {
69044 "cipher": "AES",
69045 "key": 192,
69046 "iv": 16,
69047 "mode": "CFB1",
69048 "type": "stream"
69049 },
69050 "aes-256-cfb1": {
69051 "cipher": "AES",
69052 "key": 256,
69053 "iv": 16,
69054 "mode": "CFB1",
69055 "type": "stream"
69056 },
69057 "aes-128-ofb": {
69058 "cipher": "AES",
69059 "key": 128,
69060 "iv": 16,
69061 "mode": "OFB",
69062 "type": "stream"
69063 },
69064 "aes-192-ofb": {
69065 "cipher": "AES",
69066 "key": 192,
69067 "iv": 16,
69068 "mode": "OFB",
69069 "type": "stream"
69070 },
69071 "aes-256-ofb": {
69072 "cipher": "AES",
69073 "key": 256,
69074 "iv": 16,
69075 "mode": "OFB",
69076 "type": "stream"
69077 },
69078 "aes-128-ctr": {
69079 "cipher": "AES",
69080 "key": 128,
69081 "iv": 16,
69082 "mode": "CTR",
69083 "type": "stream"
69084 },
69085 "aes-192-ctr": {
69086 "cipher": "AES",
69087 "key": 192,
69088 "iv": 16,
69089 "mode": "CTR",
69090 "type": "stream"
69091 },
69092 "aes-256-ctr": {
69093 "cipher": "AES",
69094 "key": 256,
69095 "iv": 16,
69096 "mode": "CTR",
69097 "type": "stream"
69098 },
69099 "aes-128-gcm": {
69100 "cipher": "AES",
69101 "key": 128,
69102 "iv": 12,
69103 "mode": "GCM",
69104 "type": "auth"
69105 },
69106 "aes-192-gcm": {
69107 "cipher": "AES",
69108 "key": 192,
69109 "iv": 12,
69110 "mode": "GCM",
69111 "type": "auth"
69112 },
69113 "aes-256-gcm": {
69114 "cipher": "AES",
69115 "key": 256,
69116 "iv": 12,
69117 "mode": "GCM",
69118 "type": "auth"
69119 }
69120 }
69121
69122 },{}],171:[function(require,module,exports){
69123 arguments[4][33][0].apply(exports,arguments)
69124 },{"buffer":47,"buffer-xor":176,"dup":33}],172:[function(require,module,exports){
69125 var aes = require('./aes')
69126 var Buffer = require('safe-buffer').Buffer
69127 var Transform = require('cipher-base')
69128 var inherits = require('inherits')
69129
69130 function StreamCipher (mode, key, iv, decrypt) {
69131 Transform.call(this)
69132
69133 this._cipher = new aes.AES(key)
69134 this._prev = Buffer.from(iv)
69135 this._cache = Buffer.allocUnsafe(0)
69136 this._secCache = Buffer.allocUnsafe(0)
69137 this._decrypt = decrypt
69138 this._mode = mode
69139 }
69140
69141 inherits(StreamCipher, Transform)
69142
69143 StreamCipher.prototype._update = function (chunk) {
69144 return this._mode.encrypt(this, chunk, this._decrypt)
69145 }
69146
69147 StreamCipher.prototype._final = function () {
69148 this._cipher.scrub()
69149 }
69150
69151 module.exports = StreamCipher
69152
69153 },{"./aes":156,"cipher-base":178,"inherits":189,"safe-buffer":193}],173:[function(require,module,exports){
69154 var basex = require('base-x')
69155 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
69156
69157 module.exports = basex(ALPHABET)
69158
69159 },{"base-x":151}],174:[function(require,module,exports){
69160 'use strict'
69161
69162 var base58 = require('bs58')
69163 var Buffer = require('safe-buffer').Buffer
69164
69165 module.exports = function (checksumFn) {
69166 // Encode a buffer as a base58-check encoded string
69167 function encode (payload) {
69168 var checksum = checksumFn(payload)
69169
69170 return base58.encode(Buffer.concat([
69171 payload,
69172 checksum
69173 ], payload.length + 4))
69174 }
69175
69176 function decodeRaw (buffer) {
69177 var payload = buffer.slice(0, -4)
69178 var checksum = buffer.slice(-4)
69179 var newChecksum = checksumFn(payload)
69180
69181 if (checksum[0] ^ newChecksum[0] |
69182 checksum[1] ^ newChecksum[1] |
69183 checksum[2] ^ newChecksum[2] |
69184 checksum[3] ^ newChecksum[3]) return
69185
69186 return payload
69187 }
69188
69189 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
69190 function decodeUnsafe (string) {
69191 var buffer = base58.decodeUnsafe(string)
69192 if (!buffer) return
69193
69194 return decodeRaw(buffer)
69195 }
69196
69197 function decode (string) {
69198 var buffer = base58.decode(string)
69199 var payload = decodeRaw(buffer, checksumFn)
69200 if (!payload) throw new Error('Invalid checksum')
69201 return payload
69202 }
69203
69204 return {
69205 encode: encode,
69206 decode: decode,
69207 decodeUnsafe: decodeUnsafe
69208 }
69209 }
69210
69211 },{"bs58":173,"safe-buffer":193}],175:[function(require,module,exports){
69212 'use strict'
69213
69214 var createHash = require('create-hash')
69215 var bs58checkBase = require('./base')
69216
69217 // SHA256(SHA256(buffer))
69218 function sha256x2 (buffer) {
69219 var tmp = createHash('sha256').update(buffer).digest()
69220 return createHash('sha256').update(tmp).digest()
69221 }
69222
69223 module.exports = bs58checkBase(sha256x2)
69224
69225 },{"./base":174,"create-hash":179}],176:[function(require,module,exports){
69226 arguments[4][46][0].apply(exports,arguments)
69227 },{"buffer":47,"dup":46}],177:[function(require,module,exports){
69228 module.exports = function xorInplace (a, b) {
69229 var length = Math.min(a.length, b.length)
69230
69231 for (var i = 0; i < length; ++i) {
69232 a[i] = a[i] ^ b[i]
69233 }
69234
69235 return a.slice(0, length)
69236 }
69237
69238 },{}],178:[function(require,module,exports){
69239 var Buffer = require('safe-buffer').Buffer
69240 var Transform = require('stream').Transform
69241 var StringDecoder = require('string_decoder').StringDecoder
69242 var inherits = require('inherits')
69243
69244 function CipherBase (hashMode) {
69245 Transform.call(this)
69246 this.hashMode = typeof hashMode === 'string'
69247 if (this.hashMode) {
69248 this[hashMode] = this._finalOrDigest
69249 } else {
69250 this.final = this._finalOrDigest
69251 }
69252 if (this._final) {
69253 this.__final = this._final
69254 this._final = null
69255 }
69256 this._decoder = null
69257 this._encoding = null
69258 }
69259 inherits(CipherBase, Transform)
69260
69261 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
69262 if (typeof data === 'string') {
69263 data = Buffer.from(data, inputEnc)
69264 }
69265
69266 var outData = this._update(data)
69267 if (this.hashMode) return this
69268
69269 if (outputEnc) {
69270 outData = this._toString(outData, outputEnc)
69271 }
69272
69273 return outData
69274 }
69275
69276 CipherBase.prototype.setAutoPadding = function () {}
69277 CipherBase.prototype.getAuthTag = function () {
69278 throw new Error('trying to get auth tag in unsupported state')
69279 }
69280
69281 CipherBase.prototype.setAuthTag = function () {
69282 throw new Error('trying to set auth tag in unsupported state')
69283 }
69284
69285 CipherBase.prototype.setAAD = function () {
69286 throw new Error('trying to set aad in unsupported state')
69287 }
69288
69289 CipherBase.prototype._transform = function (data, _, next) {
69290 var err
69291 try {
69292 if (this.hashMode) {
69293 this._update(data)
69294 } else {
69295 this.push(this._update(data))
69296 }
69297 } catch (e) {
69298 err = e
69299 } finally {
69300 next(err)
69301 }
69302 }
69303 CipherBase.prototype._flush = function (done) {
69304 var err
69305 try {
69306 this.push(this.__final())
69307 } catch (e) {
69308 err = e
69309 }
69310
69311 done(err)
69312 }
69313 CipherBase.prototype._finalOrDigest = function (outputEnc) {
69314 var outData = this.__final() || Buffer.alloc(0)
69315 if (outputEnc) {
69316 outData = this._toString(outData, outputEnc, true)
69317 }
69318 return outData
69319 }
69320
69321 CipherBase.prototype._toString = function (value, enc, fin) {
69322 if (!this._decoder) {
69323 this._decoder = new StringDecoder(enc)
69324 this._encoding = enc
69325 }
69326
69327 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
69328
69329 var out = this._decoder.write(value)
69330 if (fin) {
69331 out += this._decoder.end()
69332 }
69333
69334 return out
69335 }
69336
69337 module.exports = CipherBase
69338
69339 },{"inherits":189,"safe-buffer":193,"stream":143,"string_decoder":144}],179:[function(require,module,exports){
69340 arguments[4][51][0].apply(exports,arguments)
69341 },{"./md5":181,"buffer":47,"cipher-base":178,"dup":51,"inherits":189,"ripemd160":192,"sha.js":196}],180:[function(require,module,exports){
69342 arguments[4][52][0].apply(exports,arguments)
69343 },{"buffer":47,"dup":52}],181:[function(require,module,exports){
69344 arguments[4][53][0].apply(exports,arguments)
69345 },{"./make-hash":180,"dup":53}],182:[function(require,module,exports){
69346 var assert = require('assert')
69347 var BigInteger = require('bigi')
69348
69349 var Point = require('./point')
69350
69351 function Curve (p, a, b, Gx, Gy, n, h) {
69352 this.p = p
69353 this.a = a
69354 this.b = b
69355 this.G = Point.fromAffine(this, Gx, Gy)
69356 this.n = n
69357 this.h = h
69358
69359 this.infinity = new Point(this, null, null, BigInteger.ZERO)
69360
69361 // result caching
69362 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
69363
69364 // determine size of p in bytes
69365 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
69366 }
69367
69368 Curve.prototype.pointFromX = function (isOdd, x) {
69369 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
69370 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
69371
69372 var y = beta
69373 if (beta.isEven() ^ !isOdd) {
69374 y = this.p.subtract(y) // -y % p
69375 }
69376
69377 return Point.fromAffine(this, x, y)
69378 }
69379
69380 Curve.prototype.isInfinity = function (Q) {
69381 if (Q === this.infinity) return true
69382
69383 return Q.z.signum() === 0 && Q.y.signum() !== 0
69384 }
69385
69386 Curve.prototype.isOnCurve = function (Q) {
69387 if (this.isInfinity(Q)) return true
69388
69389 var x = Q.affineX
69390 var y = Q.affineY
69391 var a = this.a
69392 var b = this.b
69393 var p = this.p
69394
69395 // Check that xQ and yQ are integers in the interval [0, p - 1]
69396 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
69397 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
69398
69399 // and check that y^2 = x^3 + ax + b (mod p)
69400 var lhs = y.square().mod(p)
69401 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
69402 return lhs.equals(rhs)
69403 }
69404
69405 /**
69406 * Validate an elliptic curve point.
69407 *
69408 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
69409 */
69410 Curve.prototype.validate = function (Q) {
69411 // Check Q != O
69412 assert(!this.isInfinity(Q), 'Point is at infinity')
69413 assert(this.isOnCurve(Q), 'Point is not on the curve')
69414
69415 // Check nQ = O (where Q is a scalar multiple of G)
69416 var nQ = Q.multiply(this.n)
69417 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
69418
69419 return true
69420 }
69421
69422 module.exports = Curve
69423
69424 },{"./point":186,"assert":15,"bigi":154}],183:[function(require,module,exports){
69425 module.exports={
69426 "secp128r1": {
69427 "p": "fffffffdffffffffffffffffffffffff",
69428 "a": "fffffffdfffffffffffffffffffffffc",
69429 "b": "e87579c11079f43dd824993c2cee5ed3",
69430 "n": "fffffffe0000000075a30d1b9038a115",
69431 "h": "01",
69432 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
69433 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
69434 },
69435 "secp160k1": {
69436 "p": "fffffffffffffffffffffffffffffffeffffac73",
69437 "a": "00",
69438 "b": "07",
69439 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
69440 "h": "01",
69441 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
69442 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
69443 },
69444 "secp160r1": {
69445 "p": "ffffffffffffffffffffffffffffffff7fffffff",
69446 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
69447 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
69448 "n": "0100000000000000000001f4c8f927aed3ca752257",
69449 "h": "01",
69450 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
69451 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
69452 },
69453 "secp192k1": {
69454 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
69455 "a": "00",
69456 "b": "03",
69457 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
69458 "h": "01",
69459 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
69460 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
69461 },
69462 "secp192r1": {
69463 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
69464 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
69465 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
69466 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
69467 "h": "01",
69468 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
69469 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
69470 },
69471 "secp256k1": {
69472 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
69473 "a": "00",
69474 "b": "07",
69475 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
69476 "h": "01",
69477 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
69478 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
69479 },
69480 "secp256r1": {
69481 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
69482 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
69483 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
69484 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
69485 "h": "01",
69486 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
69487 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
69488 }
69489 }
69490
69491 },{}],184:[function(require,module,exports){
69492 var Point = require('./point')
69493 var Curve = require('./curve')
69494
69495 var getCurveByName = require('./names')
69496
69497 module.exports = {
69498 Curve: Curve,
69499 Point: Point,
69500 getCurveByName: getCurveByName
69501 }
69502
69503 },{"./curve":182,"./names":185,"./point":186}],185:[function(require,module,exports){
69504 var BigInteger = require('bigi')
69505
69506 var curves = require('./curves.json')
69507 var Curve = require('./curve')
69508
69509 function getCurveByName (name) {
69510 var curve = curves[name]
69511 if (!curve) return null
69512
69513 var p = new BigInteger(curve.p, 16)
69514 var a = new BigInteger(curve.a, 16)
69515 var b = new BigInteger(curve.b, 16)
69516 var n = new BigInteger(curve.n, 16)
69517 var h = new BigInteger(curve.h, 16)
69518 var Gx = new BigInteger(curve.Gx, 16)
69519 var Gy = new BigInteger(curve.Gy, 16)
69520
69521 return new Curve(p, a, b, Gx, Gy, n, h)
69522 }
69523
69524 module.exports = getCurveByName
69525
69526 },{"./curve":182,"./curves.json":183,"bigi":154}],186:[function(require,module,exports){
69527 var assert = require('assert')
69528 var Buffer = require('safe-buffer').Buffer
69529 var BigInteger = require('bigi')
69530
69531 var THREE = BigInteger.valueOf(3)
69532
69533 function Point (curve, x, y, z) {
69534 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
69535
69536 this.curve = curve
69537 this.x = x
69538 this.y = y
69539 this.z = z
69540 this._zInv = null
69541
69542 this.compressed = true
69543 }
69544
69545 Object.defineProperty(Point.prototype, 'zInv', {
69546 get: function () {
69547 if (this._zInv === null) {
69548 this._zInv = this.z.modInverse(this.curve.p)
69549 }
69550
69551 return this._zInv
69552 }
69553 })
69554
69555 Object.defineProperty(Point.prototype, 'affineX', {
69556 get: function () {
69557 return this.x.multiply(this.zInv).mod(this.curve.p)
69558 }
69559 })
69560
69561 Object.defineProperty(Point.prototype, 'affineY', {
69562 get: function () {
69563 return this.y.multiply(this.zInv).mod(this.curve.p)
69564 }
69565 })
69566
69567 Point.fromAffine = function (curve, x, y) {
69568 return new Point(curve, x, y, BigInteger.ONE)
69569 }
69570
69571 Point.prototype.equals = function (other) {
69572 if (other === this) return true
69573 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
69574 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
69575
69576 // u = Y2 * Z1 - Y1 * Z2
69577 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
69578
69579 if (u.signum() !== 0) return false
69580
69581 // v = X2 * Z1 - X1 * Z2
69582 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
69583
69584 return v.signum() === 0
69585 }
69586
69587 Point.prototype.negate = function () {
69588 var y = this.curve.p.subtract(this.y)
69589
69590 return new Point(this.curve, this.x, y, this.z)
69591 }
69592
69593 Point.prototype.add = function (b) {
69594 if (this.curve.isInfinity(this)) return b
69595 if (this.curve.isInfinity(b)) return this
69596
69597 var x1 = this.x
69598 var y1 = this.y
69599 var x2 = b.x
69600 var y2 = b.y
69601
69602 // u = Y2 * Z1 - Y1 * Z2
69603 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
69604 // v = X2 * Z1 - X1 * Z2
69605 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
69606
69607 if (v.signum() === 0) {
69608 if (u.signum() === 0) {
69609 return this.twice() // this == b, so double
69610 }
69611
69612 return this.curve.infinity // this = -b, so infinity
69613 }
69614
69615 var v2 = v.square()
69616 var v3 = v2.multiply(v)
69617 var x1v2 = x1.multiply(v2)
69618 var zu2 = u.square().multiply(this.z)
69619
69620 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
69621 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
69622 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
69623 var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)
69624 // z3 = v^3 * z1 * z2
69625 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
69626
69627 return new Point(this.curve, x3, y3, z3)
69628 }
69629
69630 Point.prototype.twice = function () {
69631 if (this.curve.isInfinity(this)) return this
69632 if (this.y.signum() === 0) return this.curve.infinity
69633
69634 var x1 = this.x
69635 var y1 = this.y
69636
69637 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
69638 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
69639 var a = this.curve.a
69640
69641 // w = 3 * x1^2 + a * z1^2
69642 var w = x1.square().multiply(THREE)
69643
69644 if (a.signum() !== 0) {
69645 w = w.add(this.z.square().multiply(a))
69646 }
69647
69648 w = w.mod(this.curve.p)
69649 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
69650 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
69651 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
69652 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
69653 // z3 = 8 * (y1 * z1)^3
69654 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
69655
69656 return new Point(this.curve, x3, y3, z3)
69657 }
69658
69659 // Simple NAF (Non-Adjacent Form) multiplication algorithm
69660 // TODO: modularize the multiplication algorithm
69661 Point.prototype.multiply = function (k) {
69662 if (this.curve.isInfinity(this)) return this
69663 if (k.signum() === 0) return this.curve.infinity
69664
69665 var e = k
69666 var h = e.multiply(THREE)
69667
69668 var neg = this.negate()
69669 var R = this
69670
69671 for (var i = h.bitLength() - 2; i > 0; --i) {
69672 var hBit = h.testBit(i)
69673 var eBit = e.testBit(i)
69674
69675 R = R.twice()
69676
69677 if (hBit !== eBit) {
69678 R = R.add(hBit ? this : neg)
69679 }
69680 }
69681
69682 return R
69683 }
69684
69685 // Compute this*j + x*k (simultaneous multiplication)
69686 Point.prototype.multiplyTwo = function (j, x, k) {
69687 var i = Math.max(j.bitLength(), k.bitLength()) - 1
69688 var R = this.curve.infinity
69689 var both = this.add(x)
69690
69691 while (i >= 0) {
69692 var jBit = j.testBit(i)
69693 var kBit = k.testBit(i)
69694
69695 R = R.twice()
69696
69697 if (jBit) {
69698 if (kBit) {
69699 R = R.add(both)
69700 } else {
69701 R = R.add(this)
69702 }
69703 } else if (kBit) {
69704 R = R.add(x)
69705 }
69706 --i
69707 }
69708
69709 return R
69710 }
69711
69712 Point.prototype.getEncoded = function (compressed) {
69713 if (compressed == null) compressed = this.compressed
69714 if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'
69715
69716 var x = this.affineX
69717 var y = this.affineY
69718 var byteLength = this.curve.pLength
69719 var buffer
69720
69721 // 0x02/0x03 | X
69722 if (compressed) {
69723 buffer = Buffer.allocUnsafe(1 + byteLength)
69724 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
69725
69726 // 0x04 | X | Y
69727 } else {
69728 buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)
69729 buffer.writeUInt8(0x04, 0)
69730
69731 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
69732 }
69733
69734 x.toBuffer(byteLength).copy(buffer, 1)
69735
69736 return buffer
69737 }
69738
69739 Point.decodeFrom = function (curve, buffer) {
69740 var type = buffer.readUInt8(0)
69741 var compressed = (type !== 4)
69742
69743 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
69744 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
69745
69746 var Q
69747 if (compressed) {
69748 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
69749 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
69750
69751 var isOdd = (type === 0x03)
69752 Q = curve.pointFromX(isOdd, x)
69753 } else {
69754 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
69755
69756 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
69757 Q = Point.fromAffine(curve, x, y)
69758 }
69759
69760 Q.compressed = compressed
69761 return Q
69762 }
69763
69764 Point.prototype.toString = function () {
69765 if (this.curve.isInfinity(this)) return '(INFINITY)'
69766
69767 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
69768 }
69769
69770 module.exports = Point
69771
69772 },{"assert":15,"bigi":154,"safe-buffer":193}],187:[function(require,module,exports){
69773 var Buffer = require('safe-buffer').Buffer
69774 var MD5 = require('md5.js')
69775
69776 /* eslint-disable camelcase */
69777 function EVP_BytesToKey (password, salt, keyBits, ivLen) {
69778 if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
69779 if (salt) {
69780 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
69781 if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
69782 }
69783
69784 var keyLen = keyBits / 8
69785 var key = Buffer.alloc(keyLen)
69786 var iv = Buffer.alloc(ivLen || 0)
69787 var tmp = Buffer.alloc(0)
69788
69789 while (keyLen > 0 || ivLen > 0) {
69790 var hash = new MD5()
69791 hash.update(tmp)
69792 hash.update(password)
69793 if (salt) hash.update(salt)
69794 tmp = hash.digest()
69795
69796 var used = 0
69797
69798 if (keyLen > 0) {
69799 var keyStart = key.length - keyLen
69800 used = Math.min(keyLen, tmp.length)
69801 tmp.copy(key, keyStart, 0, used)
69802 keyLen -= used
69803 }
69804
69805 if (used < tmp.length && ivLen > 0) {
69806 var ivStart = iv.length - ivLen
69807 var length = Math.min(ivLen, tmp.length - used)
69808 tmp.copy(iv, ivStart, used, used + length)
69809 ivLen -= length
69810 }
69811 }
69812
69813 tmp.fill(0)
69814 return { key: key, iv: iv }
69815 }
69816
69817 module.exports = EVP_BytesToKey
69818
69819 },{"md5.js":190,"safe-buffer":193}],188:[function(require,module,exports){
69820 arguments[4][85][0].apply(exports,arguments)
69821 },{"buffer":47,"dup":85,"inherits":189,"stream":143}],189:[function(require,module,exports){
69822 arguments[4][95][0].apply(exports,arguments)
69823 },{"dup":95}],190:[function(require,module,exports){
69824 (function (Buffer){
69825 'use strict'
69826 var inherits = require('inherits')
69827 var HashBase = require('hash-base')
69828
69829 var ARRAY16 = new Array(16)
69830
69831 function MD5 () {
69832 HashBase.call(this, 64)
69833
69834 // state
69835 this._a = 0x67452301
69836 this._b = 0xefcdab89
69837 this._c = 0x98badcfe
69838 this._d = 0x10325476
69839 }
69840
69841 inherits(MD5, HashBase)
69842
69843 MD5.prototype._update = function () {
69844 var M = ARRAY16
69845 for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
69846
69847 var a = this._a
69848 var b = this._b
69849 var c = this._c
69850 var d = this._d
69851
69852 a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
69853 d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
69854 c = fnF(c, d, a, b, M[2], 0x242070db, 17)
69855 b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
69856 a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
69857 d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
69858 c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
69859 b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
69860 a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
69861 d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
69862 c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
69863 b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
69864 a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
69865 d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
69866 c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
69867 b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
69868
69869 a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
69870 d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
69871 c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
69872 b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
69873 a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
69874 d = fnG(d, a, b, c, M[10], 0x02441453, 9)
69875 c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
69876 b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
69877 a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
69878 d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
69879 c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
69880 b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
69881 a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
69882 d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
69883 c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
69884 b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
69885
69886 a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
69887 d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
69888 c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
69889 b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
69890 a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
69891 d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
69892 c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
69893 b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
69894 a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
69895 d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
69896 c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
69897 b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
69898 a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
69899 d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
69900 c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
69901 b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
69902
69903 a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
69904 d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
69905 c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
69906 b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
69907 a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
69908 d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
69909 c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
69910 b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
69911 a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
69912 d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
69913 c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
69914 b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
69915 a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
69916 d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
69917 c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
69918 b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
69919
69920 this._a = (this._a + a) | 0
69921 this._b = (this._b + b) | 0
69922 this._c = (this._c + c) | 0
69923 this._d = (this._d + d) | 0
69924 }
69925
69926 MD5.prototype._digest = function () {
69927 // create padding and handle blocks
69928 this._block[this._blockOffset++] = 0x80
69929 if (this._blockOffset > 56) {
69930 this._block.fill(0, this._blockOffset, 64)
69931 this._update()
69932 this._blockOffset = 0
69933 }
69934
69935 this._block.fill(0, this._blockOffset, 56)
69936 this._block.writeUInt32LE(this._length[0], 56)
69937 this._block.writeUInt32LE(this._length[1], 60)
69938 this._update()
69939
69940 // produce result
69941 var buffer = new Buffer(16)
69942 buffer.writeInt32LE(this._a, 0)
69943 buffer.writeInt32LE(this._b, 4)
69944 buffer.writeInt32LE(this._c, 8)
69945 buffer.writeInt32LE(this._d, 12)
69946 return buffer
69947 }
69948
69949 function rotl (x, n) {
69950 return (x << n) | (x >>> (32 - n))
69951 }
69952
69953 function fnF (a, b, c, d, m, k, s) {
69954 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
69955 }
69956
69957 function fnG (a, b, c, d, m, k, s) {
69958 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
69959 }
69960
69961 function fnH (a, b, c, d, m, k, s) {
69962 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
69963 }
69964
69965 function fnI (a, b, c, d, m, k, s) {
69966 return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
69967 }
69968
69969 module.exports = MD5
69970
69971 }).call(this,require("buffer").Buffer)
69972 },{"buffer":47,"hash-base":191,"inherits":189}],191:[function(require,module,exports){
69973 'use strict'
69974 var Buffer = require('safe-buffer').Buffer
69975 var Transform = require('stream').Transform
69976 var inherits = require('inherits')
69977
69978 function throwIfNotStringOrBuffer (val, prefix) {
69979 if (!Buffer.isBuffer(val) && typeof val !== 'string') {
69980 throw new TypeError(prefix + ' must be a string or a buffer')
69981 }
69982 }
69983
69984 function HashBase (blockSize) {
69985 Transform.call(this)
69986
69987 this._block = Buffer.allocUnsafe(blockSize)
69988 this._blockSize = blockSize
69989 this._blockOffset = 0
69990 this._length = [0, 0, 0, 0]
69991
69992 this._finalized = false
69993 }
69994
69995 inherits(HashBase, Transform)
69996
69997 HashBase.prototype._transform = function (chunk, encoding, callback) {
69998 var error = null
69999 try {
70000 this.update(chunk, encoding)
70001 } catch (err) {
70002 error = err
70003 }
70004
70005 callback(error)
70006 }
70007
70008 HashBase.prototype._flush = function (callback) {
70009 var error = null
70010 try {
70011 this.push(this.digest())
70012 } catch (err) {
70013 error = err
70014 }
70015
70016 callback(error)
70017 }
70018
70019 HashBase.prototype.update = function (data, encoding) {
70020 throwIfNotStringOrBuffer(data, 'Data')
70021 if (this._finalized) throw new Error('Digest already called')
70022 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
70023
70024 // consume data
70025 var block = this._block
70026 var offset = 0
70027 while (this._blockOffset + data.length - offset >= this._blockSize) {
70028 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
70029 this._update()
70030 this._blockOffset = 0
70031 }
70032 while (offset < data.length) block[this._blockOffset++] = data[offset++]
70033
70034 // update length
70035 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
70036 this._length[j] += carry
70037 carry = (this._length[j] / 0x0100000000) | 0
70038 if (carry > 0) this._length[j] -= 0x0100000000 * carry
70039 }
70040
70041 return this
70042 }
70043
70044 HashBase.prototype._update = function () {
70045 throw new Error('_update is not implemented')
70046 }
70047
70048 HashBase.prototype.digest = function (encoding) {
70049 if (this._finalized) throw new Error('Digest already called')
70050 this._finalized = true
70051
70052 var digest = this._digest()
70053 if (encoding !== undefined) digest = digest.toString(encoding)
70054
70055 // reset state
70056 this._block.fill(0)
70057 this._blockOffset = 0
70058 for (var i = 0; i < 4; ++i) this._length[i] = 0
70059
70060 return digest
70061 }
70062
70063 HashBase.prototype._digest = function () {
70064 throw new Error('_digest is not implemented')
70065 }
70066
70067 module.exports = HashBase
70068
70069 },{"inherits":189,"safe-buffer":193,"stream":143}],192:[function(require,module,exports){
70070 arguments[4][133][0].apply(exports,arguments)
70071 },{"buffer":47,"dup":133,"hash-base":188,"inherits":189}],193:[function(require,module,exports){
70072 /* eslint-disable node/no-deprecated-api */
70073 var buffer = require('buffer')
70074 var Buffer = buffer.Buffer
70075
70076 // alternative to using Object.keys for old browsers
70077 function copyProps (src, dst) {
70078 for (var key in src) {
70079 dst[key] = src[key]
70080 }
70081 }
70082 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
70083 module.exports = buffer
70084 } else {
70085 // Copy properties from require('buffer')
70086 copyProps(buffer, exports)
70087 exports.Buffer = SafeBuffer
70088 }
70089
70090 function SafeBuffer (arg, encodingOrOffset, length) {
70091 return Buffer(arg, encodingOrOffset, length)
70092 }
70093
70094 // Copy static methods from Buffer
70095 copyProps(Buffer, SafeBuffer)
70096
70097 SafeBuffer.from = function (arg, encodingOrOffset, length) {
70098 if (typeof arg === 'number') {
70099 throw new TypeError('Argument must not be a number')
70100 }
70101 return Buffer(arg, encodingOrOffset, length)
70102 }
70103
70104 SafeBuffer.alloc = function (size, fill, encoding) {
70105 if (typeof size !== 'number') {
70106 throw new TypeError('Argument must be a number')
70107 }
70108 var buf = Buffer(size)
70109 if (fill !== undefined) {
70110 if (typeof encoding === 'string') {
70111 buf.fill(fill, encoding)
70112 } else {
70113 buf.fill(fill)
70114 }
70115 } else {
70116 buf.fill(0)
70117 }
70118 return buf
70119 }
70120
70121 SafeBuffer.allocUnsafe = function (size) {
70122 if (typeof size !== 'number') {
70123 throw new TypeError('Argument must be a number')
70124 }
70125 return Buffer(size)
70126 }
70127
70128 SafeBuffer.allocUnsafeSlow = function (size) {
70129 if (typeof size !== 'number') {
70130 throw new TypeError('Argument must be a number')
70131 }
70132 return buffer.SlowBuffer(size)
70133 }
70134
70135 },{"buffer":47}],194:[function(require,module,exports){
70136 (function (Buffer){
70137 var crypto = require('crypto')
70138 /* eslint-disable camelcase */
70139
70140 var MAX_VALUE = 0x7fffffff
70141
70142 // N = Cpu cost, r = Memory cost, p = parallelization cost
70143 function scrypt (key, salt, N, r, p, dkLen, progressCallback) {
70144 if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2')
70145
70146 if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large')
70147 if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large')
70148
70149 var XY = new Buffer(256 * r)
70150 var V = new Buffer(128 * r * N)
70151
70152 // pseudo global
70153 var B32 = new Int32Array(16) // salsa20_8
70154 var x = new Int32Array(16) // salsa20_8
70155 var _X = new Buffer(64) // blockmix_salsa8
70156
70157 // pseudo global
70158 var B = crypto.pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256')
70159
70160 var tickCallback
70161 if (progressCallback) {
70162 var totalOps = p * N * 2
70163 var currentOp = 0
70164
70165 tickCallback = function () {
70166 ++currentOp
70167
70168 // send progress notifications once every 1,000 ops
70169 if (currentOp % 1000 === 0) {
70170 progressCallback({
70171 current: currentOp,
70172 total: totalOps,
70173 percent: (currentOp / totalOps) * 100.0
70174 })
70175 }
70176 }
70177 }
70178
70179 for (var i = 0; i < p; i++) {
70180 smix(B, i * 128 * r, r, N, V, XY)
70181 }
70182
70183 return crypto.pbkdf2Sync(key, B, 1, dkLen, 'sha256')
70184
70185 // all of these functions are actually moved to the top
70186 // due to function hoisting
70187
70188 function smix (B, Bi, r, N, V, XY) {
70189 var Xi = 0
70190 var Yi = 128 * r
70191 var i
70192
70193 B.copy(XY, Xi, Bi, Bi + Yi)
70194
70195 for (i = 0; i < N; i++) {
70196 XY.copy(V, i * Yi, Xi, Xi + Yi)
70197 blockmix_salsa8(XY, Xi, Yi, r)
70198
70199 if (tickCallback) tickCallback()
70200 }
70201
70202 for (i = 0; i < N; i++) {
70203 var offset = Xi + (2 * r - 1) * 64
70204 var j = XY.readUInt32LE(offset) & (N - 1)
70205 blockxor(V, j * Yi, XY, Xi, Yi)
70206 blockmix_salsa8(XY, Xi, Yi, r)
70207
70208 if (tickCallback) tickCallback()
70209 }
70210
70211 XY.copy(B, Bi, Xi, Xi + Yi)
70212 }
70213
70214 function blockmix_salsa8 (BY, Bi, Yi, r) {
70215 var i
70216
70217 arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64)
70218
70219 for (i = 0; i < 2 * r; i++) {
70220 blockxor(BY, i * 64, _X, 0, 64)
70221 salsa20_8(_X)
70222 arraycopy(_X, 0, BY, Yi + (i * 64), 64)
70223 }
70224
70225 for (i = 0; i < r; i++) {
70226 arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64)
70227 }
70228
70229 for (i = 0; i < r; i++) {
70230 arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64)
70231 }
70232 }
70233
70234 function R (a, b) {
70235 return (a << b) | (a >>> (32 - b))
70236 }
70237
70238 function salsa20_8 (B) {
70239 var i
70240
70241 for (i = 0; i < 16; i++) {
70242 B32[i] = (B[i * 4 + 0] & 0xff) << 0
70243 B32[i] |= (B[i * 4 + 1] & 0xff) << 8
70244 B32[i] |= (B[i * 4 + 2] & 0xff) << 16
70245 B32[i] |= (B[i * 4 + 3] & 0xff) << 24
70246 // B32[i] = B.readUInt32LE(i*4) <--- this is signficantly slower even in Node.js
70247 }
70248
70249 arraycopy(B32, 0, x, 0, 16)
70250
70251 for (i = 8; i > 0; i -= 2) {
70252 x[4] ^= R(x[0] + x[12], 7)
70253 x[8] ^= R(x[4] + x[0], 9)
70254 x[12] ^= R(x[8] + x[4], 13)
70255 x[0] ^= R(x[12] + x[8], 18)
70256 x[9] ^= R(x[5] + x[1], 7)
70257 x[13] ^= R(x[9] + x[5], 9)
70258 x[1] ^= R(x[13] + x[9], 13)
70259 x[5] ^= R(x[1] + x[13], 18)
70260 x[14] ^= R(x[10] + x[6], 7)
70261 x[2] ^= R(x[14] + x[10], 9)
70262 x[6] ^= R(x[2] + x[14], 13)
70263 x[10] ^= R(x[6] + x[2], 18)
70264 x[3] ^= R(x[15] + x[11], 7)
70265 x[7] ^= R(x[3] + x[15], 9)
70266 x[11] ^= R(x[7] + x[3], 13)
70267 x[15] ^= R(x[11] + x[7], 18)
70268 x[1] ^= R(x[0] + x[3], 7)
70269 x[2] ^= R(x[1] + x[0], 9)
70270 x[3] ^= R(x[2] + x[1], 13)
70271 x[0] ^= R(x[3] + x[2], 18)
70272 x[6] ^= R(x[5] + x[4], 7)
70273 x[7] ^= R(x[6] + x[5], 9)
70274 x[4] ^= R(x[7] + x[6], 13)
70275 x[5] ^= R(x[4] + x[7], 18)
70276 x[11] ^= R(x[10] + x[9], 7)
70277 x[8] ^= R(x[11] + x[10], 9)
70278 x[9] ^= R(x[8] + x[11], 13)
70279 x[10] ^= R(x[9] + x[8], 18)
70280 x[12] ^= R(x[15] + x[14], 7)
70281 x[13] ^= R(x[12] + x[15], 9)
70282 x[14] ^= R(x[13] + x[12], 13)
70283 x[15] ^= R(x[14] + x[13], 18)
70284 }
70285
70286 for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i]
70287
70288 for (i = 0; i < 16; i++) {
70289 var bi = i * 4
70290 B[bi + 0] = (B32[i] >> 0 & 0xff)
70291 B[bi + 1] = (B32[i] >> 8 & 0xff)
70292 B[bi + 2] = (B32[i] >> 16 & 0xff)
70293 B[bi + 3] = (B32[i] >> 24 & 0xff)
70294 // B.writeInt32LE(B32[i], i*4) //<--- this is signficantly slower even in Node.js
70295 }
70296 }
70297
70298 // naive approach... going back to loop unrolling may yield additional performance
70299 function blockxor (S, Si, D, Di, len) {
70300 for (var i = 0; i < len; i++) {
70301 D[Di + i] ^= S[Si + i]
70302 }
70303 }
70304 }
70305
70306 function arraycopy (src, srcPos, dest, destPos, length) {
70307 if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) {
70308 src.copy(dest, destPos, srcPos, srcPos + length)
70309 } else {
70310 while (length--) {
70311 dest[destPos++] = src[srcPos++]
70312 }
70313 }
70314 }
70315
70316 module.exports = scrypt
70317
70318 }).call(this,require("buffer").Buffer)
70319 },{"buffer":47,"crypto":56}],195:[function(require,module,exports){
70320 var Buffer = require('safe-buffer').Buffer
70321
70322 // prototype class for hash functions
70323 function Hash (blockSize, finalSize) {
70324 this._block = Buffer.alloc(blockSize)
70325 this._finalSize = finalSize
70326 this._blockSize = blockSize
70327 this._len = 0
70328 }
70329
70330 Hash.prototype.update = function (data, enc) {
70331 if (typeof data === 'string') {
70332 enc = enc || 'utf8'
70333 data = Buffer.from(data, enc)
70334 }
70335
70336 var block = this._block
70337 var blockSize = this._blockSize
70338 var length = data.length
70339 var accum = this._len
70340
70341 for (var offset = 0; offset < length;) {
70342 var assigned = accum % blockSize
70343 var remainder = Math.min(length - offset, blockSize - assigned)
70344
70345 for (var i = 0; i < remainder; i++) {
70346 block[assigned + i] = data[offset + i]
70347 }
70348
70349 accum += remainder
70350 offset += remainder
70351
70352 if ((accum % blockSize) === 0) {
70353 this._update(block)
70354 }
70355 }
70356
70357 this._len += length
70358 return this
70359 }
70360
70361 Hash.prototype.digest = function (enc) {
70362 var rem = this._len % this._blockSize
70363
70364 this._block[rem] = 0x80
70365
70366 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
70367 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
70368 this._block.fill(0, rem + 1)
70369
70370 if (rem >= this._finalSize) {
70371 this._update(this._block)
70372 this._block.fill(0)
70373 }
70374
70375 var bits = this._len * 8
70376
70377 // uint32
70378 if (bits <= 0xffffffff) {
70379 this._block.writeUInt32BE(bits, this._blockSize - 4)
70380
70381 // uint64
70382 } else {
70383 var lowBits = (bits & 0xffffffff) >>> 0
70384 var highBits = (bits - lowBits) / 0x100000000
70385
70386 this._block.writeUInt32BE(highBits, this._blockSize - 8)
70387 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
70388 }
70389
70390 this._update(this._block)
70391 var hash = this._hash()
70392
70393 return enc ? hash.toString(enc) : hash
70394 }
70395
70396 Hash.prototype._update = function () {
70397 throw new Error('_update must be implemented by subclass')
70398 }
70399
70400 module.exports = Hash
70401
70402 },{"safe-buffer":193}],196:[function(require,module,exports){
70403 arguments[4][136][0].apply(exports,arguments)
70404 },{"./sha":197,"./sha1":198,"./sha224":199,"./sha256":200,"./sha384":201,"./sha512":202,"dup":136}],197:[function(require,module,exports){
70405 /*
70406 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
70407 * in FIPS PUB 180-1
70408 * This source code is derived from sha1.js of the same repository.
70409 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
70410 * operation was added.
70411 */
70412
70413 var inherits = require('inherits')
70414 var Hash = require('./hash')
70415 var Buffer = require('safe-buffer').Buffer
70416
70417 var K = [
70418 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
70419 ]
70420
70421 var W = new Array(80)
70422
70423 function Sha () {
70424 this.init()
70425 this._w = W
70426
70427 Hash.call(this, 64, 56)
70428 }
70429
70430 inherits(Sha, Hash)
70431
70432 Sha.prototype.init = function () {
70433 this._a = 0x67452301
70434 this._b = 0xefcdab89
70435 this._c = 0x98badcfe
70436 this._d = 0x10325476
70437 this._e = 0xc3d2e1f0
70438
70439 return this
70440 }
70441
70442 function rotl5 (num) {
70443 return (num << 5) | (num >>> 27)
70444 }
70445
70446 function rotl30 (num) {
70447 return (num << 30) | (num >>> 2)
70448 }
70449
70450 function ft (s, b, c, d) {
70451 if (s === 0) return (b & c) | ((~b) & d)
70452 if (s === 2) return (b & c) | (b & d) | (c & d)
70453 return b ^ c ^ d
70454 }
70455
70456 Sha.prototype._update = function (M) {
70457 var W = this._w
70458
70459 var a = this._a | 0
70460 var b = this._b | 0
70461 var c = this._c | 0
70462 var d = this._d | 0
70463 var e = this._e | 0
70464
70465 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
70466 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
70467
70468 for (var j = 0; j < 80; ++j) {
70469 var s = ~~(j / 20)
70470 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
70471
70472 e = d
70473 d = c
70474 c = rotl30(b)
70475 b = a
70476 a = t
70477 }
70478
70479 this._a = (a + this._a) | 0
70480 this._b = (b + this._b) | 0
70481 this._c = (c + this._c) | 0
70482 this._d = (d + this._d) | 0
70483 this._e = (e + this._e) | 0
70484 }
70485
70486 Sha.prototype._hash = function () {
70487 var H = Buffer.allocUnsafe(20)
70488
70489 H.writeInt32BE(this._a | 0, 0)
70490 H.writeInt32BE(this._b | 0, 4)
70491 H.writeInt32BE(this._c | 0, 8)
70492 H.writeInt32BE(this._d | 0, 12)
70493 H.writeInt32BE(this._e | 0, 16)
70494
70495 return H
70496 }
70497
70498 module.exports = Sha
70499
70500 },{"./hash":195,"inherits":189,"safe-buffer":193}],198:[function(require,module,exports){
70501 /*
70502 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
70503 * in FIPS PUB 180-1
70504 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
70505 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
70506 * Distributed under the BSD License
70507 * See http://pajhome.org.uk/crypt/md5 for details.
70508 */
70509
70510 var inherits = require('inherits')
70511 var Hash = require('./hash')
70512 var Buffer = require('safe-buffer').Buffer
70513
70514 var K = [
70515 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
70516 ]
70517
70518 var W = new Array(80)
70519
70520 function Sha1 () {
70521 this.init()
70522 this._w = W
70523
70524 Hash.call(this, 64, 56)
70525 }
70526
70527 inherits(Sha1, Hash)
70528
70529 Sha1.prototype.init = function () {
70530 this._a = 0x67452301
70531 this._b = 0xefcdab89
70532 this._c = 0x98badcfe
70533 this._d = 0x10325476
70534 this._e = 0xc3d2e1f0
70535
70536 return this
70537 }
70538
70539 function rotl1 (num) {
70540 return (num << 1) | (num >>> 31)
70541 }
70542
70543 function rotl5 (num) {
70544 return (num << 5) | (num >>> 27)
70545 }
70546
70547 function rotl30 (num) {
70548 return (num << 30) | (num >>> 2)
70549 }
70550
70551 function ft (s, b, c, d) {
70552 if (s === 0) return (b & c) | ((~b) & d)
70553 if (s === 2) return (b & c) | (b & d) | (c & d)
70554 return b ^ c ^ d
70555 }
70556
70557 Sha1.prototype._update = function (M) {
70558 var W = this._w
70559
70560 var a = this._a | 0
70561 var b = this._b | 0
70562 var c = this._c | 0
70563 var d = this._d | 0
70564 var e = this._e | 0
70565
70566 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
70567 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
70568
70569 for (var j = 0; j < 80; ++j) {
70570 var s = ~~(j / 20)
70571 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
70572
70573 e = d
70574 d = c
70575 c = rotl30(b)
70576 b = a
70577 a = t
70578 }
70579
70580 this._a = (a + this._a) | 0
70581 this._b = (b + this._b) | 0
70582 this._c = (c + this._c) | 0
70583 this._d = (d + this._d) | 0
70584 this._e = (e + this._e) | 0
70585 }
70586
70587 Sha1.prototype._hash = function () {
70588 var H = Buffer.allocUnsafe(20)
70589
70590 H.writeInt32BE(this._a | 0, 0)
70591 H.writeInt32BE(this._b | 0, 4)
70592 H.writeInt32BE(this._c | 0, 8)
70593 H.writeInt32BE(this._d | 0, 12)
70594 H.writeInt32BE(this._e | 0, 16)
70595
70596 return H
70597 }
70598
70599 module.exports = Sha1
70600
70601 },{"./hash":195,"inherits":189,"safe-buffer":193}],199:[function(require,module,exports){
70602 /**
70603 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
70604 * in FIPS 180-2
70605 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
70606 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
70607 *
70608 */
70609
70610 var inherits = require('inherits')
70611 var Sha256 = require('./sha256')
70612 var Hash = require('./hash')
70613 var Buffer = require('safe-buffer').Buffer
70614
70615 var W = new Array(64)
70616
70617 function Sha224 () {
70618 this.init()
70619
70620 this._w = W // new Array(64)
70621
70622 Hash.call(this, 64, 56)
70623 }
70624
70625 inherits(Sha224, Sha256)
70626
70627 Sha224.prototype.init = function () {
70628 this._a = 0xc1059ed8
70629 this._b = 0x367cd507
70630 this._c = 0x3070dd17
70631 this._d = 0xf70e5939
70632 this._e = 0xffc00b31
70633 this._f = 0x68581511
70634 this._g = 0x64f98fa7
70635 this._h = 0xbefa4fa4
70636
70637 return this
70638 }
70639
70640 Sha224.prototype._hash = function () {
70641 var H = Buffer.allocUnsafe(28)
70642
70643 H.writeInt32BE(this._a, 0)
70644 H.writeInt32BE(this._b, 4)
70645 H.writeInt32BE(this._c, 8)
70646 H.writeInt32BE(this._d, 12)
70647 H.writeInt32BE(this._e, 16)
70648 H.writeInt32BE(this._f, 20)
70649 H.writeInt32BE(this._g, 24)
70650
70651 return H
70652 }
70653
70654 module.exports = Sha224
70655
70656 },{"./hash":195,"./sha256":200,"inherits":189,"safe-buffer":193}],200:[function(require,module,exports){
70657 /**
70658 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
70659 * in FIPS 180-2
70660 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
70661 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
70662 *
70663 */
70664
70665 var inherits = require('inherits')
70666 var Hash = require('./hash')
70667 var Buffer = require('safe-buffer').Buffer
70668
70669 var K = [
70670 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
70671 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
70672 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
70673 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
70674 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
70675 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
70676 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
70677 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
70678 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
70679 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
70680 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
70681 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
70682 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
70683 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
70684 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
70685 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
70686 ]
70687
70688 var W = new Array(64)
70689
70690 function Sha256 () {
70691 this.init()
70692
70693 this._w = W // new Array(64)
70694
70695 Hash.call(this, 64, 56)
70696 }
70697
70698 inherits(Sha256, Hash)
70699
70700 Sha256.prototype.init = function () {
70701 this._a = 0x6a09e667
70702 this._b = 0xbb67ae85
70703 this._c = 0x3c6ef372
70704 this._d = 0xa54ff53a
70705 this._e = 0x510e527f
70706 this._f = 0x9b05688c
70707 this._g = 0x1f83d9ab
70708 this._h = 0x5be0cd19
70709
70710 return this
70711 }
70712
70713 function ch (x, y, z) {
70714 return z ^ (x & (y ^ z))
70715 }
70716
70717 function maj (x, y, z) {
70718 return (x & y) | (z & (x | y))
70719 }
70720
70721 function sigma0 (x) {
70722 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
70723 }
70724
70725 function sigma1 (x) {
70726 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
70727 }
70728
70729 function gamma0 (x) {
70730 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
70731 }
70732
70733 function gamma1 (x) {
70734 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
70735 }
70736
70737 Sha256.prototype._update = function (M) {
70738 var W = this._w
70739
70740 var a = this._a | 0
70741 var b = this._b | 0
70742 var c = this._c | 0
70743 var d = this._d | 0
70744 var e = this._e | 0
70745 var f = this._f | 0
70746 var g = this._g | 0
70747 var h = this._h | 0
70748
70749 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
70750 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
70751
70752 for (var j = 0; j < 64; ++j) {
70753 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
70754 var T2 = (sigma0(a) + maj(a, b, c)) | 0
70755
70756 h = g
70757 g = f
70758 f = e
70759 e = (d + T1) | 0
70760 d = c
70761 c = b
70762 b = a
70763 a = (T1 + T2) | 0
70764 }
70765
70766 this._a = (a + this._a) | 0
70767 this._b = (b + this._b) | 0
70768 this._c = (c + this._c) | 0
70769 this._d = (d + this._d) | 0
70770 this._e = (e + this._e) | 0
70771 this._f = (f + this._f) | 0
70772 this._g = (g + this._g) | 0
70773 this._h = (h + this._h) | 0
70774 }
70775
70776 Sha256.prototype._hash = function () {
70777 var H = Buffer.allocUnsafe(32)
70778
70779 H.writeInt32BE(this._a, 0)
70780 H.writeInt32BE(this._b, 4)
70781 H.writeInt32BE(this._c, 8)
70782 H.writeInt32BE(this._d, 12)
70783 H.writeInt32BE(this._e, 16)
70784 H.writeInt32BE(this._f, 20)
70785 H.writeInt32BE(this._g, 24)
70786 H.writeInt32BE(this._h, 28)
70787
70788 return H
70789 }
70790
70791 module.exports = Sha256
70792
70793 },{"./hash":195,"inherits":189,"safe-buffer":193}],201:[function(require,module,exports){
70794 var inherits = require('inherits')
70795 var SHA512 = require('./sha512')
70796 var Hash = require('./hash')
70797 var Buffer = require('safe-buffer').Buffer
70798
70799 var W = new Array(160)
70800
70801 function Sha384 () {
70802 this.init()
70803 this._w = W
70804
70805 Hash.call(this, 128, 112)
70806 }
70807
70808 inherits(Sha384, SHA512)
70809
70810 Sha384.prototype.init = function () {
70811 this._ah = 0xcbbb9d5d
70812 this._bh = 0x629a292a
70813 this._ch = 0x9159015a
70814 this._dh = 0x152fecd8
70815 this._eh = 0x67332667
70816 this._fh = 0x8eb44a87
70817 this._gh = 0xdb0c2e0d
70818 this._hh = 0x47b5481d
70819
70820 this._al = 0xc1059ed8
70821 this._bl = 0x367cd507
70822 this._cl = 0x3070dd17
70823 this._dl = 0xf70e5939
70824 this._el = 0xffc00b31
70825 this._fl = 0x68581511
70826 this._gl = 0x64f98fa7
70827 this._hl = 0xbefa4fa4
70828
70829 return this
70830 }
70831
70832 Sha384.prototype._hash = function () {
70833 var H = Buffer.allocUnsafe(48)
70834
70835 function writeInt64BE (h, l, offset) {
70836 H.writeInt32BE(h, offset)
70837 H.writeInt32BE(l, offset + 4)
70838 }
70839
70840 writeInt64BE(this._ah, this._al, 0)
70841 writeInt64BE(this._bh, this._bl, 8)
70842 writeInt64BE(this._ch, this._cl, 16)
70843 writeInt64BE(this._dh, this._dl, 24)
70844 writeInt64BE(this._eh, this._el, 32)
70845 writeInt64BE(this._fh, this._fl, 40)
70846
70847 return H
70848 }
70849
70850 module.exports = Sha384
70851
70852 },{"./hash":195,"./sha512":202,"inherits":189,"safe-buffer":193}],202:[function(require,module,exports){
70853 var inherits = require('inherits')
70854 var Hash = require('./hash')
70855 var Buffer = require('safe-buffer').Buffer
70856
70857 var K = [
70858 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
70859 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
70860 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
70861 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
70862 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
70863 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
70864 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
70865 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
70866 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
70867 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
70868 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
70869 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
70870 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
70871 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
70872 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
70873 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
70874 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
70875 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
70876 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
70877 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
70878 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
70879 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
70880 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
70881 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
70882 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
70883 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
70884 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
70885 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
70886 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
70887 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
70888 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
70889 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
70890 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
70891 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
70892 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
70893 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
70894 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
70895 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
70896 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
70897 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
70898 ]
70899
70900 var W = new Array(160)
70901
70902 function Sha512 () {
70903 this.init()
70904 this._w = W
70905
70906 Hash.call(this, 128, 112)
70907 }
70908
70909 inherits(Sha512, Hash)
70910
70911 Sha512.prototype.init = function () {
70912 this._ah = 0x6a09e667
70913 this._bh = 0xbb67ae85
70914 this._ch = 0x3c6ef372
70915 this._dh = 0xa54ff53a
70916 this._eh = 0x510e527f
70917 this._fh = 0x9b05688c
70918 this._gh = 0x1f83d9ab
70919 this._hh = 0x5be0cd19
70920
70921 this._al = 0xf3bcc908
70922 this._bl = 0x84caa73b
70923 this._cl = 0xfe94f82b
70924 this._dl = 0x5f1d36f1
70925 this._el = 0xade682d1
70926 this._fl = 0x2b3e6c1f
70927 this._gl = 0xfb41bd6b
70928 this._hl = 0x137e2179
70929
70930 return this
70931 }
70932
70933 function Ch (x, y, z) {
70934 return z ^ (x & (y ^ z))
70935 }
70936
70937 function maj (x, y, z) {
70938 return (x & y) | (z & (x | y))
70939 }
70940
70941 function sigma0 (x, xl) {
70942 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
70943 }
70944
70945 function sigma1 (x, xl) {
70946 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
70947 }
70948
70949 function Gamma0 (x, xl) {
70950 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
70951 }
70952
70953 function Gamma0l (x, xl) {
70954 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
70955 }
70956
70957 function Gamma1 (x, xl) {
70958 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
70959 }
70960
70961 function Gamma1l (x, xl) {
70962 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
70963 }
70964
70965 function getCarry (a, b) {
70966 return (a >>> 0) < (b >>> 0) ? 1 : 0
70967 }
70968
70969 Sha512.prototype._update = function (M) {
70970 var W = this._w
70971
70972 var ah = this._ah | 0
70973 var bh = this._bh | 0
70974 var ch = this._ch | 0
70975 var dh = this._dh | 0
70976 var eh = this._eh | 0
70977 var fh = this._fh | 0
70978 var gh = this._gh | 0
70979 var hh = this._hh | 0
70980
70981 var al = this._al | 0
70982 var bl = this._bl | 0
70983 var cl = this._cl | 0
70984 var dl = this._dl | 0
70985 var el = this._el | 0
70986 var fl = this._fl | 0
70987 var gl = this._gl | 0
70988 var hl = this._hl | 0
70989
70990 for (var i = 0; i < 32; i += 2) {
70991 W[i] = M.readInt32BE(i * 4)
70992 W[i + 1] = M.readInt32BE(i * 4 + 4)
70993 }
70994 for (; i < 160; i += 2) {
70995 var xh = W[i - 15 * 2]
70996 var xl = W[i - 15 * 2 + 1]
70997 var gamma0 = Gamma0(xh, xl)
70998 var gamma0l = Gamma0l(xl, xh)
70999
71000 xh = W[i - 2 * 2]
71001 xl = W[i - 2 * 2 + 1]
71002 var gamma1 = Gamma1(xh, xl)
71003 var gamma1l = Gamma1l(xl, xh)
71004
71005 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
71006 var Wi7h = W[i - 7 * 2]
71007 var Wi7l = W[i - 7 * 2 + 1]
71008
71009 var Wi16h = W[i - 16 * 2]
71010 var Wi16l = W[i - 16 * 2 + 1]
71011
71012 var Wil = (gamma0l + Wi7l) | 0
71013 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
71014 Wil = (Wil + gamma1l) | 0
71015 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
71016 Wil = (Wil + Wi16l) | 0
71017 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
71018
71019 W[i] = Wih
71020 W[i + 1] = Wil
71021 }
71022
71023 for (var j = 0; j < 160; j += 2) {
71024 Wih = W[j]
71025 Wil = W[j + 1]
71026
71027 var majh = maj(ah, bh, ch)
71028 var majl = maj(al, bl, cl)
71029
71030 var sigma0h = sigma0(ah, al)
71031 var sigma0l = sigma0(al, ah)
71032 var sigma1h = sigma1(eh, el)
71033 var sigma1l = sigma1(el, eh)
71034
71035 // t1 = h + sigma1 + ch + K[j] + W[j]
71036 var Kih = K[j]
71037 var Kil = K[j + 1]
71038
71039 var chh = Ch(eh, fh, gh)
71040 var chl = Ch(el, fl, gl)
71041
71042 var t1l = (hl + sigma1l) | 0
71043 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
71044 t1l = (t1l + chl) | 0
71045 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
71046 t1l = (t1l + Kil) | 0
71047 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
71048 t1l = (t1l + Wil) | 0
71049 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
71050
71051 // t2 = sigma0 + maj
71052 var t2l = (sigma0l + majl) | 0
71053 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
71054
71055 hh = gh
71056 hl = gl
71057 gh = fh
71058 gl = fl
71059 fh = eh
71060 fl = el
71061 el = (dl + t1l) | 0
71062 eh = (dh + t1h + getCarry(el, dl)) | 0
71063 dh = ch
71064 dl = cl
71065 ch = bh
71066 cl = bl
71067 bh = ah
71068 bl = al
71069 al = (t1l + t2l) | 0
71070 ah = (t1h + t2h + getCarry(al, t1l)) | 0
71071 }
71072
71073 this._al = (this._al + al) | 0
71074 this._bl = (this._bl + bl) | 0
71075 this._cl = (this._cl + cl) | 0
71076 this._dl = (this._dl + dl) | 0
71077 this._el = (this._el + el) | 0
71078 this._fl = (this._fl + fl) | 0
71079 this._gl = (this._gl + gl) | 0
71080 this._hl = (this._hl + hl) | 0
71081
71082 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
71083 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
71084 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
71085 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
71086 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
71087 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
71088 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
71089 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
71090 }
71091
71092 Sha512.prototype._hash = function () {
71093 var H = Buffer.allocUnsafe(64)
71094
71095 function writeInt64BE (h, l, offset) {
71096 H.writeInt32BE(h, offset)
71097 H.writeInt32BE(l, offset + 4)
71098 }
71099
71100 writeInt64BE(this._ah, this._al, 0)
71101 writeInt64BE(this._bh, this._bl, 8)
71102 writeInt64BE(this._ch, this._cl, 16)
71103 writeInt64BE(this._dh, this._dl, 24)
71104 writeInt64BE(this._eh, this._el, 32)
71105 writeInt64BE(this._fh, this._fl, 40)
71106 writeInt64BE(this._gh, this._gl, 48)
71107 writeInt64BE(this._hh, this._hl, 56)
71108
71109 return H
71110 }
71111
71112 module.exports = Sha512
71113
71114 },{"./hash":195,"inherits":189,"safe-buffer":193}]},{},[150])(150)
71115 });</script>
71116 <script>(function() {
71117
71118 // p2wpkh
71119
71120 bitcoinjs.bitcoin.networks.bitcoin.p2wpkh = {
71121 baseNetwork: "bitcoin",
71122 messagePrefix: '\x18Bitcoin Signed Message:\n',
71123 bech32: 'bc',
71124 bip32: {
71125 public: 0x04b24746,
71126 private: 0x04b2430c
71127 },
71128 pubKeyHash: 0x00,
71129 scriptHash: 0x05,
71130 wif: 0x80
71131 };
71132
71133 bitcoinjs.bitcoin.networks.testnet.p2wpkh = {
71134 baseNetwork: "testnet",
71135 messagePrefix: '\x18Bitcoin Signed Message:\n',
71136 bech32: 'tb',
71137 bip32: {
71138 public: 0x045f1cf6,
71139 private: 0x045f18bc
71140 },
71141 pubKeyHash: 0x6f,
71142 scriptHash: 0xc4,
71143 wif: 0xef
71144 };
71145
71146 // p2wpkh in p2sh
71147
71148 bitcoinjs.bitcoin.networks.bitcoin.p2wpkhInP2sh = {
71149 baseNetwork: "bitcoin",
71150 messagePrefix: '\x18Bitcoin Signed Message:\n',
71151 bech32: 'bc',
71152 bip32: {
71153 public: 0x049d7cb2,
71154 private: 0x049d7878
71155 },
71156 pubKeyHash: 0x00,
71157 scriptHash: 0x05,
71158 wif: 0x80
71159 };
71160
71161 bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
71162 baseNetwork: "testnet",
71163 messagePrefix: '\x18Bitcoin Signed Message:\n',
71164 bech32: 'tb',
71165 bip32: {
71166 public: 0x044a5262,
71167 private: 0x044a4e28
71168 },
71169 pubKeyHash: 0x6f,
71170 scriptHash: 0xc4,
71171 wif: 0xef
71172 };
71173
71174 bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
71175 baseNetwork: "litecoin",
71176 messagePrefix: '\x19Litecoin Signed Message:\n',
71177 bip32: {
71178 public: 0x01b26ef6,
71179 private: 0x01b26792
71180 },
71181 pubKeyHash: 0x30,
71182 scriptHash: 0x32,
71183 wif: 0xb0
71184 };
71185
71186 bitcoinjs.bitcoin.networks.fujicoin.p2wpkh = {
71187 baseNetwork: "fujicoin",
71188 messagePrefix: '\x19FujiCoin Signed Message:\n',
71189 bech32: 'fc',
71190 bip32: {
71191 public: 0x04b24746,
71192 private: 0x04b2430c
71193 },
71194 pubKeyHash: 0x24,
71195 scriptHash: 0x10,
71196 wif: 0xa4
71197 };
71198
71199 bitcoinjs.bitcoin.networks.fujicoin.p2wpkhInP2sh = {
71200 baseNetwork: "fujicoin",
71201 messagePrefix: '\x19FujiCoin Signed Message:\n',
71202 bech32: 'fc',
71203 bip32: {
71204 public: 0x049d7cb2,
71205 private: 0x049d7878
71206 },
71207 pubKeyHash: 0x24,
71208 scriptHash: 0x10,
71209 wif: 0xa4
71210 };
71211
71212 })();
71213 </script>
71214 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethUtil = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
71215 (function (global){
71216 'use strict';
71217
71218 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
71219 // original notice:
71220
71221 /*!
71222 * The buffer module from node.js, for the browser.
71223 *
71224 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
71225 * @license MIT
71226 */
71227 function compare(a, b) {
71228 if (a === b) {
71229 return 0;
71230 }
71231
71232 var x = a.length;
71233 var y = b.length;
71234
71235 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
71236 if (a[i] !== b[i]) {
71237 x = a[i];
71238 y = b[i];
71239 break;
71240 }
71241 }
71242
71243 if (x < y) {
71244 return -1;
71245 }
71246 if (y < x) {
71247 return 1;
71248 }
71249 return 0;
71250 }
71251 function isBuffer(b) {
71252 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
71253 return global.Buffer.isBuffer(b);
71254 }
71255 return !!(b != null && b._isBuffer);
71256 }
71257
71258 // based on node assert, original notice:
71259
71260 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
71261 //
71262 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
71263 //
71264 // Originally from narwhal.js (http://narwhaljs.org)
71265 // Copyright (c) 2009 Thomas Robinson <280north.com>
71266 //
71267 // Permission is hereby granted, free of charge, to any person obtaining a copy
71268 // of this software and associated documentation files (the 'Software'), to
71269 // deal in the Software without restriction, including without limitation the
71270 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
71271 // sell copies of the Software, and to permit persons to whom the Software is
71272 // furnished to do so, subject to the following conditions:
71273 //
71274 // The above copyright notice and this permission notice shall be included in
71275 // all copies or substantial portions of the Software.
71276 //
71277 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
71278 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
71279 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
71280 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
71281 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
71282 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
71283
71284 var util = require('util/');
71285 var hasOwn = Object.prototype.hasOwnProperty;
71286 var pSlice = Array.prototype.slice;
71287 var functionsHaveNames = (function () {
71288 return function foo() {}.name === 'foo';
71289 }());
71290 function pToString (obj) {
71291 return Object.prototype.toString.call(obj);
71292 }
71293 function isView(arrbuf) {
71294 if (isBuffer(arrbuf)) {
71295 return false;
71296 }
71297 if (typeof global.ArrayBuffer !== 'function') {
71298 return false;
71299 }
71300 if (typeof ArrayBuffer.isView === 'function') {
71301 return ArrayBuffer.isView(arrbuf);
71302 }
71303 if (!arrbuf) {
71304 return false;
71305 }
71306 if (arrbuf instanceof DataView) {
71307 return true;
71308 }
71309 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
71310 return true;
71311 }
71312 return false;
71313 }
71314 // 1. The assert module provides functions that throw
71315 // AssertionError's when particular conditions are not met. The
71316 // assert module must conform to the following interface.
71317
71318 var assert = module.exports = ok;
71319
71320 // 2. The AssertionError is defined in assert.
71321 // new assert.AssertionError({ message: message,
71322 // actual: actual,
71323 // expected: expected })
71324
71325 var regex = /\s*function\s+([^\(\s]*)\s*/;
71326 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
71327 function getName(func) {
71328 if (!util.isFunction(func)) {
71329 return;
71330 }
71331 if (functionsHaveNames) {
71332 return func.name;
71333 }
71334 var str = func.toString();
71335 var match = str.match(regex);
71336 return match && match[1];
71337 }
71338 assert.AssertionError = function AssertionError(options) {
71339 this.name = 'AssertionError';
71340 this.actual = options.actual;
71341 this.expected = options.expected;
71342 this.operator = options.operator;
71343 if (options.message) {
71344 this.message = options.message;
71345 this.generatedMessage = false;
71346 } else {
71347 this.message = getMessage(this);
71348 this.generatedMessage = true;
71349 }
71350 var stackStartFunction = options.stackStartFunction || fail;
71351 if (Error.captureStackTrace) {
71352 Error.captureStackTrace(this, stackStartFunction);
71353 } else {
71354 // non v8 browsers so we can have a stacktrace
71355 var err = new Error();
71356 if (err.stack) {
71357 var out = err.stack;
71358
71359 // try to strip useless frames
71360 var fn_name = getName(stackStartFunction);
71361 var idx = out.indexOf('\n' + fn_name);
71362 if (idx >= 0) {
71363 // once we have located the function frame
71364 // we need to strip out everything before it (and its line)
71365 var next_line = out.indexOf('\n', idx + 1);
71366 out = out.substring(next_line + 1);
71367 }
71368
71369 this.stack = out;
71370 }
71371 }
71372 };
71373
71374 // assert.AssertionError instanceof Error
71375 util.inherits(assert.AssertionError, Error);
71376
71377 function truncate(s, n) {
71378 if (typeof s === 'string') {
71379 return s.length < n ? s : s.slice(0, n);
71380 } else {
71381 return s;
71382 }
71383 }
71384 function inspect(something) {
71385 if (functionsHaveNames || !util.isFunction(something)) {
71386 return util.inspect(something);
71387 }
71388 var rawname = getName(something);
71389 var name = rawname ? ': ' + rawname : '';
71390 return '[Function' + name + ']';
71391 }
71392 function getMessage(self) {
71393 return truncate(inspect(self.actual), 128) + ' ' +
71394 self.operator + ' ' +
71395 truncate(inspect(self.expected), 128);
71396 }
71397
71398 // At present only the three keys mentioned above are used and
71399 // understood by the spec. Implementations or sub modules can pass
71400 // other keys to the AssertionError's constructor - they will be
71401 // ignored.
71402
71403 // 3. All of the following functions must throw an AssertionError
71404 // when a corresponding condition is not met, with a message that
71405 // may be undefined if not provided. All assertion methods provide
71406 // both the actual and expected values to the assertion error for
71407 // display purposes.
71408
71409 function fail(actual, expected, message, operator, stackStartFunction) {
71410 throw new assert.AssertionError({
71411 message: message,
71412 actual: actual,
71413 expected: expected,
71414 operator: operator,
71415 stackStartFunction: stackStartFunction
71416 });
71417 }
71418
71419 // EXTENSION! allows for well behaved errors defined elsewhere.
71420 assert.fail = fail;
71421
71422 // 4. Pure assertion tests whether a value is truthy, as determined
71423 // by !!guard.
71424 // assert.ok(guard, message_opt);
71425 // This statement is equivalent to assert.equal(true, !!guard,
71426 // message_opt);. To test strictly for the value true, use
71427 // assert.strictEqual(true, guard, message_opt);.
71428
71429 function ok(value, message) {
71430 if (!value) fail(value, true, message, '==', assert.ok);
71431 }
71432 assert.ok = ok;
71433
71434 // 5. The equality assertion tests shallow, coercive equality with
71435 // ==.
71436 // assert.equal(actual, expected, message_opt);
71437
71438 assert.equal = function equal(actual, expected, message) {
71439 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
71440 };
71441
71442 // 6. The non-equality assertion tests for whether two objects are not equal
71443 // with != assert.notEqual(actual, expected, message_opt);
71444
71445 assert.notEqual = function notEqual(actual, expected, message) {
71446 if (actual == expected) {
71447 fail(actual, expected, message, '!=', assert.notEqual);
71448 }
71449 };
71450
71451 // 7. The equivalence assertion tests a deep equality relation.
71452 // assert.deepEqual(actual, expected, message_opt);
71453
71454 assert.deepEqual = function deepEqual(actual, expected, message) {
71455 if (!_deepEqual(actual, expected, false)) {
71456 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
71457 }
71458 };
71459
71460 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
71461 if (!_deepEqual(actual, expected, true)) {
71462 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
71463 }
71464 };
71465
71466 function _deepEqual(actual, expected, strict, memos) {
71467 // 7.1. All identical values are equivalent, as determined by ===.
71468 if (actual === expected) {
71469 return true;
71470 } else if (isBuffer(actual) && isBuffer(expected)) {
71471 return compare(actual, expected) === 0;
71472
71473 // 7.2. If the expected value is a Date object, the actual value is
71474 // equivalent if it is also a Date object that refers to the same time.
71475 } else if (util.isDate(actual) && util.isDate(expected)) {
71476 return actual.getTime() === expected.getTime();
71477
71478 // 7.3 If the expected value is a RegExp object, the actual value is
71479 // equivalent if it is also a RegExp object with the same source and
71480 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
71481 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
71482 return actual.source === expected.source &&
71483 actual.global === expected.global &&
71484 actual.multiline === expected.multiline &&
71485 actual.lastIndex === expected.lastIndex &&
71486 actual.ignoreCase === expected.ignoreCase;
71487
71488 // 7.4. Other pairs that do not both pass typeof value == 'object',
71489 // equivalence is determined by ==.
71490 } else if ((actual === null || typeof actual !== 'object') &&
71491 (expected === null || typeof expected !== 'object')) {
71492 return strict ? actual === expected : actual == expected;
71493
71494 // If both values are instances of typed arrays, wrap their underlying
71495 // ArrayBuffers in a Buffer each to increase performance
71496 // This optimization requires the arrays to have the same type as checked by
71497 // Object.prototype.toString (aka pToString). Never perform binary
71498 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
71499 // bit patterns are not identical.
71500 } else if (isView(actual) && isView(expected) &&
71501 pToString(actual) === pToString(expected) &&
71502 !(actual instanceof Float32Array ||
71503 actual instanceof Float64Array)) {
71504 return compare(new Uint8Array(actual.buffer),
71505 new Uint8Array(expected.buffer)) === 0;
71506
71507 // 7.5 For all other Object pairs, including Array objects, equivalence is
71508 // determined by having the same number of owned properties (as verified
71509 // with Object.prototype.hasOwnProperty.call), the same set of keys
71510 // (although not necessarily the same order), equivalent values for every
71511 // corresponding key, and an identical 'prototype' property. Note: this
71512 // accounts for both named and indexed properties on Arrays.
71513 } else if (isBuffer(actual) !== isBuffer(expected)) {
71514 return false;
71515 } else {
71516 memos = memos || {actual: [], expected: []};
71517
71518 var actualIndex = memos.actual.indexOf(actual);
71519 if (actualIndex !== -1) {
71520 if (actualIndex === memos.expected.indexOf(expected)) {
71521 return true;
71522 }
71523 }
71524
71525 memos.actual.push(actual);
71526 memos.expected.push(expected);
71527
71528 return objEquiv(actual, expected, strict, memos);
71529 }
71530 }
71531
71532 function isArguments(object) {
71533 return Object.prototype.toString.call(object) == '[object Arguments]';
71534 }
71535
71536 function objEquiv(a, b, strict, actualVisitedObjects) {
71537 if (a === null || a === undefined || b === null || b === undefined)
71538 return false;
71539 // if one is a primitive, the other must be same
71540 if (util.isPrimitive(a) || util.isPrimitive(b))
71541 return a === b;
71542 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
71543 return false;
71544 var aIsArgs = isArguments(a);
71545 var bIsArgs = isArguments(b);
71546 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
71547 return false;
71548 if (aIsArgs) {
71549 a = pSlice.call(a);
71550 b = pSlice.call(b);
71551 return _deepEqual(a, b, strict);
71552 }
71553 var ka = objectKeys(a);
71554 var kb = objectKeys(b);
71555 var key, i;
71556 // having the same number of owned properties (keys incorporates
71557 // hasOwnProperty)
71558 if (ka.length !== kb.length)
71559 return false;
71560 //the same set of keys (although not necessarily the same order),
71561 ka.sort();
71562 kb.sort();
71563 //~~~cheap key test
71564 for (i = ka.length - 1; i >= 0; i--) {
71565 if (ka[i] !== kb[i])
71566 return false;
71567 }
71568 //equivalent values for every corresponding key, and
71569 //~~~possibly expensive deep test
71570 for (i = ka.length - 1; i >= 0; i--) {
71571 key = ka[i];
71572 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
71573 return false;
71574 }
71575 return true;
71576 }
71577
71578 // 8. The non-equivalence assertion tests for any deep inequality.
71579 // assert.notDeepEqual(actual, expected, message_opt);
71580
71581 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
71582 if (_deepEqual(actual, expected, false)) {
71583 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
71584 }
71585 };
71586
71587 assert.notDeepStrictEqual = notDeepStrictEqual;
71588 function notDeepStrictEqual(actual, expected, message) {
71589 if (_deepEqual(actual, expected, true)) {
71590 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
71591 }
71592 }
71593
71594
71595 // 9. The strict equality assertion tests strict equality, as determined by ===.
71596 // assert.strictEqual(actual, expected, message_opt);
71597
71598 assert.strictEqual = function strictEqual(actual, expected, message) {
71599 if (actual !== expected) {
71600 fail(actual, expected, message, '===', assert.strictEqual);
71601 }
71602 };
71603
71604 // 10. The strict non-equality assertion tests for strict inequality, as
71605 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
71606
71607 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
71608 if (actual === expected) {
71609 fail(actual, expected, message, '!==', assert.notStrictEqual);
71610 }
71611 };
71612
71613 function expectedException(actual, expected) {
71614 if (!actual || !expected) {
71615 return false;
71616 }
71617
71618 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
71619 return expected.test(actual);
71620 }
71621
71622 try {
71623 if (actual instanceof expected) {
71624 return true;
71625 }
71626 } catch (e) {
71627 // Ignore. The instanceof check doesn't work for arrow functions.
71628 }
71629
71630 if (Error.isPrototypeOf(expected)) {
71631 return false;
71632 }
71633
71634 return expected.call({}, actual) === true;
71635 }
71636
71637 function _tryBlock(block) {
71638 var error;
71639 try {
71640 block();
71641 } catch (e) {
71642 error = e;
71643 }
71644 return error;
71645 }
71646
71647 function _throws(shouldThrow, block, expected, message) {
71648 var actual;
71649
71650 if (typeof block !== 'function') {
71651 throw new TypeError('"block" argument must be a function');
71652 }
71653
71654 if (typeof expected === 'string') {
71655 message = expected;
71656 expected = null;
71657 }
71658
71659 actual = _tryBlock(block);
71660
71661 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
71662 (message ? ' ' + message : '.');
71663
71664 if (shouldThrow && !actual) {
71665 fail(actual, expected, 'Missing expected exception' + message);
71666 }
71667
71668 var userProvidedMessage = typeof message === 'string';
71669 var isUnwantedException = !shouldThrow && util.isError(actual);
71670 var isUnexpectedException = !shouldThrow && actual && !expected;
71671
71672 if ((isUnwantedException &&
71673 userProvidedMessage &&
71674 expectedException(actual, expected)) ||
71675 isUnexpectedException) {
71676 fail(actual, expected, 'Got unwanted exception' + message);
71677 }
71678
71679 if ((shouldThrow && actual && expected &&
71680 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
71681 throw actual;
71682 }
71683 }
71684
71685 // 11. Expected to throw an error:
71686 // assert.throws(block, Error_opt, message_opt);
71687
71688 assert.throws = function(block, /*optional*/error, /*optional*/message) {
71689 _throws(true, block, error, message);
71690 };
71691
71692 // EXTENSION! This is annoying to write outside this module.
71693 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
71694 _throws(false, block, error, message);
71695 };
71696
71697 assert.ifError = function(err) { if (err) throw err; };
71698
71699 var objectKeys = Object.keys || function (obj) {
71700 var keys = [];
71701 for (var key in obj) {
71702 if (hasOwn.call(obj, key)) keys.push(key);
71703 }
71704 return keys;
71705 };
71706
71707 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
71708 },{"util/":30}],2:[function(require,module,exports){
71709 'use strict'
71710
71711 exports.byteLength = byteLength
71712 exports.toByteArray = toByteArray
71713 exports.fromByteArray = fromByteArray
71714
71715 var lookup = []
71716 var revLookup = []
71717 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
71718
71719 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
71720 for (var i = 0, len = code.length; i < len; ++i) {
71721 lookup[i] = code[i]
71722 revLookup[code.charCodeAt(i)] = i
71723 }
71724
71725 revLookup['-'.charCodeAt(0)] = 62
71726 revLookup['_'.charCodeAt(0)] = 63
71727
71728 function placeHoldersCount (b64) {
71729 var len = b64.length
71730 if (len % 4 > 0) {
71731 throw new Error('Invalid string. Length must be a multiple of 4')
71732 }
71733
71734 // the number of equal signs (place holders)
71735 // if there are two placeholders, than the two characters before it
71736 // represent one byte
71737 // if there is only one, then the three characters before it represent 2 bytes
71738 // this is just a cheap hack to not do indexOf twice
71739 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
71740 }
71741
71742 function byteLength (b64) {
71743 // base64 is 4/3 + up to two characters of the original data
71744 return b64.length * 3 / 4 - placeHoldersCount(b64)
71745 }
71746
71747 function toByteArray (b64) {
71748 var i, j, l, tmp, placeHolders, arr
71749 var len = b64.length
71750 placeHolders = placeHoldersCount(b64)
71751
71752 arr = new Arr(len * 3 / 4 - placeHolders)
71753
71754 // if there are placeholders, only get up to the last complete 4 chars
71755 l = placeHolders > 0 ? len - 4 : len
71756
71757 var L = 0
71758
71759 for (i = 0, j = 0; i < l; i += 4, j += 3) {
71760 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
71761 arr[L++] = (tmp >> 16) & 0xFF
71762 arr[L++] = (tmp >> 8) & 0xFF
71763 arr[L++] = tmp & 0xFF
71764 }
71765
71766 if (placeHolders === 2) {
71767 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
71768 arr[L++] = tmp & 0xFF
71769 } else if (placeHolders === 1) {
71770 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
71771 arr[L++] = (tmp >> 8) & 0xFF
71772 arr[L++] = tmp & 0xFF
71773 }
71774
71775 return arr
71776 }
71777
71778 function tripletToBase64 (num) {
71779 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
71780 }
71781
71782 function encodeChunk (uint8, start, end) {
71783 var tmp
71784 var output = []
71785 for (var i = start; i < end; i += 3) {
71786 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
71787 output.push(tripletToBase64(tmp))
71788 }
71789 return output.join('')
71790 }
71791
71792 function fromByteArray (uint8) {
71793 var tmp
71794 var len = uint8.length
71795 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
71796 var output = ''
71797 var parts = []
71798 var maxChunkLength = 16383 // must be multiple of 3
71799
71800 // go through the array every three bytes, we'll deal with trailing stuff later
71801 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
71802 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
71803 }
71804
71805 // pad the end with zeros, but make sure to not forget the extra bytes
71806 if (extraBytes === 1) {
71807 tmp = uint8[len - 1]
71808 output += lookup[tmp >> 2]
71809 output += lookup[(tmp << 4) & 0x3F]
71810 output += '=='
71811 } else if (extraBytes === 2) {
71812 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
71813 output += lookup[tmp >> 10]
71814 output += lookup[(tmp >> 4) & 0x3F]
71815 output += lookup[(tmp << 2) & 0x3F]
71816 output += '='
71817 }
71818
71819 parts.push(output)
71820
71821 return parts.join('')
71822 }
71823
71824 },{}],3:[function(require,module,exports){
71825
71826 },{}],4:[function(require,module,exports){
71827 (function (global){
71828 'use strict';
71829
71830 var buffer = require('buffer');
71831 var Buffer = buffer.Buffer;
71832 var SlowBuffer = buffer.SlowBuffer;
71833 var MAX_LEN = buffer.kMaxLength || 2147483647;
71834 exports.alloc = function alloc(size, fill, encoding) {
71835 if (typeof Buffer.alloc === 'function') {
71836 return Buffer.alloc(size, fill, encoding);
71837 }
71838 if (typeof encoding === 'number') {
71839 throw new TypeError('encoding must not be number');
71840 }
71841 if (typeof size !== 'number') {
71842 throw new TypeError('size must be a number');
71843 }
71844 if (size > MAX_LEN) {
71845 throw new RangeError('size is too large');
71846 }
71847 var enc = encoding;
71848 var _fill = fill;
71849 if (_fill === undefined) {
71850 enc = undefined;
71851 _fill = 0;
71852 }
71853 var buf = new Buffer(size);
71854 if (typeof _fill === 'string') {
71855 var fillBuf = new Buffer(_fill, enc);
71856 var flen = fillBuf.length;
71857 var i = -1;
71858 while (++i < size) {
71859 buf[i] = fillBuf[i % flen];
71860 }
71861 } else {
71862 buf.fill(_fill);
71863 }
71864 return buf;
71865 }
71866 exports.allocUnsafe = function allocUnsafe(size) {
71867 if (typeof Buffer.allocUnsafe === 'function') {
71868 return Buffer.allocUnsafe(size);
71869 }
71870 if (typeof size !== 'number') {
71871 throw new TypeError('size must be a number');
71872 }
71873 if (size > MAX_LEN) {
71874 throw new RangeError('size is too large');
71875 }
71876 return new Buffer(size);
71877 }
71878 exports.from = function from(value, encodingOrOffset, length) {
71879 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
71880 return Buffer.from(value, encodingOrOffset, length);
71881 }
71882 if (typeof value === 'number') {
71883 throw new TypeError('"value" argument must not be a number');
71884 }
71885 if (typeof value === 'string') {
71886 return new Buffer(value, encodingOrOffset);
71887 }
71888 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
71889 var offset = encodingOrOffset;
71890 if (arguments.length === 1) {
71891 return new Buffer(value);
71892 }
71893 if (typeof offset === 'undefined') {
71894 offset = 0;
71895 }
71896 var len = length;
71897 if (typeof len === 'undefined') {
71898 len = value.byteLength - offset;
71899 }
71900 if (offset >= value.byteLength) {
71901 throw new RangeError('\'offset\' is out of bounds');
71902 }
71903 if (len > value.byteLength - offset) {
71904 throw new RangeError('\'length\' is out of bounds');
71905 }
71906 return new Buffer(value.slice(offset, offset + len));
71907 }
71908 if (Buffer.isBuffer(value)) {
71909 var out = new Buffer(value.length);
71910 value.copy(out, 0, 0, value.length);
71911 return out;
71912 }
71913 if (value) {
71914 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
71915 return new Buffer(value);
71916 }
71917 if (value.type === 'Buffer' && Array.isArray(value.data)) {
71918 return new Buffer(value.data);
71919 }
71920 }
71921
71922 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
71923 }
71924 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
71925 if (typeof Buffer.allocUnsafeSlow === 'function') {
71926 return Buffer.allocUnsafeSlow(size);
71927 }
71928 if (typeof size !== 'number') {
71929 throw new TypeError('size must be a number');
71930 }
71931 if (size >= MAX_LEN) {
71932 throw new RangeError('size is too large');
71933 }
71934 return new SlowBuffer(size);
71935 }
71936
71937 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
71938 },{"buffer":5}],5:[function(require,module,exports){
71939 /*!
71940 * The buffer module from node.js, for the browser.
71941 *
71942 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
71943 * @license MIT
71944 */
71945 /* eslint-disable no-proto */
71946
71947 'use strict'
71948
71949 var base64 = require('base64-js')
71950 var ieee754 = require('ieee754')
71951
71952 exports.Buffer = Buffer
71953 exports.SlowBuffer = SlowBuffer
71954 exports.INSPECT_MAX_BYTES = 50
71955
71956 var K_MAX_LENGTH = 0x7fffffff
71957 exports.kMaxLength = K_MAX_LENGTH
71958
71959 /**
71960 * If `Buffer.TYPED_ARRAY_SUPPORT`:
71961 * === true Use Uint8Array implementation (fastest)
71962 * === false Print warning and recommend using `buffer` v4.x which has an Object
71963 * implementation (most compatible, even IE6)
71964 *
71965 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
71966 * Opera 11.6+, iOS 4.2+.
71967 *
71968 * We report that the browser does not support typed arrays if the are not subclassable
71969 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
71970 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
71971 * for __proto__ and has a buggy typed array implementation.
71972 */
71973 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
71974
71975 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
71976 typeof console.error === 'function') {
71977 console.error(
71978 'This browser lacks typed array (Uint8Array) support which is required by ' +
71979 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
71980 )
71981 }
71982
71983 function typedArraySupport () {
71984 // Can typed array instances can be augmented?
71985 try {
71986 var arr = new Uint8Array(1)
71987 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
71988 return arr.foo() === 42
71989 } catch (e) {
71990 return false
71991 }
71992 }
71993
71994 function createBuffer (length) {
71995 if (length > K_MAX_LENGTH) {
71996 throw new RangeError('Invalid typed array length')
71997 }
71998 // Return an augmented `Uint8Array` instance
71999 var buf = new Uint8Array(length)
72000 buf.__proto__ = Buffer.prototype
72001 return buf
72002 }
72003
72004 /**
72005 * The Buffer constructor returns instances of `Uint8Array` that have their
72006 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
72007 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
72008 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
72009 * returns a single octet.
72010 *
72011 * The `Uint8Array` prototype remains unmodified.
72012 */
72013
72014 function Buffer (arg, encodingOrOffset, length) {
72015 // Common case.
72016 if (typeof arg === 'number') {
72017 if (typeof encodingOrOffset === 'string') {
72018 throw new Error(
72019 'If encoding is specified then the first argument must be a string'
72020 )
72021 }
72022 return allocUnsafe(arg)
72023 }
72024 return from(arg, encodingOrOffset, length)
72025 }
72026
72027 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
72028 if (typeof Symbol !== 'undefined' && Symbol.species &&
72029 Buffer[Symbol.species] === Buffer) {
72030 Object.defineProperty(Buffer, Symbol.species, {
72031 value: null,
72032 configurable: true,
72033 enumerable: false,
72034 writable: false
72035 })
72036 }
72037
72038 Buffer.poolSize = 8192 // not used by this implementation
72039
72040 function from (value, encodingOrOffset, length) {
72041 if (typeof value === 'number') {
72042 throw new TypeError('"value" argument must not be a number')
72043 }
72044
72045 if (value instanceof ArrayBuffer) {
72046 return fromArrayBuffer(value, encodingOrOffset, length)
72047 }
72048
72049 if (typeof value === 'string') {
72050 return fromString(value, encodingOrOffset)
72051 }
72052
72053 return fromObject(value)
72054 }
72055
72056 /**
72057 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
72058 * if value is a number.
72059 * Buffer.from(str[, encoding])
72060 * Buffer.from(array)
72061 * Buffer.from(buffer)
72062 * Buffer.from(arrayBuffer[, byteOffset[, length]])
72063 **/
72064 Buffer.from = function (value, encodingOrOffset, length) {
72065 return from(value, encodingOrOffset, length)
72066 }
72067
72068 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
72069 // https://github.com/feross/buffer/pull/148
72070 Buffer.prototype.__proto__ = Uint8Array.prototype
72071 Buffer.__proto__ = Uint8Array
72072
72073 function assertSize (size) {
72074 if (typeof size !== 'number') {
72075 throw new TypeError('"size" argument must be a number')
72076 } else if (size < 0) {
72077 throw new RangeError('"size" argument must not be negative')
72078 }
72079 }
72080
72081 function alloc (size, fill, encoding) {
72082 assertSize(size)
72083 if (size <= 0) {
72084 return createBuffer(size)
72085 }
72086 if (fill !== undefined) {
72087 // Only pay attention to encoding if it's a string. This
72088 // prevents accidentally sending in a number that would
72089 // be interpretted as a start offset.
72090 return typeof encoding === 'string'
72091 ? createBuffer(size).fill(fill, encoding)
72092 : createBuffer(size).fill(fill)
72093 }
72094 return createBuffer(size)
72095 }
72096
72097 /**
72098 * Creates a new filled Buffer instance.
72099 * alloc(size[, fill[, encoding]])
72100 **/
72101 Buffer.alloc = function (size, fill, encoding) {
72102 return alloc(size, fill, encoding)
72103 }
72104
72105 function allocUnsafe (size) {
72106 assertSize(size)
72107 return createBuffer(size < 0 ? 0 : checked(size) | 0)
72108 }
72109
72110 /**
72111 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
72112 * */
72113 Buffer.allocUnsafe = function (size) {
72114 return allocUnsafe(size)
72115 }
72116 /**
72117 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
72118 */
72119 Buffer.allocUnsafeSlow = function (size) {
72120 return allocUnsafe(size)
72121 }
72122
72123 function fromString (string, encoding) {
72124 if (typeof encoding !== 'string' || encoding === '') {
72125 encoding = 'utf8'
72126 }
72127
72128 if (!Buffer.isEncoding(encoding)) {
72129 throw new TypeError('"encoding" must be a valid string encoding')
72130 }
72131
72132 var length = byteLength(string, encoding) | 0
72133 var buf = createBuffer(length)
72134
72135 var actual = buf.write(string, encoding)
72136
72137 if (actual !== length) {
72138 // Writing a hex string, for example, that contains invalid characters will
72139 // cause everything after the first invalid character to be ignored. (e.g.
72140 // 'abxxcd' will be treated as 'ab')
72141 buf = buf.slice(0, actual)
72142 }
72143
72144 return buf
72145 }
72146
72147 function fromArrayLike (array) {
72148 var length = array.length < 0 ? 0 : checked(array.length) | 0
72149 var buf = createBuffer(length)
72150 for (var i = 0; i < length; i += 1) {
72151 buf[i] = array[i] & 255
72152 }
72153 return buf
72154 }
72155
72156 function fromArrayBuffer (array, byteOffset, length) {
72157 if (byteOffset < 0 || array.byteLength < byteOffset) {
72158 throw new RangeError('\'offset\' is out of bounds')
72159 }
72160
72161 if (array.byteLength < byteOffset + (length || 0)) {
72162 throw new RangeError('\'length\' is out of bounds')
72163 }
72164
72165 var buf
72166 if (byteOffset === undefined && length === undefined) {
72167 buf = new Uint8Array(array)
72168 } else if (length === undefined) {
72169 buf = new Uint8Array(array, byteOffset)
72170 } else {
72171 buf = new Uint8Array(array, byteOffset, length)
72172 }
72173
72174 // Return an augmented `Uint8Array` instance
72175 buf.__proto__ = Buffer.prototype
72176 return buf
72177 }
72178
72179 function fromObject (obj) {
72180 if (Buffer.isBuffer(obj)) {
72181 var len = checked(obj.length) | 0
72182 var buf = createBuffer(len)
72183
72184 if (buf.length === 0) {
72185 return buf
72186 }
72187
72188 obj.copy(buf, 0, 0, len)
72189 return buf
72190 }
72191
72192 if (obj) {
72193 if (ArrayBuffer.isView(obj) || 'length' in obj) {
72194 if (typeof obj.length !== 'number' || isnan(obj.length)) {
72195 return createBuffer(0)
72196 }
72197 return fromArrayLike(obj)
72198 }
72199
72200 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
72201 return fromArrayLike(obj.data)
72202 }
72203 }
72204
72205 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
72206 }
72207
72208 function checked (length) {
72209 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
72210 // length is NaN (which is otherwise coerced to zero.)
72211 if (length >= K_MAX_LENGTH) {
72212 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
72213 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
72214 }
72215 return length | 0
72216 }
72217
72218 function SlowBuffer (length) {
72219 if (+length != length) { // eslint-disable-line eqeqeq
72220 length = 0
72221 }
72222 return Buffer.alloc(+length)
72223 }
72224
72225 Buffer.isBuffer = function isBuffer (b) {
72226 return b != null && b._isBuffer === true
72227 }
72228
72229 Buffer.compare = function compare (a, b) {
72230 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
72231 throw new TypeError('Arguments must be Buffers')
72232 }
72233
72234 if (a === b) return 0
72235
72236 var x = a.length
72237 var y = b.length
72238
72239 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
72240 if (a[i] !== b[i]) {
72241 x = a[i]
72242 y = b[i]
72243 break
72244 }
72245 }
72246
72247 if (x < y) return -1
72248 if (y < x) return 1
72249 return 0
72250 }
72251
72252 Buffer.isEncoding = function isEncoding (encoding) {
72253 switch (String(encoding).toLowerCase()) {
72254 case 'hex':
72255 case 'utf8':
72256 case 'utf-8':
72257 case 'ascii':
72258 case 'latin1':
72259 case 'binary':
72260 case 'base64':
72261 case 'ucs2':
72262 case 'ucs-2':
72263 case 'utf16le':
72264 case 'utf-16le':
72265 return true
72266 default:
72267 return false
72268 }
72269 }
72270
72271 Buffer.concat = function concat (list, length) {
72272 if (!Array.isArray(list)) {
72273 throw new TypeError('"list" argument must be an Array of Buffers')
72274 }
72275
72276 if (list.length === 0) {
72277 return Buffer.alloc(0)
72278 }
72279
72280 var i
72281 if (length === undefined) {
72282 length = 0
72283 for (i = 0; i < list.length; ++i) {
72284 length += list[i].length
72285 }
72286 }
72287
72288 var buffer = Buffer.allocUnsafe(length)
72289 var pos = 0
72290 for (i = 0; i < list.length; ++i) {
72291 var buf = list[i]
72292 if (!Buffer.isBuffer(buf)) {
72293 throw new TypeError('"list" argument must be an Array of Buffers')
72294 }
72295 buf.copy(buffer, pos)
72296 pos += buf.length
72297 }
72298 return buffer
72299 }
72300
72301 function byteLength (string, encoding) {
72302 if (Buffer.isBuffer(string)) {
72303 return string.length
72304 }
72305 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
72306 return string.byteLength
72307 }
72308 if (typeof string !== 'string') {
72309 string = '' + string
72310 }
72311
72312 var len = string.length
72313 if (len === 0) return 0
72314
72315 // Use a for loop to avoid recursion
72316 var loweredCase = false
72317 for (;;) {
72318 switch (encoding) {
72319 case 'ascii':
72320 case 'latin1':
72321 case 'binary':
72322 return len
72323 case 'utf8':
72324 case 'utf-8':
72325 case undefined:
72326 return utf8ToBytes(string).length
72327 case 'ucs2':
72328 case 'ucs-2':
72329 case 'utf16le':
72330 case 'utf-16le':
72331 return len * 2
72332 case 'hex':
72333 return len >>> 1
72334 case 'base64':
72335 return base64ToBytes(string).length
72336 default:
72337 if (loweredCase) return utf8ToBytes(string).length // assume utf8
72338 encoding = ('' + encoding).toLowerCase()
72339 loweredCase = true
72340 }
72341 }
72342 }
72343 Buffer.byteLength = byteLength
72344
72345 function slowToString (encoding, start, end) {
72346 var loweredCase = false
72347
72348 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
72349 // property of a typed array.
72350
72351 // This behaves neither like String nor Uint8Array in that we set start/end
72352 // to their upper/lower bounds if the value passed is out of range.
72353 // undefined is handled specially as per ECMA-262 6th Edition,
72354 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
72355 if (start === undefined || start < 0) {
72356 start = 0
72357 }
72358 // Return early if start > this.length. Done here to prevent potential uint32
72359 // coercion fail below.
72360 if (start > this.length) {
72361 return ''
72362 }
72363
72364 if (end === undefined || end > this.length) {
72365 end = this.length
72366 }
72367
72368 if (end <= 0) {
72369 return ''
72370 }
72371
72372 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
72373 end >>>= 0
72374 start >>>= 0
72375
72376 if (end <= start) {
72377 return ''
72378 }
72379
72380 if (!encoding) encoding = 'utf8'
72381
72382 while (true) {
72383 switch (encoding) {
72384 case 'hex':
72385 return hexSlice(this, start, end)
72386
72387 case 'utf8':
72388 case 'utf-8':
72389 return utf8Slice(this, start, end)
72390
72391 case 'ascii':
72392 return asciiSlice(this, start, end)
72393
72394 case 'latin1':
72395 case 'binary':
72396 return latin1Slice(this, start, end)
72397
72398 case 'base64':
72399 return base64Slice(this, start, end)
72400
72401 case 'ucs2':
72402 case 'ucs-2':
72403 case 'utf16le':
72404 case 'utf-16le':
72405 return utf16leSlice(this, start, end)
72406
72407 default:
72408 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
72409 encoding = (encoding + '').toLowerCase()
72410 loweredCase = true
72411 }
72412 }
72413 }
72414
72415 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
72416 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
72417 // reliably in a browserify context because there could be multiple different
72418 // copies of the 'buffer' package in use. This method works even for Buffer
72419 // instances that were created from another copy of the `buffer` package.
72420 // See: https://github.com/feross/buffer/issues/154
72421 Buffer.prototype._isBuffer = true
72422
72423 function swap (b, n, m) {
72424 var i = b[n]
72425 b[n] = b[m]
72426 b[m] = i
72427 }
72428
72429 Buffer.prototype.swap16 = function swap16 () {
72430 var len = this.length
72431 if (len % 2 !== 0) {
72432 throw new RangeError('Buffer size must be a multiple of 16-bits')
72433 }
72434 for (var i = 0; i < len; i += 2) {
72435 swap(this, i, i + 1)
72436 }
72437 return this
72438 }
72439
72440 Buffer.prototype.swap32 = function swap32 () {
72441 var len = this.length
72442 if (len % 4 !== 0) {
72443 throw new RangeError('Buffer size must be a multiple of 32-bits')
72444 }
72445 for (var i = 0; i < len; i += 4) {
72446 swap(this, i, i + 3)
72447 swap(this, i + 1, i + 2)
72448 }
72449 return this
72450 }
72451
72452 Buffer.prototype.swap64 = function swap64 () {
72453 var len = this.length
72454 if (len % 8 !== 0) {
72455 throw new RangeError('Buffer size must be a multiple of 64-bits')
72456 }
72457 for (var i = 0; i < len; i += 8) {
72458 swap(this, i, i + 7)
72459 swap(this, i + 1, i + 6)
72460 swap(this, i + 2, i + 5)
72461 swap(this, i + 3, i + 4)
72462 }
72463 return this
72464 }
72465
72466 Buffer.prototype.toString = function toString () {
72467 var length = this.length
72468 if (length === 0) return ''
72469 if (arguments.length === 0) return utf8Slice(this, 0, length)
72470 return slowToString.apply(this, arguments)
72471 }
72472
72473 Buffer.prototype.equals = function equals (b) {
72474 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
72475 if (this === b) return true
72476 return Buffer.compare(this, b) === 0
72477 }
72478
72479 Buffer.prototype.inspect = function inspect () {
72480 var str = ''
72481 var max = exports.INSPECT_MAX_BYTES
72482 if (this.length > 0) {
72483 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
72484 if (this.length > max) str += ' ... '
72485 }
72486 return '<Buffer ' + str + '>'
72487 }
72488
72489 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
72490 if (!Buffer.isBuffer(target)) {
72491 throw new TypeError('Argument must be a Buffer')
72492 }
72493
72494 if (start === undefined) {
72495 start = 0
72496 }
72497 if (end === undefined) {
72498 end = target ? target.length : 0
72499 }
72500 if (thisStart === undefined) {
72501 thisStart = 0
72502 }
72503 if (thisEnd === undefined) {
72504 thisEnd = this.length
72505 }
72506
72507 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
72508 throw new RangeError('out of range index')
72509 }
72510
72511 if (thisStart >= thisEnd && start >= end) {
72512 return 0
72513 }
72514 if (thisStart >= thisEnd) {
72515 return -1
72516 }
72517 if (start >= end) {
72518 return 1
72519 }
72520
72521 start >>>= 0
72522 end >>>= 0
72523 thisStart >>>= 0
72524 thisEnd >>>= 0
72525
72526 if (this === target) return 0
72527
72528 var x = thisEnd - thisStart
72529 var y = end - start
72530 var len = Math.min(x, y)
72531
72532 var thisCopy = this.slice(thisStart, thisEnd)
72533 var targetCopy = target.slice(start, end)
72534
72535 for (var i = 0; i < len; ++i) {
72536 if (thisCopy[i] !== targetCopy[i]) {
72537 x = thisCopy[i]
72538 y = targetCopy[i]
72539 break
72540 }
72541 }
72542
72543 if (x < y) return -1
72544 if (y < x) return 1
72545 return 0
72546 }
72547
72548 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
72549 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
72550 //
72551 // Arguments:
72552 // - buffer - a Buffer to search
72553 // - val - a string, Buffer, or number
72554 // - byteOffset - an index into `buffer`; will be clamped to an int32
72555 // - encoding - an optional encoding, relevant is val is a string
72556 // - dir - true for indexOf, false for lastIndexOf
72557 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
72558 // Empty buffer means no match
72559 if (buffer.length === 0) return -1
72560
72561 // Normalize byteOffset
72562 if (typeof byteOffset === 'string') {
72563 encoding = byteOffset
72564 byteOffset = 0
72565 } else if (byteOffset > 0x7fffffff) {
72566 byteOffset = 0x7fffffff
72567 } else if (byteOffset < -0x80000000) {
72568 byteOffset = -0x80000000
72569 }
72570 byteOffset = +byteOffset // Coerce to Number.
72571 if (isNaN(byteOffset)) {
72572 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
72573 byteOffset = dir ? 0 : (buffer.length - 1)
72574 }
72575
72576 // Normalize byteOffset: negative offsets start from the end of the buffer
72577 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
72578 if (byteOffset >= buffer.length) {
72579 if (dir) return -1
72580 else byteOffset = buffer.length - 1
72581 } else if (byteOffset < 0) {
72582 if (dir) byteOffset = 0
72583 else return -1
72584 }
72585
72586 // Normalize val
72587 if (typeof val === 'string') {
72588 val = Buffer.from(val, encoding)
72589 }
72590
72591 // Finally, search either indexOf (if dir is true) or lastIndexOf
72592 if (Buffer.isBuffer(val)) {
72593 // Special case: looking for empty string/buffer always fails
72594 if (val.length === 0) {
72595 return -1
72596 }
72597 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
72598 } else if (typeof val === 'number') {
72599 val = val & 0xFF // Search for a byte value [0-255]
72600 if (typeof Uint8Array.prototype.indexOf === 'function') {
72601 if (dir) {
72602 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
72603 } else {
72604 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
72605 }
72606 }
72607 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
72608 }
72609
72610 throw new TypeError('val must be string, number or Buffer')
72611 }
72612
72613 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
72614 var indexSize = 1
72615 var arrLength = arr.length
72616 var valLength = val.length
72617
72618 if (encoding !== undefined) {
72619 encoding = String(encoding).toLowerCase()
72620 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
72621 encoding === 'utf16le' || encoding === 'utf-16le') {
72622 if (arr.length < 2 || val.length < 2) {
72623 return -1
72624 }
72625 indexSize = 2
72626 arrLength /= 2
72627 valLength /= 2
72628 byteOffset /= 2
72629 }
72630 }
72631
72632 function read (buf, i) {
72633 if (indexSize === 1) {
72634 return buf[i]
72635 } else {
72636 return buf.readUInt16BE(i * indexSize)
72637 }
72638 }
72639
72640 var i
72641 if (dir) {
72642 var foundIndex = -1
72643 for (i = byteOffset; i < arrLength; i++) {
72644 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
72645 if (foundIndex === -1) foundIndex = i
72646 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
72647 } else {
72648 if (foundIndex !== -1) i -= i - foundIndex
72649 foundIndex = -1
72650 }
72651 }
72652 } else {
72653 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
72654 for (i = byteOffset; i >= 0; i--) {
72655 var found = true
72656 for (var j = 0; j < valLength; j++) {
72657 if (read(arr, i + j) !== read(val, j)) {
72658 found = false
72659 break
72660 }
72661 }
72662 if (found) return i
72663 }
72664 }
72665
72666 return -1
72667 }
72668
72669 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
72670 return this.indexOf(val, byteOffset, encoding) !== -1
72671 }
72672
72673 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
72674 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
72675 }
72676
72677 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
72678 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
72679 }
72680
72681 function hexWrite (buf, string, offset, length) {
72682 offset = Number(offset) || 0
72683 var remaining = buf.length - offset
72684 if (!length) {
72685 length = remaining
72686 } else {
72687 length = Number(length)
72688 if (length > remaining) {
72689 length = remaining
72690 }
72691 }
72692
72693 // must be an even number of digits
72694 var strLen = string.length
72695 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
72696
72697 if (length > strLen / 2) {
72698 length = strLen / 2
72699 }
72700 for (var i = 0; i < length; ++i) {
72701 var parsed = parseInt(string.substr(i * 2, 2), 16)
72702 if (isNaN(parsed)) return i
72703 buf[offset + i] = parsed
72704 }
72705 return i
72706 }
72707
72708 function utf8Write (buf, string, offset, length) {
72709 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
72710 }
72711
72712 function asciiWrite (buf, string, offset, length) {
72713 return blitBuffer(asciiToBytes(string), buf, offset, length)
72714 }
72715
72716 function latin1Write (buf, string, offset, length) {
72717 return asciiWrite(buf, string, offset, length)
72718 }
72719
72720 function base64Write (buf, string, offset, length) {
72721 return blitBuffer(base64ToBytes(string), buf, offset, length)
72722 }
72723
72724 function ucs2Write (buf, string, offset, length) {
72725 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
72726 }
72727
72728 Buffer.prototype.write = function write (string, offset, length, encoding) {
72729 // Buffer#write(string)
72730 if (offset === undefined) {
72731 encoding = 'utf8'
72732 length = this.length
72733 offset = 0
72734 // Buffer#write(string, encoding)
72735 } else if (length === undefined && typeof offset === 'string') {
72736 encoding = offset
72737 length = this.length
72738 offset = 0
72739 // Buffer#write(string, offset[, length][, encoding])
72740 } else if (isFinite(offset)) {
72741 offset = offset >>> 0
72742 if (isFinite(length)) {
72743 length = length >>> 0
72744 if (encoding === undefined) encoding = 'utf8'
72745 } else {
72746 encoding = length
72747 length = undefined
72748 }
72749 } else {
72750 throw new Error(
72751 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
72752 )
72753 }
72754
72755 var remaining = this.length - offset
72756 if (length === undefined || length > remaining) length = remaining
72757
72758 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
72759 throw new RangeError('Attempt to write outside buffer bounds')
72760 }
72761
72762 if (!encoding) encoding = 'utf8'
72763
72764 var loweredCase = false
72765 for (;;) {
72766 switch (encoding) {
72767 case 'hex':
72768 return hexWrite(this, string, offset, length)
72769
72770 case 'utf8':
72771 case 'utf-8':
72772 return utf8Write(this, string, offset, length)
72773
72774 case 'ascii':
72775 return asciiWrite(this, string, offset, length)
72776
72777 case 'latin1':
72778 case 'binary':
72779 return latin1Write(this, string, offset, length)
72780
72781 case 'base64':
72782 // Warning: maxLength not taken into account in base64Write
72783 return base64Write(this, string, offset, length)
72784
72785 case 'ucs2':
72786 case 'ucs-2':
72787 case 'utf16le':
72788 case 'utf-16le':
72789 return ucs2Write(this, string, offset, length)
72790
72791 default:
72792 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
72793 encoding = ('' + encoding).toLowerCase()
72794 loweredCase = true
72795 }
72796 }
72797 }
72798
72799 Buffer.prototype.toJSON = function toJSON () {
72800 return {
72801 type: 'Buffer',
72802 data: Array.prototype.slice.call(this._arr || this, 0)
72803 }
72804 }
72805
72806 function base64Slice (buf, start, end) {
72807 if (start === 0 && end === buf.length) {
72808 return base64.fromByteArray(buf)
72809 } else {
72810 return base64.fromByteArray(buf.slice(start, end))
72811 }
72812 }
72813
72814 function utf8Slice (buf, start, end) {
72815 end = Math.min(buf.length, end)
72816 var res = []
72817
72818 var i = start
72819 while (i < end) {
72820 var firstByte = buf[i]
72821 var codePoint = null
72822 var bytesPerSequence = (firstByte > 0xEF) ? 4
72823 : (firstByte > 0xDF) ? 3
72824 : (firstByte > 0xBF) ? 2
72825 : 1
72826
72827 if (i + bytesPerSequence <= end) {
72828 var secondByte, thirdByte, fourthByte, tempCodePoint
72829
72830 switch (bytesPerSequence) {
72831 case 1:
72832 if (firstByte < 0x80) {
72833 codePoint = firstByte
72834 }
72835 break
72836 case 2:
72837 secondByte = buf[i + 1]
72838 if ((secondByte & 0xC0) === 0x80) {
72839 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
72840 if (tempCodePoint > 0x7F) {
72841 codePoint = tempCodePoint
72842 }
72843 }
72844 break
72845 case 3:
72846 secondByte = buf[i + 1]
72847 thirdByte = buf[i + 2]
72848 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
72849 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
72850 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
72851 codePoint = tempCodePoint
72852 }
72853 }
72854 break
72855 case 4:
72856 secondByte = buf[i + 1]
72857 thirdByte = buf[i + 2]
72858 fourthByte = buf[i + 3]
72859 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
72860 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
72861 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
72862 codePoint = tempCodePoint
72863 }
72864 }
72865 }
72866 }
72867
72868 if (codePoint === null) {
72869 // we did not generate a valid codePoint so insert a
72870 // replacement char (U+FFFD) and advance only 1 byte
72871 codePoint = 0xFFFD
72872 bytesPerSequence = 1
72873 } else if (codePoint > 0xFFFF) {
72874 // encode to utf16 (surrogate pair dance)
72875 codePoint -= 0x10000
72876 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
72877 codePoint = 0xDC00 | codePoint & 0x3FF
72878 }
72879
72880 res.push(codePoint)
72881 i += bytesPerSequence
72882 }
72883
72884 return decodeCodePointsArray(res)
72885 }
72886
72887 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
72888 // the lowest limit is Chrome, with 0x10000 args.
72889 // We go 1 magnitude less, for safety
72890 var MAX_ARGUMENTS_LENGTH = 0x1000
72891
72892 function decodeCodePointsArray (codePoints) {
72893 var len = codePoints.length
72894 if (len <= MAX_ARGUMENTS_LENGTH) {
72895 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
72896 }
72897
72898 // Decode in chunks to avoid "call stack size exceeded".
72899 var res = ''
72900 var i = 0
72901 while (i < len) {
72902 res += String.fromCharCode.apply(
72903 String,
72904 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
72905 )
72906 }
72907 return res
72908 }
72909
72910 function asciiSlice (buf, start, end) {
72911 var ret = ''
72912 end = Math.min(buf.length, end)
72913
72914 for (var i = start; i < end; ++i) {
72915 ret += String.fromCharCode(buf[i] & 0x7F)
72916 }
72917 return ret
72918 }
72919
72920 function latin1Slice (buf, start, end) {
72921 var ret = ''
72922 end = Math.min(buf.length, end)
72923
72924 for (var i = start; i < end; ++i) {
72925 ret += String.fromCharCode(buf[i])
72926 }
72927 return ret
72928 }
72929
72930 function hexSlice (buf, start, end) {
72931 var len = buf.length
72932
72933 if (!start || start < 0) start = 0
72934 if (!end || end < 0 || end > len) end = len
72935
72936 var out = ''
72937 for (var i = start; i < end; ++i) {
72938 out += toHex(buf[i])
72939 }
72940 return out
72941 }
72942
72943 function utf16leSlice (buf, start, end) {
72944 var bytes = buf.slice(start, end)
72945 var res = ''
72946 for (var i = 0; i < bytes.length; i += 2) {
72947 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
72948 }
72949 return res
72950 }
72951
72952 Buffer.prototype.slice = function slice (start, end) {
72953 var len = this.length
72954 start = ~~start
72955 end = end === undefined ? len : ~~end
72956
72957 if (start < 0) {
72958 start += len
72959 if (start < 0) start = 0
72960 } else if (start > len) {
72961 start = len
72962 }
72963
72964 if (end < 0) {
72965 end += len
72966 if (end < 0) end = 0
72967 } else if (end > len) {
72968 end = len
72969 }
72970
72971 if (end < start) end = start
72972
72973 var newBuf = this.subarray(start, end)
72974 // Return an augmented `Uint8Array` instance
72975 newBuf.__proto__ = Buffer.prototype
72976 return newBuf
72977 }
72978
72979 /*
72980 * Need to make sure that buffer isn't trying to write out of bounds.
72981 */
72982 function checkOffset (offset, ext, length) {
72983 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
72984 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
72985 }
72986
72987 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
72988 offset = offset >>> 0
72989 byteLength = byteLength >>> 0
72990 if (!noAssert) checkOffset(offset, byteLength, this.length)
72991
72992 var val = this[offset]
72993 var mul = 1
72994 var i = 0
72995 while (++i < byteLength && (mul *= 0x100)) {
72996 val += this[offset + i] * mul
72997 }
72998
72999 return val
73000 }
73001
73002 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
73003 offset = offset >>> 0
73004 byteLength = byteLength >>> 0
73005 if (!noAssert) {
73006 checkOffset(offset, byteLength, this.length)
73007 }
73008
73009 var val = this[offset + --byteLength]
73010 var mul = 1
73011 while (byteLength > 0 && (mul *= 0x100)) {
73012 val += this[offset + --byteLength] * mul
73013 }
73014
73015 return val
73016 }
73017
73018 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
73019 offset = offset >>> 0
73020 if (!noAssert) checkOffset(offset, 1, this.length)
73021 return this[offset]
73022 }
73023
73024 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
73025 offset = offset >>> 0
73026 if (!noAssert) checkOffset(offset, 2, this.length)
73027 return this[offset] | (this[offset + 1] << 8)
73028 }
73029
73030 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
73031 offset = offset >>> 0
73032 if (!noAssert) checkOffset(offset, 2, this.length)
73033 return (this[offset] << 8) | this[offset + 1]
73034 }
73035
73036 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
73037 offset = offset >>> 0
73038 if (!noAssert) checkOffset(offset, 4, this.length)
73039
73040 return ((this[offset]) |
73041 (this[offset + 1] << 8) |
73042 (this[offset + 2] << 16)) +
73043 (this[offset + 3] * 0x1000000)
73044 }
73045
73046 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
73047 offset = offset >>> 0
73048 if (!noAssert) checkOffset(offset, 4, this.length)
73049
73050 return (this[offset] * 0x1000000) +
73051 ((this[offset + 1] << 16) |
73052 (this[offset + 2] << 8) |
73053 this[offset + 3])
73054 }
73055
73056 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
73057 offset = offset >>> 0
73058 byteLength = byteLength >>> 0
73059 if (!noAssert) checkOffset(offset, byteLength, this.length)
73060
73061 var val = this[offset]
73062 var mul = 1
73063 var i = 0
73064 while (++i < byteLength && (mul *= 0x100)) {
73065 val += this[offset + i] * mul
73066 }
73067 mul *= 0x80
73068
73069 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
73070
73071 return val
73072 }
73073
73074 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
73075 offset = offset >>> 0
73076 byteLength = byteLength >>> 0
73077 if (!noAssert) checkOffset(offset, byteLength, this.length)
73078
73079 var i = byteLength
73080 var mul = 1
73081 var val = this[offset + --i]
73082 while (i > 0 && (mul *= 0x100)) {
73083 val += this[offset + --i] * mul
73084 }
73085 mul *= 0x80
73086
73087 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
73088
73089 return val
73090 }
73091
73092 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
73093 offset = offset >>> 0
73094 if (!noAssert) checkOffset(offset, 1, this.length)
73095 if (!(this[offset] & 0x80)) return (this[offset])
73096 return ((0xff - this[offset] + 1) * -1)
73097 }
73098
73099 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
73100 offset = offset >>> 0
73101 if (!noAssert) checkOffset(offset, 2, this.length)
73102 var val = this[offset] | (this[offset + 1] << 8)
73103 return (val & 0x8000) ? val | 0xFFFF0000 : val
73104 }
73105
73106 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
73107 offset = offset >>> 0
73108 if (!noAssert) checkOffset(offset, 2, this.length)
73109 var val = this[offset + 1] | (this[offset] << 8)
73110 return (val & 0x8000) ? val | 0xFFFF0000 : val
73111 }
73112
73113 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
73114 offset = offset >>> 0
73115 if (!noAssert) checkOffset(offset, 4, this.length)
73116
73117 return (this[offset]) |
73118 (this[offset + 1] << 8) |
73119 (this[offset + 2] << 16) |
73120 (this[offset + 3] << 24)
73121 }
73122
73123 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
73124 offset = offset >>> 0
73125 if (!noAssert) checkOffset(offset, 4, this.length)
73126
73127 return (this[offset] << 24) |
73128 (this[offset + 1] << 16) |
73129 (this[offset + 2] << 8) |
73130 (this[offset + 3])
73131 }
73132
73133 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
73134 offset = offset >>> 0
73135 if (!noAssert) checkOffset(offset, 4, this.length)
73136 return ieee754.read(this, offset, true, 23, 4)
73137 }
73138
73139 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
73140 offset = offset >>> 0
73141 if (!noAssert) checkOffset(offset, 4, this.length)
73142 return ieee754.read(this, offset, false, 23, 4)
73143 }
73144
73145 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
73146 offset = offset >>> 0
73147 if (!noAssert) checkOffset(offset, 8, this.length)
73148 return ieee754.read(this, offset, true, 52, 8)
73149 }
73150
73151 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
73152 offset = offset >>> 0
73153 if (!noAssert) checkOffset(offset, 8, this.length)
73154 return ieee754.read(this, offset, false, 52, 8)
73155 }
73156
73157 function checkInt (buf, value, offset, ext, max, min) {
73158 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
73159 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
73160 if (offset + ext > buf.length) throw new RangeError('Index out of range')
73161 }
73162
73163 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
73164 value = +value
73165 offset = offset >>> 0
73166 byteLength = byteLength >>> 0
73167 if (!noAssert) {
73168 var maxBytes = Math.pow(2, 8 * byteLength) - 1
73169 checkInt(this, value, offset, byteLength, maxBytes, 0)
73170 }
73171
73172 var mul = 1
73173 var i = 0
73174 this[offset] = value & 0xFF
73175 while (++i < byteLength && (mul *= 0x100)) {
73176 this[offset + i] = (value / mul) & 0xFF
73177 }
73178
73179 return offset + byteLength
73180 }
73181
73182 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
73183 value = +value
73184 offset = offset >>> 0
73185 byteLength = byteLength >>> 0
73186 if (!noAssert) {
73187 var maxBytes = Math.pow(2, 8 * byteLength) - 1
73188 checkInt(this, value, offset, byteLength, maxBytes, 0)
73189 }
73190
73191 var i = byteLength - 1
73192 var mul = 1
73193 this[offset + i] = value & 0xFF
73194 while (--i >= 0 && (mul *= 0x100)) {
73195 this[offset + i] = (value / mul) & 0xFF
73196 }
73197
73198 return offset + byteLength
73199 }
73200
73201 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
73202 value = +value
73203 offset = offset >>> 0
73204 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
73205 this[offset] = (value & 0xff)
73206 return offset + 1
73207 }
73208
73209 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
73210 value = +value
73211 offset = offset >>> 0
73212 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
73213 this[offset] = (value & 0xff)
73214 this[offset + 1] = (value >>> 8)
73215 return offset + 2
73216 }
73217
73218 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
73219 value = +value
73220 offset = offset >>> 0
73221 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
73222 this[offset] = (value >>> 8)
73223 this[offset + 1] = (value & 0xff)
73224 return offset + 2
73225 }
73226
73227 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
73228 value = +value
73229 offset = offset >>> 0
73230 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
73231 this[offset + 3] = (value >>> 24)
73232 this[offset + 2] = (value >>> 16)
73233 this[offset + 1] = (value >>> 8)
73234 this[offset] = (value & 0xff)
73235 return offset + 4
73236 }
73237
73238 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
73239 value = +value
73240 offset = offset >>> 0
73241 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
73242 this[offset] = (value >>> 24)
73243 this[offset + 1] = (value >>> 16)
73244 this[offset + 2] = (value >>> 8)
73245 this[offset + 3] = (value & 0xff)
73246 return offset + 4
73247 }
73248
73249 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
73250 value = +value
73251 offset = offset >>> 0
73252 if (!noAssert) {
73253 var limit = Math.pow(2, (8 * byteLength) - 1)
73254
73255 checkInt(this, value, offset, byteLength, limit - 1, -limit)
73256 }
73257
73258 var i = 0
73259 var mul = 1
73260 var sub = 0
73261 this[offset] = value & 0xFF
73262 while (++i < byteLength && (mul *= 0x100)) {
73263 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
73264 sub = 1
73265 }
73266 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
73267 }
73268
73269 return offset + byteLength
73270 }
73271
73272 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
73273 value = +value
73274 offset = offset >>> 0
73275 if (!noAssert) {
73276 var limit = Math.pow(2, (8 * byteLength) - 1)
73277
73278 checkInt(this, value, offset, byteLength, limit - 1, -limit)
73279 }
73280
73281 var i = byteLength - 1
73282 var mul = 1
73283 var sub = 0
73284 this[offset + i] = value & 0xFF
73285 while (--i >= 0 && (mul *= 0x100)) {
73286 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
73287 sub = 1
73288 }
73289 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
73290 }
73291
73292 return offset + byteLength
73293 }
73294
73295 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
73296 value = +value
73297 offset = offset >>> 0
73298 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
73299 if (value < 0) value = 0xff + value + 1
73300 this[offset] = (value & 0xff)
73301 return offset + 1
73302 }
73303
73304 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
73305 value = +value
73306 offset = offset >>> 0
73307 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
73308 this[offset] = (value & 0xff)
73309 this[offset + 1] = (value >>> 8)
73310 return offset + 2
73311 }
73312
73313 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
73314 value = +value
73315 offset = offset >>> 0
73316 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
73317 this[offset] = (value >>> 8)
73318 this[offset + 1] = (value & 0xff)
73319 return offset + 2
73320 }
73321
73322 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
73323 value = +value
73324 offset = offset >>> 0
73325 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
73326 this[offset] = (value & 0xff)
73327 this[offset + 1] = (value >>> 8)
73328 this[offset + 2] = (value >>> 16)
73329 this[offset + 3] = (value >>> 24)
73330 return offset + 4
73331 }
73332
73333 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
73334 value = +value
73335 offset = offset >>> 0
73336 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
73337 if (value < 0) value = 0xffffffff + value + 1
73338 this[offset] = (value >>> 24)
73339 this[offset + 1] = (value >>> 16)
73340 this[offset + 2] = (value >>> 8)
73341 this[offset + 3] = (value & 0xff)
73342 return offset + 4
73343 }
73344
73345 function checkIEEE754 (buf, value, offset, ext, max, min) {
73346 if (offset + ext > buf.length) throw new RangeError('Index out of range')
73347 if (offset < 0) throw new RangeError('Index out of range')
73348 }
73349
73350 function writeFloat (buf, value, offset, littleEndian, noAssert) {
73351 value = +value
73352 offset = offset >>> 0
73353 if (!noAssert) {
73354 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
73355 }
73356 ieee754.write(buf, value, offset, littleEndian, 23, 4)
73357 return offset + 4
73358 }
73359
73360 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
73361 return writeFloat(this, value, offset, true, noAssert)
73362 }
73363
73364 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
73365 return writeFloat(this, value, offset, false, noAssert)
73366 }
73367
73368 function writeDouble (buf, value, offset, littleEndian, noAssert) {
73369 value = +value
73370 offset = offset >>> 0
73371 if (!noAssert) {
73372 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
73373 }
73374 ieee754.write(buf, value, offset, littleEndian, 52, 8)
73375 return offset + 8
73376 }
73377
73378 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
73379 return writeDouble(this, value, offset, true, noAssert)
73380 }
73381
73382 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
73383 return writeDouble(this, value, offset, false, noAssert)
73384 }
73385
73386 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
73387 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
73388 if (!start) start = 0
73389 if (!end && end !== 0) end = this.length
73390 if (targetStart >= target.length) targetStart = target.length
73391 if (!targetStart) targetStart = 0
73392 if (end > 0 && end < start) end = start
73393
73394 // Copy 0 bytes; we're done
73395 if (end === start) return 0
73396 if (target.length === 0 || this.length === 0) return 0
73397
73398 // Fatal error conditions
73399 if (targetStart < 0) {
73400 throw new RangeError('targetStart out of bounds')
73401 }
73402 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
73403 if (end < 0) throw new RangeError('sourceEnd out of bounds')
73404
73405 // Are we oob?
73406 if (end > this.length) end = this.length
73407 if (target.length - targetStart < end - start) {
73408 end = target.length - targetStart + start
73409 }
73410
73411 var len = end - start
73412 var i
73413
73414 if (this === target && start < targetStart && targetStart < end) {
73415 // descending copy from end
73416 for (i = len - 1; i >= 0; --i) {
73417 target[i + targetStart] = this[i + start]
73418 }
73419 } else if (len < 1000) {
73420 // ascending copy from start
73421 for (i = 0; i < len; ++i) {
73422 target[i + targetStart] = this[i + start]
73423 }
73424 } else {
73425 Uint8Array.prototype.set.call(
73426 target,
73427 this.subarray(start, start + len),
73428 targetStart
73429 )
73430 }
73431
73432 return len
73433 }
73434
73435 // Usage:
73436 // buffer.fill(number[, offset[, end]])
73437 // buffer.fill(buffer[, offset[, end]])
73438 // buffer.fill(string[, offset[, end]][, encoding])
73439 Buffer.prototype.fill = function fill (val, start, end, encoding) {
73440 // Handle string cases:
73441 if (typeof val === 'string') {
73442 if (typeof start === 'string') {
73443 encoding = start
73444 start = 0
73445 end = this.length
73446 } else if (typeof end === 'string') {
73447 encoding = end
73448 end = this.length
73449 }
73450 if (val.length === 1) {
73451 var code = val.charCodeAt(0)
73452 if (code < 256) {
73453 val = code
73454 }
73455 }
73456 if (encoding !== undefined && typeof encoding !== 'string') {
73457 throw new TypeError('encoding must be a string')
73458 }
73459 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
73460 throw new TypeError('Unknown encoding: ' + encoding)
73461 }
73462 } else if (typeof val === 'number') {
73463 val = val & 255
73464 }
73465
73466 // Invalid ranges are not set to a default, so can range check early.
73467 if (start < 0 || this.length < start || this.length < end) {
73468 throw new RangeError('Out of range index')
73469 }
73470
73471 if (end <= start) {
73472 return this
73473 }
73474
73475 start = start >>> 0
73476 end = end === undefined ? this.length : end >>> 0
73477
73478 if (!val) val = 0
73479
73480 var i
73481 if (typeof val === 'number') {
73482 for (i = start; i < end; ++i) {
73483 this[i] = val
73484 }
73485 } else {
73486 var bytes = Buffer.isBuffer(val)
73487 ? val
73488 : new Buffer(val, encoding)
73489 var len = bytes.length
73490 for (i = 0; i < end - start; ++i) {
73491 this[i + start] = bytes[i % len]
73492 }
73493 }
73494
73495 return this
73496 }
73497
73498 // HELPER FUNCTIONS
73499 // ================
73500
73501 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
73502
73503 function base64clean (str) {
73504 // Node strips out invalid characters like \n and \t from the string, base64-js does not
73505 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
73506 // Node converts strings with length < 2 to ''
73507 if (str.length < 2) return ''
73508 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
73509 while (str.length % 4 !== 0) {
73510 str = str + '='
73511 }
73512 return str
73513 }
73514
73515 function stringtrim (str) {
73516 if (str.trim) return str.trim()
73517 return str.replace(/^\s+|\s+$/g, '')
73518 }
73519
73520 function toHex (n) {
73521 if (n < 16) return '0' + n.toString(16)
73522 return n.toString(16)
73523 }
73524
73525 function utf8ToBytes (string, units) {
73526 units = units || Infinity
73527 var codePoint
73528 var length = string.length
73529 var leadSurrogate = null
73530 var bytes = []
73531
73532 for (var i = 0; i < length; ++i) {
73533 codePoint = string.charCodeAt(i)
73534
73535 // is surrogate component
73536 if (codePoint > 0xD7FF && codePoint < 0xE000) {
73537 // last char was a lead
73538 if (!leadSurrogate) {
73539 // no lead yet
73540 if (codePoint > 0xDBFF) {
73541 // unexpected trail
73542 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73543 continue
73544 } else if (i + 1 === length) {
73545 // unpaired lead
73546 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73547 continue
73548 }
73549
73550 // valid lead
73551 leadSurrogate = codePoint
73552
73553 continue
73554 }
73555
73556 // 2 leads in a row
73557 if (codePoint < 0xDC00) {
73558 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73559 leadSurrogate = codePoint
73560 continue
73561 }
73562
73563 // valid surrogate pair
73564 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
73565 } else if (leadSurrogate) {
73566 // valid bmp char, but last char was a lead
73567 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73568 }
73569
73570 leadSurrogate = null
73571
73572 // encode utf8
73573 if (codePoint < 0x80) {
73574 if ((units -= 1) < 0) break
73575 bytes.push(codePoint)
73576 } else if (codePoint < 0x800) {
73577 if ((units -= 2) < 0) break
73578 bytes.push(
73579 codePoint >> 0x6 | 0xC0,
73580 codePoint & 0x3F | 0x80
73581 )
73582 } else if (codePoint < 0x10000) {
73583 if ((units -= 3) < 0) break
73584 bytes.push(
73585 codePoint >> 0xC | 0xE0,
73586 codePoint >> 0x6 & 0x3F | 0x80,
73587 codePoint & 0x3F | 0x80
73588 )
73589 } else if (codePoint < 0x110000) {
73590 if ((units -= 4) < 0) break
73591 bytes.push(
73592 codePoint >> 0x12 | 0xF0,
73593 codePoint >> 0xC & 0x3F | 0x80,
73594 codePoint >> 0x6 & 0x3F | 0x80,
73595 codePoint & 0x3F | 0x80
73596 )
73597 } else {
73598 throw new Error('Invalid code point')
73599 }
73600 }
73601
73602 return bytes
73603 }
73604
73605 function asciiToBytes (str) {
73606 var byteArray = []
73607 for (var i = 0; i < str.length; ++i) {
73608 // Node's code seems to be doing this and not & 0x7F..
73609 byteArray.push(str.charCodeAt(i) & 0xFF)
73610 }
73611 return byteArray
73612 }
73613
73614 function utf16leToBytes (str, units) {
73615 var c, hi, lo
73616 var byteArray = []
73617 for (var i = 0; i < str.length; ++i) {
73618 if ((units -= 2) < 0) break
73619
73620 c = str.charCodeAt(i)
73621 hi = c >> 8
73622 lo = c % 256
73623 byteArray.push(lo)
73624 byteArray.push(hi)
73625 }
73626
73627 return byteArray
73628 }
73629
73630 function base64ToBytes (str) {
73631 return base64.toByteArray(base64clean(str))
73632 }
73633
73634 function blitBuffer (src, dst, offset, length) {
73635 for (var i = 0; i < length; ++i) {
73636 if ((i + offset >= dst.length) || (i >= src.length)) break
73637 dst[i + offset] = src[i]
73638 }
73639 return i
73640 }
73641
73642 function isnan (val) {
73643 return val !== val // eslint-disable-line no-self-compare
73644 }
73645
73646 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
73647 (function (Buffer){
73648 // Copyright Joyent, Inc. and other Node contributors.
73649 //
73650 // Permission is hereby granted, free of charge, to any person obtaining a
73651 // copy of this software and associated documentation files (the
73652 // "Software"), to deal in the Software without restriction, including
73653 // without limitation the rights to use, copy, modify, merge, publish,
73654 // distribute, sublicense, and/or sell copies of the Software, and to permit
73655 // persons to whom the Software is furnished to do so, subject to the
73656 // following conditions:
73657 //
73658 // The above copyright notice and this permission notice shall be included
73659 // in all copies or substantial portions of the Software.
73660 //
73661 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
73662 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73663 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
73664 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
73665 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
73666 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
73667 // USE OR OTHER DEALINGS IN THE SOFTWARE.
73668
73669 // NOTE: These type checking functions intentionally don't use `instanceof`
73670 // because it is fragile and can be easily faked with `Object.create()`.
73671
73672 function isArray(arg) {
73673 if (Array.isArray) {
73674 return Array.isArray(arg);
73675 }
73676 return objectToString(arg) === '[object Array]';
73677 }
73678 exports.isArray = isArray;
73679
73680 function isBoolean(arg) {
73681 return typeof arg === 'boolean';
73682 }
73683 exports.isBoolean = isBoolean;
73684
73685 function isNull(arg) {
73686 return arg === null;
73687 }
73688 exports.isNull = isNull;
73689
73690 function isNullOrUndefined(arg) {
73691 return arg == null;
73692 }
73693 exports.isNullOrUndefined = isNullOrUndefined;
73694
73695 function isNumber(arg) {
73696 return typeof arg === 'number';
73697 }
73698 exports.isNumber = isNumber;
73699
73700 function isString(arg) {
73701 return typeof arg === 'string';
73702 }
73703 exports.isString = isString;
73704
73705 function isSymbol(arg) {
73706 return typeof arg === 'symbol';
73707 }
73708 exports.isSymbol = isSymbol;
73709
73710 function isUndefined(arg) {
73711 return arg === void 0;
73712 }
73713 exports.isUndefined = isUndefined;
73714
73715 function isRegExp(re) {
73716 return objectToString(re) === '[object RegExp]';
73717 }
73718 exports.isRegExp = isRegExp;
73719
73720 function isObject(arg) {
73721 return typeof arg === 'object' && arg !== null;
73722 }
73723 exports.isObject = isObject;
73724
73725 function isDate(d) {
73726 return objectToString(d) === '[object Date]';
73727 }
73728 exports.isDate = isDate;
73729
73730 function isError(e) {
73731 return (objectToString(e) === '[object Error]' || e instanceof Error);
73732 }
73733 exports.isError = isError;
73734
73735 function isFunction(arg) {
73736 return typeof arg === 'function';
73737 }
73738 exports.isFunction = isFunction;
73739
73740 function isPrimitive(arg) {
73741 return arg === null ||
73742 typeof arg === 'boolean' ||
73743 typeof arg === 'number' ||
73744 typeof arg === 'string' ||
73745 typeof arg === 'symbol' || // ES6 symbol
73746 typeof arg === 'undefined';
73747 }
73748 exports.isPrimitive = isPrimitive;
73749
73750 exports.isBuffer = Buffer.isBuffer;
73751
73752 function objectToString(o) {
73753 return Object.prototype.toString.call(o);
73754 }
73755
73756 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
73757 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
73758 // Copyright Joyent, Inc. and other Node contributors.
73759 //
73760 // Permission is hereby granted, free of charge, to any person obtaining a
73761 // copy of this software and associated documentation files (the
73762 // "Software"), to deal in the Software without restriction, including
73763 // without limitation the rights to use, copy, modify, merge, publish,
73764 // distribute, sublicense, and/or sell copies of the Software, and to permit
73765 // persons to whom the Software is furnished to do so, subject to the
73766 // following conditions:
73767 //
73768 // The above copyright notice and this permission notice shall be included
73769 // in all copies or substantial portions of the Software.
73770 //
73771 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
73772 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73773 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
73774 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
73775 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
73776 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
73777 // USE OR OTHER DEALINGS IN THE SOFTWARE.
73778
73779 function EventEmitter() {
73780 this._events = this._events || {};
73781 this._maxListeners = this._maxListeners || undefined;
73782 }
73783 module.exports = EventEmitter;
73784
73785 // Backwards-compat with node 0.10.x
73786 EventEmitter.EventEmitter = EventEmitter;
73787
73788 EventEmitter.prototype._events = undefined;
73789 EventEmitter.prototype._maxListeners = undefined;
73790
73791 // By default EventEmitters will print a warning if more than 10 listeners are
73792 // added to it. This is a useful default which helps finding memory leaks.
73793 EventEmitter.defaultMaxListeners = 10;
73794
73795 // Obviously not all Emitters should be limited to 10. This function allows
73796 // that to be increased. Set to zero for unlimited.
73797 EventEmitter.prototype.setMaxListeners = function(n) {
73798 if (!isNumber(n) || n < 0 || isNaN(n))
73799 throw TypeError('n must be a positive number');
73800 this._maxListeners = n;
73801 return this;
73802 };
73803
73804 EventEmitter.prototype.emit = function(type) {
73805 var er, handler, len, args, i, listeners;
73806
73807 if (!this._events)
73808 this._events = {};
73809
73810 // If there is no 'error' event listener then throw.
73811 if (type === 'error') {
73812 if (!this._events.error ||
73813 (isObject(this._events.error) && !this._events.error.length)) {
73814 er = arguments[1];
73815 if (er instanceof Error) {
73816 throw er; // Unhandled 'error' event
73817 } else {
73818 // At least give some kind of context to the user
73819 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
73820 err.context = er;
73821 throw err;
73822 }
73823 }
73824 }
73825
73826 handler = this._events[type];
73827
73828 if (isUndefined(handler))
73829 return false;
73830
73831 if (isFunction(handler)) {
73832 switch (arguments.length) {
73833 // fast cases
73834 case 1:
73835 handler.call(this);
73836 break;
73837 case 2:
73838 handler.call(this, arguments[1]);
73839 break;
73840 case 3:
73841 handler.call(this, arguments[1], arguments[2]);
73842 break;
73843 // slower
73844 default:
73845 args = Array.prototype.slice.call(arguments, 1);
73846 handler.apply(this, args);
73847 }
73848 } else if (isObject(handler)) {
73849 args = Array.prototype.slice.call(arguments, 1);
73850 listeners = handler.slice();
73851 len = listeners.length;
73852 for (i = 0; i < len; i++)
73853 listeners[i].apply(this, args);
73854 }
73855
73856 return true;
73857 };
73858
73859 EventEmitter.prototype.addListener = function(type, listener) {
73860 var m;
73861
73862 if (!isFunction(listener))
73863 throw TypeError('listener must be a function');
73864
73865 if (!this._events)
73866 this._events = {};
73867
73868 // To avoid recursion in the case that type === "newListener"! Before
73869 // adding it to the listeners, first emit "newListener".
73870 if (this._events.newListener)
73871 this.emit('newListener', type,
73872 isFunction(listener.listener) ?
73873 listener.listener : listener);
73874
73875 if (!this._events[type])
73876 // Optimize the case of one listener. Don't need the extra array object.
73877 this._events[type] = listener;
73878 else if (isObject(this._events[type]))
73879 // If we've already got an array, just append.
73880 this._events[type].push(listener);
73881 else
73882 // Adding the second element, need to change to array.
73883 this._events[type] = [this._events[type], listener];
73884
73885 // Check for listener leak
73886 if (isObject(this._events[type]) && !this._events[type].warned) {
73887 if (!isUndefined(this._maxListeners)) {
73888 m = this._maxListeners;
73889 } else {
73890 m = EventEmitter.defaultMaxListeners;
73891 }
73892
73893 if (m && m > 0 && this._events[type].length > m) {
73894 this._events[type].warned = true;
73895 console.error('(node) warning: possible EventEmitter memory ' +
73896 'leak detected. %d listeners added. ' +
73897 'Use emitter.setMaxListeners() to increase limit.',
73898 this._events[type].length);
73899 if (typeof console.trace === 'function') {
73900 // not supported in IE 10
73901 console.trace();
73902 }
73903 }
73904 }
73905
73906 return this;
73907 };
73908
73909 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
73910
73911 EventEmitter.prototype.once = function(type, listener) {
73912 if (!isFunction(listener))
73913 throw TypeError('listener must be a function');
73914
73915 var fired = false;
73916
73917 function g() {
73918 this.removeListener(type, g);
73919
73920 if (!fired) {
73921 fired = true;
73922 listener.apply(this, arguments);
73923 }
73924 }
73925
73926 g.listener = listener;
73927 this.on(type, g);
73928
73929 return this;
73930 };
73931
73932 // emits a 'removeListener' event iff the listener was removed
73933 EventEmitter.prototype.removeListener = function(type, listener) {
73934 var list, position, length, i;
73935
73936 if (!isFunction(listener))
73937 throw TypeError('listener must be a function');
73938
73939 if (!this._events || !this._events[type])
73940 return this;
73941
73942 list = this._events[type];
73943 length = list.length;
73944 position = -1;
73945
73946 if (list === listener ||
73947 (isFunction(list.listener) && list.listener === listener)) {
73948 delete this._events[type];
73949 if (this._events.removeListener)
73950 this.emit('removeListener', type, listener);
73951
73952 } else if (isObject(list)) {
73953 for (i = length; i-- > 0;) {
73954 if (list[i] === listener ||
73955 (list[i].listener && list[i].listener === listener)) {
73956 position = i;
73957 break;
73958 }
73959 }
73960
73961 if (position < 0)
73962 return this;
73963
73964 if (list.length === 1) {
73965 list.length = 0;
73966 delete this._events[type];
73967 } else {
73968 list.splice(position, 1);
73969 }
73970
73971 if (this._events.removeListener)
73972 this.emit('removeListener', type, listener);
73973 }
73974
73975 return this;
73976 };
73977
73978 EventEmitter.prototype.removeAllListeners = function(type) {
73979 var key, listeners;
73980
73981 if (!this._events)
73982 return this;
73983
73984 // not listening for removeListener, no need to emit
73985 if (!this._events.removeListener) {
73986 if (arguments.length === 0)
73987 this._events = {};
73988 else if (this._events[type])
73989 delete this._events[type];
73990 return this;
73991 }
73992
73993 // emit removeListener for all listeners on all events
73994 if (arguments.length === 0) {
73995 for (key in this._events) {
73996 if (key === 'removeListener') continue;
73997 this.removeAllListeners(key);
73998 }
73999 this.removeAllListeners('removeListener');
74000 this._events = {};
74001 return this;
74002 }
74003
74004 listeners = this._events[type];
74005
74006 if (isFunction(listeners)) {
74007 this.removeListener(type, listeners);
74008 } else if (listeners) {
74009 // LIFO order
74010 while (listeners.length)
74011 this.removeListener(type, listeners[listeners.length - 1]);
74012 }
74013 delete this._events[type];
74014
74015 return this;
74016 };
74017
74018 EventEmitter.prototype.listeners = function(type) {
74019 var ret;
74020 if (!this._events || !this._events[type])
74021 ret = [];
74022 else if (isFunction(this._events[type]))
74023 ret = [this._events[type]];
74024 else
74025 ret = this._events[type].slice();
74026 return ret;
74027 };
74028
74029 EventEmitter.prototype.listenerCount = function(type) {
74030 if (this._events) {
74031 var evlistener = this._events[type];
74032
74033 if (isFunction(evlistener))
74034 return 1;
74035 else if (evlistener)
74036 return evlistener.length;
74037 }
74038 return 0;
74039 };
74040
74041 EventEmitter.listenerCount = function(emitter, type) {
74042 return emitter.listenerCount(type);
74043 };
74044
74045 function isFunction(arg) {
74046 return typeof arg === 'function';
74047 }
74048
74049 function isNumber(arg) {
74050 return typeof arg === 'number';
74051 }
74052
74053 function isObject(arg) {
74054 return typeof arg === 'object' && arg !== null;
74055 }
74056
74057 function isUndefined(arg) {
74058 return arg === void 0;
74059 }
74060
74061 },{}],8:[function(require,module,exports){
74062 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
74063 var e, m
74064 var eLen = nBytes * 8 - mLen - 1
74065 var eMax = (1 << eLen) - 1
74066 var eBias = eMax >> 1
74067 var nBits = -7
74068 var i = isLE ? (nBytes - 1) : 0
74069 var d = isLE ? -1 : 1
74070 var s = buffer[offset + i]
74071
74072 i += d
74073
74074 e = s & ((1 << (-nBits)) - 1)
74075 s >>= (-nBits)
74076 nBits += eLen
74077 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
74078
74079 m = e & ((1 << (-nBits)) - 1)
74080 e >>= (-nBits)
74081 nBits += mLen
74082 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
74083
74084 if (e === 0) {
74085 e = 1 - eBias
74086 } else if (e === eMax) {
74087 return m ? NaN : ((s ? -1 : 1) * Infinity)
74088 } else {
74089 m = m + Math.pow(2, mLen)
74090 e = e - eBias
74091 }
74092 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
74093 }
74094
74095 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
74096 var e, m, c
74097 var eLen = nBytes * 8 - mLen - 1
74098 var eMax = (1 << eLen) - 1
74099 var eBias = eMax >> 1
74100 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
74101 var i = isLE ? 0 : (nBytes - 1)
74102 var d = isLE ? 1 : -1
74103 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
74104
74105 value = Math.abs(value)
74106
74107 if (isNaN(value) || value === Infinity) {
74108 m = isNaN(value) ? 1 : 0
74109 e = eMax
74110 } else {
74111 e = Math.floor(Math.log(value) / Math.LN2)
74112 if (value * (c = Math.pow(2, -e)) < 1) {
74113 e--
74114 c *= 2
74115 }
74116 if (e + eBias >= 1) {
74117 value += rt / c
74118 } else {
74119 value += rt * Math.pow(2, 1 - eBias)
74120 }
74121 if (value * c >= 2) {
74122 e++
74123 c /= 2
74124 }
74125
74126 if (e + eBias >= eMax) {
74127 m = 0
74128 e = eMax
74129 } else if (e + eBias >= 1) {
74130 m = (value * c - 1) * Math.pow(2, mLen)
74131 e = e + eBias
74132 } else {
74133 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
74134 e = 0
74135 }
74136 }
74137
74138 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
74139
74140 e = (e << mLen) | m
74141 eLen += mLen
74142 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
74143
74144 buffer[offset + i - d] |= s * 128
74145 }
74146
74147 },{}],9:[function(require,module,exports){
74148 if (typeof Object.create === 'function') {
74149 // implementation from standard node.js 'util' module
74150 module.exports = function inherits(ctor, superCtor) {
74151 ctor.super_ = superCtor
74152 ctor.prototype = Object.create(superCtor.prototype, {
74153 constructor: {
74154 value: ctor,
74155 enumerable: false,
74156 writable: true,
74157 configurable: true
74158 }
74159 });
74160 };
74161 } else {
74162 // old school shim for old browsers
74163 module.exports = function inherits(ctor, superCtor) {
74164 ctor.super_ = superCtor
74165 var TempCtor = function () {}
74166 TempCtor.prototype = superCtor.prototype
74167 ctor.prototype = new TempCtor()
74168 ctor.prototype.constructor = ctor
74169 }
74170 }
74171
74172 },{}],10:[function(require,module,exports){
74173 /*!
74174 * Determine if an object is a Buffer
74175 *
74176 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
74177 * @license MIT
74178 */
74179
74180 // The _isBuffer check is for Safari 5-7 support, because it's missing
74181 // Object.prototype.constructor. Remove this eventually
74182 module.exports = function (obj) {
74183 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
74184 }
74185
74186 function isBuffer (obj) {
74187 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
74188 }
74189
74190 // For Node v0.10 support. Remove this eventually.
74191 function isSlowBuffer (obj) {
74192 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
74193 }
74194
74195 },{}],11:[function(require,module,exports){
74196 var toString = {}.toString;
74197
74198 module.exports = Array.isArray || function (arr) {
74199 return toString.call(arr) == '[object Array]';
74200 };
74201
74202 },{}],12:[function(require,module,exports){
74203 (function (process){
74204 'use strict';
74205
74206 if (!process.version ||
74207 process.version.indexOf('v0.') === 0 ||
74208 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
74209 module.exports = nextTick;
74210 } else {
74211 module.exports = process.nextTick;
74212 }
74213
74214 function nextTick(fn, arg1, arg2, arg3) {
74215 if (typeof fn !== 'function') {
74216 throw new TypeError('"callback" argument must be a function');
74217 }
74218 var len = arguments.length;
74219 var args, i;
74220 switch (len) {
74221 case 0:
74222 case 1:
74223 return process.nextTick(fn);
74224 case 2:
74225 return process.nextTick(function afterTickOne() {
74226 fn.call(null, arg1);
74227 });
74228 case 3:
74229 return process.nextTick(function afterTickTwo() {
74230 fn.call(null, arg1, arg2);
74231 });
74232 case 4:
74233 return process.nextTick(function afterTickThree() {
74234 fn.call(null, arg1, arg2, arg3);
74235 });
74236 default:
74237 args = new Array(len - 1);
74238 i = 0;
74239 while (i < args.length) {
74240 args[i++] = arguments[i];
74241 }
74242 return process.nextTick(function afterTick() {
74243 fn.apply(null, args);
74244 });
74245 }
74246 }
74247
74248 }).call(this,require('_process'))
74249 },{"_process":13}],13:[function(require,module,exports){
74250 // shim for using process in browser
74251 var process = module.exports = {};
74252
74253 // cached from whatever global is present so that test runners that stub it
74254 // don't break things. But we need to wrap it in a try catch in case it is
74255 // wrapped in strict mode code which doesn't define any globals. It's inside a
74256 // function because try/catches deoptimize in certain engines.
74257
74258 var cachedSetTimeout;
74259 var cachedClearTimeout;
74260
74261 function defaultSetTimout() {
74262 throw new Error('setTimeout has not been defined');
74263 }
74264 function defaultClearTimeout () {
74265 throw new Error('clearTimeout has not been defined');
74266 }
74267 (function () {
74268 try {
74269 if (typeof setTimeout === 'function') {
74270 cachedSetTimeout = setTimeout;
74271 } else {
74272 cachedSetTimeout = defaultSetTimout;
74273 }
74274 } catch (e) {
74275 cachedSetTimeout = defaultSetTimout;
74276 }
74277 try {
74278 if (typeof clearTimeout === 'function') {
74279 cachedClearTimeout = clearTimeout;
74280 } else {
74281 cachedClearTimeout = defaultClearTimeout;
74282 }
74283 } catch (e) {
74284 cachedClearTimeout = defaultClearTimeout;
74285 }
74286 } ())
74287 function runTimeout(fun) {
74288 if (cachedSetTimeout === setTimeout) {
74289 //normal enviroments in sane situations
74290 return setTimeout(fun, 0);
74291 }
74292 // if setTimeout wasn't available but was latter defined
74293 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
74294 cachedSetTimeout = setTimeout;
74295 return setTimeout(fun, 0);
74296 }
74297 try {
74298 // when when somebody has screwed with setTimeout but no I.E. maddness
74299 return cachedSetTimeout(fun, 0);
74300 } catch(e){
74301 try {
74302 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
74303 return cachedSetTimeout.call(null, fun, 0);
74304 } catch(e){
74305 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
74306 return cachedSetTimeout.call(this, fun, 0);
74307 }
74308 }
74309
74310
74311 }
74312 function runClearTimeout(marker) {
74313 if (cachedClearTimeout === clearTimeout) {
74314 //normal enviroments in sane situations
74315 return clearTimeout(marker);
74316 }
74317 // if clearTimeout wasn't available but was latter defined
74318 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
74319 cachedClearTimeout = clearTimeout;
74320 return clearTimeout(marker);
74321 }
74322 try {
74323 // when when somebody has screwed with setTimeout but no I.E. maddness
74324 return cachedClearTimeout(marker);
74325 } catch (e){
74326 try {
74327 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
74328 return cachedClearTimeout.call(null, marker);
74329 } catch (e){
74330 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
74331 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
74332 return cachedClearTimeout.call(this, marker);
74333 }
74334 }
74335
74336
74337
74338 }
74339 var queue = [];
74340 var draining = false;
74341 var currentQueue;
74342 var queueIndex = -1;
74343
74344 function cleanUpNextTick() {
74345 if (!draining || !currentQueue) {
74346 return;
74347 }
74348 draining = false;
74349 if (currentQueue.length) {
74350 queue = currentQueue.concat(queue);
74351 } else {
74352 queueIndex = -1;
74353 }
74354 if (queue.length) {
74355 drainQueue();
74356 }
74357 }
74358
74359 function drainQueue() {
74360 if (draining) {
74361 return;
74362 }
74363 var timeout = runTimeout(cleanUpNextTick);
74364 draining = true;
74365
74366 var len = queue.length;
74367 while(len) {
74368 currentQueue = queue;
74369 queue = [];
74370 while (++queueIndex < len) {
74371 if (currentQueue) {
74372 currentQueue[queueIndex].run();
74373 }
74374 }
74375 queueIndex = -1;
74376 len = queue.length;
74377 }
74378 currentQueue = null;
74379 draining = false;
74380 runClearTimeout(timeout);
74381 }
74382
74383 process.nextTick = function (fun) {
74384 var args = new Array(arguments.length - 1);
74385 if (arguments.length > 1) {
74386 for (var i = 1; i < arguments.length; i++) {
74387 args[i - 1] = arguments[i];
74388 }
74389 }
74390 queue.push(new Item(fun, args));
74391 if (queue.length === 1 && !draining) {
74392 runTimeout(drainQueue);
74393 }
74394 };
74395
74396 // v8 likes predictible objects
74397 function Item(fun, array) {
74398 this.fun = fun;
74399 this.array = array;
74400 }
74401 Item.prototype.run = function () {
74402 this.fun.apply(null, this.array);
74403 };
74404 process.title = 'browser';
74405 process.browser = true;
74406 process.env = {};
74407 process.argv = [];
74408 process.version = ''; // empty string to avoid regexp issues
74409 process.versions = {};
74410
74411 function noop() {}
74412
74413 process.on = noop;
74414 process.addListener = noop;
74415 process.once = noop;
74416 process.off = noop;
74417 process.removeListener = noop;
74418 process.removeAllListeners = noop;
74419 process.emit = noop;
74420
74421 process.binding = function (name) {
74422 throw new Error('process.binding is not supported');
74423 };
74424
74425 process.cwd = function () { return '/' };
74426 process.chdir = function (dir) {
74427 throw new Error('process.chdir is not supported');
74428 };
74429 process.umask = function() { return 0; };
74430
74431 },{}],14:[function(require,module,exports){
74432 module.exports = require("./lib/_stream_duplex.js")
74433
74434 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
74435 // a duplex stream is just a stream that is both readable and writable.
74436 // Since JS doesn't have multiple prototypal inheritance, this class
74437 // prototypally inherits from Readable, and then parasitically from
74438 // Writable.
74439
74440 'use strict';
74441
74442 /*<replacement>*/
74443
74444 var objectKeys = Object.keys || function (obj) {
74445 var keys = [];
74446 for (var key in obj) {
74447 keys.push(key);
74448 }return keys;
74449 };
74450 /*</replacement>*/
74451
74452 module.exports = Duplex;
74453
74454 /*<replacement>*/
74455 var processNextTick = require('process-nextick-args');
74456 /*</replacement>*/
74457
74458 /*<replacement>*/
74459 var util = require('core-util-is');
74460 util.inherits = require('inherits');
74461 /*</replacement>*/
74462
74463 var Readable = require('./_stream_readable');
74464 var Writable = require('./_stream_writable');
74465
74466 util.inherits(Duplex, Readable);
74467
74468 var keys = objectKeys(Writable.prototype);
74469 for (var v = 0; v < keys.length; v++) {
74470 var method = keys[v];
74471 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
74472 }
74473
74474 function Duplex(options) {
74475 if (!(this instanceof Duplex)) return new Duplex(options);
74476
74477 Readable.call(this, options);
74478 Writable.call(this, options);
74479
74480 if (options && options.readable === false) this.readable = false;
74481
74482 if (options && options.writable === false) this.writable = false;
74483
74484 this.allowHalfOpen = true;
74485 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
74486
74487 this.once('end', onend);
74488 }
74489
74490 // the no-half-open enforcer
74491 function onend() {
74492 // if we allow half-open state, or if the writable side ended,
74493 // then we're ok.
74494 if (this.allowHalfOpen || this._writableState.ended) return;
74495
74496 // no more data can be written.
74497 // But allow more writes to happen in this tick.
74498 processNextTick(onEndNT, this);
74499 }
74500
74501 function onEndNT(self) {
74502 self.end();
74503 }
74504
74505 function forEach(xs, f) {
74506 for (var i = 0, l = xs.length; i < l; i++) {
74507 f(xs[i], i);
74508 }
74509 }
74510 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
74511 // a passthrough stream.
74512 // basically just the most minimal sort of Transform stream.
74513 // Every written chunk gets output as-is.
74514
74515 'use strict';
74516
74517 module.exports = PassThrough;
74518
74519 var Transform = require('./_stream_transform');
74520
74521 /*<replacement>*/
74522 var util = require('core-util-is');
74523 util.inherits = require('inherits');
74524 /*</replacement>*/
74525
74526 util.inherits(PassThrough, Transform);
74527
74528 function PassThrough(options) {
74529 if (!(this instanceof PassThrough)) return new PassThrough(options);
74530
74531 Transform.call(this, options);
74532 }
74533
74534 PassThrough.prototype._transform = function (chunk, encoding, cb) {
74535 cb(null, chunk);
74536 };
74537 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
74538 (function (process){
74539 'use strict';
74540
74541 module.exports = Readable;
74542
74543 /*<replacement>*/
74544 var processNextTick = require('process-nextick-args');
74545 /*</replacement>*/
74546
74547 /*<replacement>*/
74548 var isArray = require('isarray');
74549 /*</replacement>*/
74550
74551 /*<replacement>*/
74552 var Duplex;
74553 /*</replacement>*/
74554
74555 Readable.ReadableState = ReadableState;
74556
74557 /*<replacement>*/
74558 var EE = require('events').EventEmitter;
74559
74560 var EElistenerCount = function (emitter, type) {
74561 return emitter.listeners(type).length;
74562 };
74563 /*</replacement>*/
74564
74565 /*<replacement>*/
74566 var Stream;
74567 (function () {
74568 try {
74569 Stream = require('st' + 'ream');
74570 } catch (_) {} finally {
74571 if (!Stream) Stream = require('events').EventEmitter;
74572 }
74573 })();
74574 /*</replacement>*/
74575
74576 var Buffer = require('buffer').Buffer;
74577 /*<replacement>*/
74578 var bufferShim = require('buffer-shims');
74579 /*</replacement>*/
74580
74581 /*<replacement>*/
74582 var util = require('core-util-is');
74583 util.inherits = require('inherits');
74584 /*</replacement>*/
74585
74586 /*<replacement>*/
74587 var debugUtil = require('util');
74588 var debug = void 0;
74589 if (debugUtil && debugUtil.debuglog) {
74590 debug = debugUtil.debuglog('stream');
74591 } else {
74592 debug = function () {};
74593 }
74594 /*</replacement>*/
74595
74596 var BufferList = require('./internal/streams/BufferList');
74597 var StringDecoder;
74598
74599 util.inherits(Readable, Stream);
74600
74601 function prependListener(emitter, event, fn) {
74602 // Sadly this is not cacheable as some libraries bundle their own
74603 // event emitter implementation with them.
74604 if (typeof emitter.prependListener === 'function') {
74605 return emitter.prependListener(event, fn);
74606 } else {
74607 // This is a hack to make sure that our error handler is attached before any
74608 // userland ones. NEVER DO THIS. This is here only because this code needs
74609 // to continue to work with older versions of Node.js that do not include
74610 // the prependListener() method. The goal is to eventually remove this hack.
74611 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
74612 }
74613 }
74614
74615 function ReadableState(options, stream) {
74616 Duplex = Duplex || require('./_stream_duplex');
74617
74618 options = options || {};
74619
74620 // object stream flag. Used to make read(n) ignore n and to
74621 // make all the buffer merging and length checks go away
74622 this.objectMode = !!options.objectMode;
74623
74624 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
74625
74626 // the point at which it stops calling _read() to fill the buffer
74627 // Note: 0 is a valid value, means "don't call _read preemptively ever"
74628 var hwm = options.highWaterMark;
74629 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
74630 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
74631
74632 // cast to ints.
74633 this.highWaterMark = ~ ~this.highWaterMark;
74634
74635 // A linked list is used to store data chunks instead of an array because the
74636 // linked list can remove elements from the beginning faster than
74637 // array.shift()
74638 this.buffer = new BufferList();
74639 this.length = 0;
74640 this.pipes = null;
74641 this.pipesCount = 0;
74642 this.flowing = null;
74643 this.ended = false;
74644 this.endEmitted = false;
74645 this.reading = false;
74646
74647 // a flag to be able to tell if the onwrite cb is called immediately,
74648 // or on a later tick. We set this to true at first, because any
74649 // actions that shouldn't happen until "later" should generally also
74650 // not happen before the first write call.
74651 this.sync = true;
74652
74653 // whenever we return null, then we set a flag to say
74654 // that we're awaiting a 'readable' event emission.
74655 this.needReadable = false;
74656 this.emittedReadable = false;
74657 this.readableListening = false;
74658 this.resumeScheduled = false;
74659
74660 // Crypto is kind of old and crusty. Historically, its default string
74661 // encoding is 'binary' so we have to make this configurable.
74662 // Everything else in the universe uses 'utf8', though.
74663 this.defaultEncoding = options.defaultEncoding || 'utf8';
74664
74665 // when piping, we only care about 'readable' events that happen
74666 // after read()ing all the bytes and not getting any pushback.
74667 this.ranOut = false;
74668
74669 // the number of writers that are awaiting a drain event in .pipe()s
74670 this.awaitDrain = 0;
74671
74672 // if true, a maybeReadMore has been scheduled
74673 this.readingMore = false;
74674
74675 this.decoder = null;
74676 this.encoding = null;
74677 if (options.encoding) {
74678 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
74679 this.decoder = new StringDecoder(options.encoding);
74680 this.encoding = options.encoding;
74681 }
74682 }
74683
74684 function Readable(options) {
74685 Duplex = Duplex || require('./_stream_duplex');
74686
74687 if (!(this instanceof Readable)) return new Readable(options);
74688
74689 this._readableState = new ReadableState(options, this);
74690
74691 // legacy
74692 this.readable = true;
74693
74694 if (options && typeof options.read === 'function') this._read = options.read;
74695
74696 Stream.call(this);
74697 }
74698
74699 // Manually shove something into the read() buffer.
74700 // This returns true if the highWaterMark has not been hit yet,
74701 // similar to how Writable.write() returns true if you should
74702 // write() some more.
74703 Readable.prototype.push = function (chunk, encoding) {
74704 var state = this._readableState;
74705
74706 if (!state.objectMode && typeof chunk === 'string') {
74707 encoding = encoding || state.defaultEncoding;
74708 if (encoding !== state.encoding) {
74709 chunk = bufferShim.from(chunk, encoding);
74710 encoding = '';
74711 }
74712 }
74713
74714 return readableAddChunk(this, state, chunk, encoding, false);
74715 };
74716
74717 // Unshift should *always* be something directly out of read()
74718 Readable.prototype.unshift = function (chunk) {
74719 var state = this._readableState;
74720 return readableAddChunk(this, state, chunk, '', true);
74721 };
74722
74723 Readable.prototype.isPaused = function () {
74724 return this._readableState.flowing === false;
74725 };
74726
74727 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
74728 var er = chunkInvalid(state, chunk);
74729 if (er) {
74730 stream.emit('error', er);
74731 } else if (chunk === null) {
74732 state.reading = false;
74733 onEofChunk(stream, state);
74734 } else if (state.objectMode || chunk && chunk.length > 0) {
74735 if (state.ended && !addToFront) {
74736 var e = new Error('stream.push() after EOF');
74737 stream.emit('error', e);
74738 } else if (state.endEmitted && addToFront) {
74739 var _e = new Error('stream.unshift() after end event');
74740 stream.emit('error', _e);
74741 } else {
74742 var skipAdd;
74743 if (state.decoder && !addToFront && !encoding) {
74744 chunk = state.decoder.write(chunk);
74745 skipAdd = !state.objectMode && chunk.length === 0;
74746 }
74747
74748 if (!addToFront) state.reading = false;
74749
74750 // Don't add to the buffer if we've decoded to an empty string chunk and
74751 // we're not in object mode
74752 if (!skipAdd) {
74753 // if we want the data now, just emit it.
74754 if (state.flowing && state.length === 0 && !state.sync) {
74755 stream.emit('data', chunk);
74756 stream.read(0);
74757 } else {
74758 // update the buffer info.
74759 state.length += state.objectMode ? 1 : chunk.length;
74760 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
74761
74762 if (state.needReadable) emitReadable(stream);
74763 }
74764 }
74765
74766 maybeReadMore(stream, state);
74767 }
74768 } else if (!addToFront) {
74769 state.reading = false;
74770 }
74771
74772 return needMoreData(state);
74773 }
74774
74775 // if it's past the high water mark, we can push in some more.
74776 // Also, if we have no data yet, we can stand some
74777 // more bytes. This is to work around cases where hwm=0,
74778 // such as the repl. Also, if the push() triggered a
74779 // readable event, and the user called read(largeNumber) such that
74780 // needReadable was set, then we ought to push more, so that another
74781 // 'readable' event will be triggered.
74782 function needMoreData(state) {
74783 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
74784 }
74785
74786 // backwards compatibility.
74787 Readable.prototype.setEncoding = function (enc) {
74788 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
74789 this._readableState.decoder = new StringDecoder(enc);
74790 this._readableState.encoding = enc;
74791 return this;
74792 };
74793
74794 // Don't raise the hwm > 8MB
74795 var MAX_HWM = 0x800000;
74796 function computeNewHighWaterMark(n) {
74797 if (n >= MAX_HWM) {
74798 n = MAX_HWM;
74799 } else {
74800 // Get the next highest power of 2 to prevent increasing hwm excessively in
74801 // tiny amounts
74802 n--;
74803 n |= n >>> 1;
74804 n |= n >>> 2;
74805 n |= n >>> 4;
74806 n |= n >>> 8;
74807 n |= n >>> 16;
74808 n++;
74809 }
74810 return n;
74811 }
74812
74813 // This function is designed to be inlinable, so please take care when making
74814 // changes to the function body.
74815 function howMuchToRead(n, state) {
74816 if (n <= 0 || state.length === 0 && state.ended) return 0;
74817 if (state.objectMode) return 1;
74818 if (n !== n) {
74819 // Only flow one buffer at a time
74820 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
74821 }
74822 // If we're asking for more than the current hwm, then raise the hwm.
74823 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
74824 if (n <= state.length) return n;
74825 // Don't have enough
74826 if (!state.ended) {
74827 state.needReadable = true;
74828 return 0;
74829 }
74830 return state.length;
74831 }
74832
74833 // you can override either this method, or the async _read(n) below.
74834 Readable.prototype.read = function (n) {
74835 debug('read', n);
74836 n = parseInt(n, 10);
74837 var state = this._readableState;
74838 var nOrig = n;
74839
74840 if (n !== 0) state.emittedReadable = false;
74841
74842 // if we're doing read(0) to trigger a readable event, but we
74843 // already have a bunch of data in the buffer, then just trigger
74844 // the 'readable' event and move on.
74845 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
74846 debug('read: emitReadable', state.length, state.ended);
74847 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
74848 return null;
74849 }
74850
74851 n = howMuchToRead(n, state);
74852
74853 // if we've ended, and we're now clear, then finish it up.
74854 if (n === 0 && state.ended) {
74855 if (state.length === 0) endReadable(this);
74856 return null;
74857 }
74858
74859 // All the actual chunk generation logic needs to be
74860 // *below* the call to _read. The reason is that in certain
74861 // synthetic stream cases, such as passthrough streams, _read
74862 // may be a completely synchronous operation which may change
74863 // the state of the read buffer, providing enough data when
74864 // before there was *not* enough.
74865 //
74866 // So, the steps are:
74867 // 1. Figure out what the state of things will be after we do
74868 // a read from the buffer.
74869 //
74870 // 2. If that resulting state will trigger a _read, then call _read.
74871 // Note that this may be asynchronous, or synchronous. Yes, it is
74872 // deeply ugly to write APIs this way, but that still doesn't mean
74873 // that the Readable class should behave improperly, as streams are
74874 // designed to be sync/async agnostic.
74875 // Take note if the _read call is sync or async (ie, if the read call
74876 // has returned yet), so that we know whether or not it's safe to emit
74877 // 'readable' etc.
74878 //
74879 // 3. Actually pull the requested chunks out of the buffer and return.
74880
74881 // if we need a readable event, then we need to do some reading.
74882 var doRead = state.needReadable;
74883 debug('need readable', doRead);
74884
74885 // if we currently have less than the highWaterMark, then also read some
74886 if (state.length === 0 || state.length - n < state.highWaterMark) {
74887 doRead = true;
74888 debug('length less than watermark', doRead);
74889 }
74890
74891 // however, if we've ended, then there's no point, and if we're already
74892 // reading, then it's unnecessary.
74893 if (state.ended || state.reading) {
74894 doRead = false;
74895 debug('reading or ended', doRead);
74896 } else if (doRead) {
74897 debug('do read');
74898 state.reading = true;
74899 state.sync = true;
74900 // if the length is currently zero, then we *need* a readable event.
74901 if (state.length === 0) state.needReadable = true;
74902 // call internal read method
74903 this._read(state.highWaterMark);
74904 state.sync = false;
74905 // If _read pushed data synchronously, then `reading` will be false,
74906 // and we need to re-evaluate how much data we can return to the user.
74907 if (!state.reading) n = howMuchToRead(nOrig, state);
74908 }
74909
74910 var ret;
74911 if (n > 0) ret = fromList(n, state);else ret = null;
74912
74913 if (ret === null) {
74914 state.needReadable = true;
74915 n = 0;
74916 } else {
74917 state.length -= n;
74918 }
74919
74920 if (state.length === 0) {
74921 // If we have nothing in the buffer, then we want to know
74922 // as soon as we *do* get something into the buffer.
74923 if (!state.ended) state.needReadable = true;
74924
74925 // If we tried to read() past the EOF, then emit end on the next tick.
74926 if (nOrig !== n && state.ended) endReadable(this);
74927 }
74928
74929 if (ret !== null) this.emit('data', ret);
74930
74931 return ret;
74932 };
74933
74934 function chunkInvalid(state, chunk) {
74935 var er = null;
74936 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
74937 er = new TypeError('Invalid non-string/buffer chunk');
74938 }
74939 return er;
74940 }
74941
74942 function onEofChunk(stream, state) {
74943 if (state.ended) return;
74944 if (state.decoder) {
74945 var chunk = state.decoder.end();
74946 if (chunk && chunk.length) {
74947 state.buffer.push(chunk);
74948 state.length += state.objectMode ? 1 : chunk.length;
74949 }
74950 }
74951 state.ended = true;
74952
74953 // emit 'readable' now to make sure it gets picked up.
74954 emitReadable(stream);
74955 }
74956
74957 // Don't emit readable right away in sync mode, because this can trigger
74958 // another read() call => stack overflow. This way, it might trigger
74959 // a nextTick recursion warning, but that's not so bad.
74960 function emitReadable(stream) {
74961 var state = stream._readableState;
74962 state.needReadable = false;
74963 if (!state.emittedReadable) {
74964 debug('emitReadable', state.flowing);
74965 state.emittedReadable = true;
74966 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
74967 }
74968 }
74969
74970 function emitReadable_(stream) {
74971 debug('emit readable');
74972 stream.emit('readable');
74973 flow(stream);
74974 }
74975
74976 // at this point, the user has presumably seen the 'readable' event,
74977 // and called read() to consume some data. that may have triggered
74978 // in turn another _read(n) call, in which case reading = true if
74979 // it's in progress.
74980 // However, if we're not ended, or reading, and the length < hwm,
74981 // then go ahead and try to read some more preemptively.
74982 function maybeReadMore(stream, state) {
74983 if (!state.readingMore) {
74984 state.readingMore = true;
74985 processNextTick(maybeReadMore_, stream, state);
74986 }
74987 }
74988
74989 function maybeReadMore_(stream, state) {
74990 var len = state.length;
74991 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
74992 debug('maybeReadMore read 0');
74993 stream.read(0);
74994 if (len === state.length)
74995 // didn't get any data, stop spinning.
74996 break;else len = state.length;
74997 }
74998 state.readingMore = false;
74999 }
75000
75001 // abstract method. to be overridden in specific implementation classes.
75002 // call cb(er, data) where data is <= n in length.
75003 // for virtual (non-string, non-buffer) streams, "length" is somewhat
75004 // arbitrary, and perhaps not very meaningful.
75005 Readable.prototype._read = function (n) {
75006 this.emit('error', new Error('_read() is not implemented'));
75007 };
75008
75009 Readable.prototype.pipe = function (dest, pipeOpts) {
75010 var src = this;
75011 var state = this._readableState;
75012
75013 switch (state.pipesCount) {
75014 case 0:
75015 state.pipes = dest;
75016 break;
75017 case 1:
75018 state.pipes = [state.pipes, dest];
75019 break;
75020 default:
75021 state.pipes.push(dest);
75022 break;
75023 }
75024 state.pipesCount += 1;
75025 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
75026
75027 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
75028
75029 var endFn = doEnd ? onend : cleanup;
75030 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
75031
75032 dest.on('unpipe', onunpipe);
75033 function onunpipe(readable) {
75034 debug('onunpipe');
75035 if (readable === src) {
75036 cleanup();
75037 }
75038 }
75039
75040 function onend() {
75041 debug('onend');
75042 dest.end();
75043 }
75044
75045 // when the dest drains, it reduces the awaitDrain counter
75046 // on the source. This would be more elegant with a .once()
75047 // handler in flow(), but adding and removing repeatedly is
75048 // too slow.
75049 var ondrain = pipeOnDrain(src);
75050 dest.on('drain', ondrain);
75051
75052 var cleanedUp = false;
75053 function cleanup() {
75054 debug('cleanup');
75055 // cleanup event handlers once the pipe is broken
75056 dest.removeListener('close', onclose);
75057 dest.removeListener('finish', onfinish);
75058 dest.removeListener('drain', ondrain);
75059 dest.removeListener('error', onerror);
75060 dest.removeListener('unpipe', onunpipe);
75061 src.removeListener('end', onend);
75062 src.removeListener('end', cleanup);
75063 src.removeListener('data', ondata);
75064
75065 cleanedUp = true;
75066
75067 // if the reader is waiting for a drain event from this
75068 // specific writer, then it would cause it to never start
75069 // flowing again.
75070 // So, if this is awaiting a drain, then we just call it now.
75071 // If we don't know, then assume that we are waiting for one.
75072 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
75073 }
75074
75075 // If the user pushes more data while we're writing to dest then we'll end up
75076 // in ondata again. However, we only want to increase awaitDrain once because
75077 // dest will only emit one 'drain' event for the multiple writes.
75078 // => Introduce a guard on increasing awaitDrain.
75079 var increasedAwaitDrain = false;
75080 src.on('data', ondata);
75081 function ondata(chunk) {
75082 debug('ondata');
75083 increasedAwaitDrain = false;
75084 var ret = dest.write(chunk);
75085 if (false === ret && !increasedAwaitDrain) {
75086 // If the user unpiped during `dest.write()`, it is possible
75087 // to get stuck in a permanently paused state if that write
75088 // also returned false.
75089 // => Check whether `dest` is still a piping destination.
75090 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
75091 debug('false write response, pause', src._readableState.awaitDrain);
75092 src._readableState.awaitDrain++;
75093 increasedAwaitDrain = true;
75094 }
75095 src.pause();
75096 }
75097 }
75098
75099 // if the dest has an error, then stop piping into it.
75100 // however, don't suppress the throwing behavior for this.
75101 function onerror(er) {
75102 debug('onerror', er);
75103 unpipe();
75104 dest.removeListener('error', onerror);
75105 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
75106 }
75107
75108 // Make sure our error handler is attached before userland ones.
75109 prependListener(dest, 'error', onerror);
75110
75111 // Both close and finish should trigger unpipe, but only once.
75112 function onclose() {
75113 dest.removeListener('finish', onfinish);
75114 unpipe();
75115 }
75116 dest.once('close', onclose);
75117 function onfinish() {
75118 debug('onfinish');
75119 dest.removeListener('close', onclose);
75120 unpipe();
75121 }
75122 dest.once('finish', onfinish);
75123
75124 function unpipe() {
75125 debug('unpipe');
75126 src.unpipe(dest);
75127 }
75128
75129 // tell the dest that it's being piped to
75130 dest.emit('pipe', src);
75131
75132 // start the flow if it hasn't been started already.
75133 if (!state.flowing) {
75134 debug('pipe resume');
75135 src.resume();
75136 }
75137
75138 return dest;
75139 };
75140
75141 function pipeOnDrain(src) {
75142 return function () {
75143 var state = src._readableState;
75144 debug('pipeOnDrain', state.awaitDrain);
75145 if (state.awaitDrain) state.awaitDrain--;
75146 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
75147 state.flowing = true;
75148 flow(src);
75149 }
75150 };
75151 }
75152
75153 Readable.prototype.unpipe = function (dest) {
75154 var state = this._readableState;
75155
75156 // if we're not piping anywhere, then do nothing.
75157 if (state.pipesCount === 0) return this;
75158
75159 // just one destination. most common case.
75160 if (state.pipesCount === 1) {
75161 // passed in one, but it's not the right one.
75162 if (dest && dest !== state.pipes) return this;
75163
75164 if (!dest) dest = state.pipes;
75165
75166 // got a match.
75167 state.pipes = null;
75168 state.pipesCount = 0;
75169 state.flowing = false;
75170 if (dest) dest.emit('unpipe', this);
75171 return this;
75172 }
75173
75174 // slow case. multiple pipe destinations.
75175
75176 if (!dest) {
75177 // remove all.
75178 var dests = state.pipes;
75179 var len = state.pipesCount;
75180 state.pipes = null;
75181 state.pipesCount = 0;
75182 state.flowing = false;
75183
75184 for (var i = 0; i < len; i++) {
75185 dests[i].emit('unpipe', this);
75186 }return this;
75187 }
75188
75189 // try to find the right one.
75190 var index = indexOf(state.pipes, dest);
75191 if (index === -1) return this;
75192
75193 state.pipes.splice(index, 1);
75194 state.pipesCount -= 1;
75195 if (state.pipesCount === 1) state.pipes = state.pipes[0];
75196
75197 dest.emit('unpipe', this);
75198
75199 return this;
75200 };
75201
75202 // set up data events if they are asked for
75203 // Ensure readable listeners eventually get something
75204 Readable.prototype.on = function (ev, fn) {
75205 var res = Stream.prototype.on.call(this, ev, fn);
75206
75207 if (ev === 'data') {
75208 // Start flowing on next tick if stream isn't explicitly paused
75209 if (this._readableState.flowing !== false) this.resume();
75210 } else if (ev === 'readable') {
75211 var state = this._readableState;
75212 if (!state.endEmitted && !state.readableListening) {
75213 state.readableListening = state.needReadable = true;
75214 state.emittedReadable = false;
75215 if (!state.reading) {
75216 processNextTick(nReadingNextTick, this);
75217 } else if (state.length) {
75218 emitReadable(this, state);
75219 }
75220 }
75221 }
75222
75223 return res;
75224 };
75225 Readable.prototype.addListener = Readable.prototype.on;
75226
75227 function nReadingNextTick(self) {
75228 debug('readable nexttick read 0');
75229 self.read(0);
75230 }
75231
75232 // pause() and resume() are remnants of the legacy readable stream API
75233 // If the user uses them, then switch into old mode.
75234 Readable.prototype.resume = function () {
75235 var state = this._readableState;
75236 if (!state.flowing) {
75237 debug('resume');
75238 state.flowing = true;
75239 resume(this, state);
75240 }
75241 return this;
75242 };
75243
75244 function resume(stream, state) {
75245 if (!state.resumeScheduled) {
75246 state.resumeScheduled = true;
75247 processNextTick(resume_, stream, state);
75248 }
75249 }
75250
75251 function resume_(stream, state) {
75252 if (!state.reading) {
75253 debug('resume read 0');
75254 stream.read(0);
75255 }
75256
75257 state.resumeScheduled = false;
75258 state.awaitDrain = 0;
75259 stream.emit('resume');
75260 flow(stream);
75261 if (state.flowing && !state.reading) stream.read(0);
75262 }
75263
75264 Readable.prototype.pause = function () {
75265 debug('call pause flowing=%j', this._readableState.flowing);
75266 if (false !== this._readableState.flowing) {
75267 debug('pause');
75268 this._readableState.flowing = false;
75269 this.emit('pause');
75270 }
75271 return this;
75272 };
75273
75274 function flow(stream) {
75275 var state = stream._readableState;
75276 debug('flow', state.flowing);
75277 while (state.flowing && stream.read() !== null) {}
75278 }
75279
75280 // wrap an old-style stream as the async data source.
75281 // This is *not* part of the readable stream interface.
75282 // It is an ugly unfortunate mess of history.
75283 Readable.prototype.wrap = function (stream) {
75284 var state = this._readableState;
75285 var paused = false;
75286
75287 var self = this;
75288 stream.on('end', function () {
75289 debug('wrapped end');
75290 if (state.decoder && !state.ended) {
75291 var chunk = state.decoder.end();
75292 if (chunk && chunk.length) self.push(chunk);
75293 }
75294
75295 self.push(null);
75296 });
75297
75298 stream.on('data', function (chunk) {
75299 debug('wrapped data');
75300 if (state.decoder) chunk = state.decoder.write(chunk);
75301
75302 // don't skip over falsy values in objectMode
75303 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
75304
75305 var ret = self.push(chunk);
75306 if (!ret) {
75307 paused = true;
75308 stream.pause();
75309 }
75310 });
75311
75312 // proxy all the other methods.
75313 // important when wrapping filters and duplexes.
75314 for (var i in stream) {
75315 if (this[i] === undefined && typeof stream[i] === 'function') {
75316 this[i] = function (method) {
75317 return function () {
75318 return stream[method].apply(stream, arguments);
75319 };
75320 }(i);
75321 }
75322 }
75323
75324 // proxy certain important events.
75325 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
75326 forEach(events, function (ev) {
75327 stream.on(ev, self.emit.bind(self, ev));
75328 });
75329
75330 // when we try to consume some more bytes, simply unpause the
75331 // underlying stream.
75332 self._read = function (n) {
75333 debug('wrapped _read', n);
75334 if (paused) {
75335 paused = false;
75336 stream.resume();
75337 }
75338 };
75339
75340 return self;
75341 };
75342
75343 // exposed for testing purposes only.
75344 Readable._fromList = fromList;
75345
75346 // Pluck off n bytes from an array of buffers.
75347 // Length is the combined lengths of all the buffers in the list.
75348 // This function is designed to be inlinable, so please take care when making
75349 // changes to the function body.
75350 function fromList(n, state) {
75351 // nothing buffered
75352 if (state.length === 0) return null;
75353
75354 var ret;
75355 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
75356 // read it all, truncate the list
75357 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
75358 state.buffer.clear();
75359 } else {
75360 // read part of list
75361 ret = fromListPartial(n, state.buffer, state.decoder);
75362 }
75363
75364 return ret;
75365 }
75366
75367 // Extracts only enough buffered data to satisfy the amount requested.
75368 // This function is designed to be inlinable, so please take care when making
75369 // changes to the function body.
75370 function fromListPartial(n, list, hasStrings) {
75371 var ret;
75372 if (n < list.head.data.length) {
75373 // slice is the same for buffers and strings
75374 ret = list.head.data.slice(0, n);
75375 list.head.data = list.head.data.slice(n);
75376 } else if (n === list.head.data.length) {
75377 // first chunk is a perfect match
75378 ret = list.shift();
75379 } else {
75380 // result spans more than one buffer
75381 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
75382 }
75383 return ret;
75384 }
75385
75386 // Copies a specified amount of characters from the list of buffered data
75387 // chunks.
75388 // This function is designed to be inlinable, so please take care when making
75389 // changes to the function body.
75390 function copyFromBufferString(n, list) {
75391 var p = list.head;
75392 var c = 1;
75393 var ret = p.data;
75394 n -= ret.length;
75395 while (p = p.next) {
75396 var str = p.data;
75397 var nb = n > str.length ? str.length : n;
75398 if (nb === str.length) ret += str;else ret += str.slice(0, n);
75399 n -= nb;
75400 if (n === 0) {
75401 if (nb === str.length) {
75402 ++c;
75403 if (p.next) list.head = p.next;else list.head = list.tail = null;
75404 } else {
75405 list.head = p;
75406 p.data = str.slice(nb);
75407 }
75408 break;
75409 }
75410 ++c;
75411 }
75412 list.length -= c;
75413 return ret;
75414 }
75415
75416 // Copies a specified amount of bytes from the list of buffered data chunks.
75417 // This function is designed to be inlinable, so please take care when making
75418 // changes to the function body.
75419 function copyFromBuffer(n, list) {
75420 var ret = bufferShim.allocUnsafe(n);
75421 var p = list.head;
75422 var c = 1;
75423 p.data.copy(ret);
75424 n -= p.data.length;
75425 while (p = p.next) {
75426 var buf = p.data;
75427 var nb = n > buf.length ? buf.length : n;
75428 buf.copy(ret, ret.length - n, 0, nb);
75429 n -= nb;
75430 if (n === 0) {
75431 if (nb === buf.length) {
75432 ++c;
75433 if (p.next) list.head = p.next;else list.head = list.tail = null;
75434 } else {
75435 list.head = p;
75436 p.data = buf.slice(nb);
75437 }
75438 break;
75439 }
75440 ++c;
75441 }
75442 list.length -= c;
75443 return ret;
75444 }
75445
75446 function endReadable(stream) {
75447 var state = stream._readableState;
75448
75449 // If we get here before consuming all the bytes, then that is a
75450 // bug in node. Should never happen.
75451 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
75452
75453 if (!state.endEmitted) {
75454 state.ended = true;
75455 processNextTick(endReadableNT, state, stream);
75456 }
75457 }
75458
75459 function endReadableNT(state, stream) {
75460 // Check that we didn't get one last unshift.
75461 if (!state.endEmitted && state.length === 0) {
75462 state.endEmitted = true;
75463 stream.readable = false;
75464 stream.emit('end');
75465 }
75466 }
75467
75468 function forEach(xs, f) {
75469 for (var i = 0, l = xs.length; i < l; i++) {
75470 f(xs[i], i);
75471 }
75472 }
75473
75474 function indexOf(xs, x) {
75475 for (var i = 0, l = xs.length; i < l; i++) {
75476 if (xs[i] === x) return i;
75477 }
75478 return -1;
75479 }
75480 }).call(this,require('_process'))
75481 },{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
75482 // a transform stream is a readable/writable stream where you do
75483 // something with the data. Sometimes it's called a "filter",
75484 // but that's not a great name for it, since that implies a thing where
75485 // some bits pass through, and others are simply ignored. (That would
75486 // be a valid example of a transform, of course.)
75487 //
75488 // While the output is causally related to the input, it's not a
75489 // necessarily symmetric or synchronous transformation. For example,
75490 // a zlib stream might take multiple plain-text writes(), and then
75491 // emit a single compressed chunk some time in the future.
75492 //
75493 // Here's how this works:
75494 //
75495 // The Transform stream has all the aspects of the readable and writable
75496 // stream classes. When you write(chunk), that calls _write(chunk,cb)
75497 // internally, and returns false if there's a lot of pending writes
75498 // buffered up. When you call read(), that calls _read(n) until
75499 // there's enough pending readable data buffered up.
75500 //
75501 // In a transform stream, the written data is placed in a buffer. When
75502 // _read(n) is called, it transforms the queued up data, calling the
75503 // buffered _write cb's as it consumes chunks. If consuming a single
75504 // written chunk would result in multiple output chunks, then the first
75505 // outputted bit calls the readcb, and subsequent chunks just go into
75506 // the read buffer, and will cause it to emit 'readable' if necessary.
75507 //
75508 // This way, back-pressure is actually determined by the reading side,
75509 // since _read has to be called to start processing a new chunk. However,
75510 // a pathological inflate type of transform can cause excessive buffering
75511 // here. For example, imagine a stream where every byte of input is
75512 // interpreted as an integer from 0-255, and then results in that many
75513 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
75514 // 1kb of data being output. In this case, you could write a very small
75515 // amount of input, and end up with a very large amount of output. In
75516 // such a pathological inflating mechanism, there'd be no way to tell
75517 // the system to stop doing the transform. A single 4MB write could
75518 // cause the system to run out of memory.
75519 //
75520 // However, even in such a pathological case, only a single written chunk
75521 // would be consumed, and then the rest would wait (un-transformed) until
75522 // the results of the previous transformed chunk were consumed.
75523
75524 'use strict';
75525
75526 module.exports = Transform;
75527
75528 var Duplex = require('./_stream_duplex');
75529
75530 /*<replacement>*/
75531 var util = require('core-util-is');
75532 util.inherits = require('inherits');
75533 /*</replacement>*/
75534
75535 util.inherits(Transform, Duplex);
75536
75537 function TransformState(stream) {
75538 this.afterTransform = function (er, data) {
75539 return afterTransform(stream, er, data);
75540 };
75541
75542 this.needTransform = false;
75543 this.transforming = false;
75544 this.writecb = null;
75545 this.writechunk = null;
75546 this.writeencoding = null;
75547 }
75548
75549 function afterTransform(stream, er, data) {
75550 var ts = stream._transformState;
75551 ts.transforming = false;
75552
75553 var cb = ts.writecb;
75554
75555 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
75556
75557 ts.writechunk = null;
75558 ts.writecb = null;
75559
75560 if (data !== null && data !== undefined) stream.push(data);
75561
75562 cb(er);
75563
75564 var rs = stream._readableState;
75565 rs.reading = false;
75566 if (rs.needReadable || rs.length < rs.highWaterMark) {
75567 stream._read(rs.highWaterMark);
75568 }
75569 }
75570
75571 function Transform(options) {
75572 if (!(this instanceof Transform)) return new Transform(options);
75573
75574 Duplex.call(this, options);
75575
75576 this._transformState = new TransformState(this);
75577
75578 var stream = this;
75579
75580 // start out asking for a readable event once data is transformed.
75581 this._readableState.needReadable = true;
75582
75583 // we have implemented the _read method, and done the other things
75584 // that Readable wants before the first _read call, so unset the
75585 // sync guard flag.
75586 this._readableState.sync = false;
75587
75588 if (options) {
75589 if (typeof options.transform === 'function') this._transform = options.transform;
75590
75591 if (typeof options.flush === 'function') this._flush = options.flush;
75592 }
75593
75594 // When the writable side finishes, then flush out anything remaining.
75595 this.once('prefinish', function () {
75596 if (typeof this._flush === 'function') this._flush(function (er, data) {
75597 done(stream, er, data);
75598 });else done(stream);
75599 });
75600 }
75601
75602 Transform.prototype.push = function (chunk, encoding) {
75603 this._transformState.needTransform = false;
75604 return Duplex.prototype.push.call(this, chunk, encoding);
75605 };
75606
75607 // This is the part where you do stuff!
75608 // override this function in implementation classes.
75609 // 'chunk' is an input chunk.
75610 //
75611 // Call `push(newChunk)` to pass along transformed output
75612 // to the readable side. You may call 'push' zero or more times.
75613 //
75614 // Call `cb(err)` when you are done with this chunk. If you pass
75615 // an error, then that'll put the hurt on the whole operation. If you
75616 // never call cb(), then you'll never get another chunk.
75617 Transform.prototype._transform = function (chunk, encoding, cb) {
75618 throw new Error('_transform() is not implemented');
75619 };
75620
75621 Transform.prototype._write = function (chunk, encoding, cb) {
75622 var ts = this._transformState;
75623 ts.writecb = cb;
75624 ts.writechunk = chunk;
75625 ts.writeencoding = encoding;
75626 if (!ts.transforming) {
75627 var rs = this._readableState;
75628 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
75629 }
75630 };
75631
75632 // Doesn't matter what the args are here.
75633 // _transform does all the work.
75634 // That we got here means that the readable side wants more data.
75635 Transform.prototype._read = function (n) {
75636 var ts = this._transformState;
75637
75638 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
75639 ts.transforming = true;
75640 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
75641 } else {
75642 // mark that we need a transform, so that any data that comes in
75643 // will get processed, now that we've asked for it.
75644 ts.needTransform = true;
75645 }
75646 };
75647
75648 function done(stream, er, data) {
75649 if (er) return stream.emit('error', er);
75650
75651 if (data !== null && data !== undefined) stream.push(data);
75652
75653 // if there's nothing in the write buffer, then that means
75654 // that nothing more will ever be provided
75655 var ws = stream._writableState;
75656 var ts = stream._transformState;
75657
75658 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
75659
75660 if (ts.transforming) throw new Error('Calling transform done when still transforming');
75661
75662 return stream.push(null);
75663 }
75664 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
75665 (function (process){
75666 // A bit simpler than readable streams.
75667 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
75668 // the drain event emission and buffering.
75669
75670 'use strict';
75671
75672 module.exports = Writable;
75673
75674 /*<replacement>*/
75675 var processNextTick = require('process-nextick-args');
75676 /*</replacement>*/
75677
75678 /*<replacement>*/
75679 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
75680 /*</replacement>*/
75681
75682 /*<replacement>*/
75683 var Duplex;
75684 /*</replacement>*/
75685
75686 Writable.WritableState = WritableState;
75687
75688 /*<replacement>*/
75689 var util = require('core-util-is');
75690 util.inherits = require('inherits');
75691 /*</replacement>*/
75692
75693 /*<replacement>*/
75694 var internalUtil = {
75695 deprecate: require('util-deprecate')
75696 };
75697 /*</replacement>*/
75698
75699 /*<replacement>*/
75700 var Stream;
75701 (function () {
75702 try {
75703 Stream = require('st' + 'ream');
75704 } catch (_) {} finally {
75705 if (!Stream) Stream = require('events').EventEmitter;
75706 }
75707 })();
75708 /*</replacement>*/
75709
75710 var Buffer = require('buffer').Buffer;
75711 /*<replacement>*/
75712 var bufferShim = require('buffer-shims');
75713 /*</replacement>*/
75714
75715 util.inherits(Writable, Stream);
75716
75717 function nop() {}
75718
75719 function WriteReq(chunk, encoding, cb) {
75720 this.chunk = chunk;
75721 this.encoding = encoding;
75722 this.callback = cb;
75723 this.next = null;
75724 }
75725
75726 function WritableState(options, stream) {
75727 Duplex = Duplex || require('./_stream_duplex');
75728
75729 options = options || {};
75730
75731 // object stream flag to indicate whether or not this stream
75732 // contains buffers or objects.
75733 this.objectMode = !!options.objectMode;
75734
75735 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
75736
75737 // the point at which write() starts returning false
75738 // Note: 0 is a valid value, means that we always return false if
75739 // the entire buffer is not flushed immediately on write()
75740 var hwm = options.highWaterMark;
75741 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
75742 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
75743
75744 // cast to ints.
75745 this.highWaterMark = ~ ~this.highWaterMark;
75746
75747 // drain event flag.
75748 this.needDrain = false;
75749 // at the start of calling end()
75750 this.ending = false;
75751 // when end() has been called, and returned
75752 this.ended = false;
75753 // when 'finish' is emitted
75754 this.finished = false;
75755
75756 // should we decode strings into buffers before passing to _write?
75757 // this is here so that some node-core streams can optimize string
75758 // handling at a lower level.
75759 var noDecode = options.decodeStrings === false;
75760 this.decodeStrings = !noDecode;
75761
75762 // Crypto is kind of old and crusty. Historically, its default string
75763 // encoding is 'binary' so we have to make this configurable.
75764 // Everything else in the universe uses 'utf8', though.
75765 this.defaultEncoding = options.defaultEncoding || 'utf8';
75766
75767 // not an actual buffer we keep track of, but a measurement
75768 // of how much we're waiting to get pushed to some underlying
75769 // socket or file.
75770 this.length = 0;
75771
75772 // a flag to see when we're in the middle of a write.
75773 this.writing = false;
75774
75775 // when true all writes will be buffered until .uncork() call
75776 this.corked = 0;
75777
75778 // a flag to be able to tell if the onwrite cb is called immediately,
75779 // or on a later tick. We set this to true at first, because any
75780 // actions that shouldn't happen until "later" should generally also
75781 // not happen before the first write call.
75782 this.sync = true;
75783
75784 // a flag to know if we're processing previously buffered items, which
75785 // may call the _write() callback in the same tick, so that we don't
75786 // end up in an overlapped onwrite situation.
75787 this.bufferProcessing = false;
75788
75789 // the callback that's passed to _write(chunk,cb)
75790 this.onwrite = function (er) {
75791 onwrite(stream, er);
75792 };
75793
75794 // the callback that the user supplies to write(chunk,encoding,cb)
75795 this.writecb = null;
75796
75797 // the amount that is being written when _write is called.
75798 this.writelen = 0;
75799
75800 this.bufferedRequest = null;
75801 this.lastBufferedRequest = null;
75802
75803 // number of pending user-supplied write callbacks
75804 // this must be 0 before 'finish' can be emitted
75805 this.pendingcb = 0;
75806
75807 // emit prefinish if the only thing we're waiting for is _write cbs
75808 // This is relevant for synchronous Transform streams
75809 this.prefinished = false;
75810
75811 // True if the error was already emitted and should not be thrown again
75812 this.errorEmitted = false;
75813
75814 // count buffered requests
75815 this.bufferedRequestCount = 0;
75816
75817 // allocate the first CorkedRequest, there is always
75818 // one allocated and free to use, and we maintain at most two
75819 this.corkedRequestsFree = new CorkedRequest(this);
75820 }
75821
75822 WritableState.prototype.getBuffer = function getBuffer() {
75823 var current = this.bufferedRequest;
75824 var out = [];
75825 while (current) {
75826 out.push(current);
75827 current = current.next;
75828 }
75829 return out;
75830 };
75831
75832 (function () {
75833 try {
75834 Object.defineProperty(WritableState.prototype, 'buffer', {
75835 get: internalUtil.deprecate(function () {
75836 return this.getBuffer();
75837 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
75838 });
75839 } catch (_) {}
75840 })();
75841
75842 // Test _writableState for inheritance to account for Duplex streams,
75843 // whose prototype chain only points to Readable.
75844 var realHasInstance;
75845 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
75846 realHasInstance = Function.prototype[Symbol.hasInstance];
75847 Object.defineProperty(Writable, Symbol.hasInstance, {
75848 value: function (object) {
75849 if (realHasInstance.call(this, object)) return true;
75850
75851 return object && object._writableState instanceof WritableState;
75852 }
75853 });
75854 } else {
75855 realHasInstance = function (object) {
75856 return object instanceof this;
75857 };
75858 }
75859
75860 function Writable(options) {
75861 Duplex = Duplex || require('./_stream_duplex');
75862
75863 // Writable ctor is applied to Duplexes, too.
75864 // `realHasInstance` is necessary because using plain `instanceof`
75865 // would return false, as no `_writableState` property is attached.
75866
75867 // Trying to use the custom `instanceof` for Writable here will also break the
75868 // Node.js LazyTransform implementation, which has a non-trivial getter for
75869 // `_writableState` that would lead to infinite recursion.
75870 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
75871 return new Writable(options);
75872 }
75873
75874 this._writableState = new WritableState(options, this);
75875
75876 // legacy.
75877 this.writable = true;
75878
75879 if (options) {
75880 if (typeof options.write === 'function') this._write = options.write;
75881
75882 if (typeof options.writev === 'function') this._writev = options.writev;
75883 }
75884
75885 Stream.call(this);
75886 }
75887
75888 // Otherwise people can pipe Writable streams, which is just wrong.
75889 Writable.prototype.pipe = function () {
75890 this.emit('error', new Error('Cannot pipe, not readable'));
75891 };
75892
75893 function writeAfterEnd(stream, cb) {
75894 var er = new Error('write after end');
75895 // TODO: defer error events consistently everywhere, not just the cb
75896 stream.emit('error', er);
75897 processNextTick(cb, er);
75898 }
75899
75900 // If we get something that is not a buffer, string, null, or undefined,
75901 // and we're not in objectMode, then that's an error.
75902 // Otherwise stream chunks are all considered to be of length=1, and the
75903 // watermarks determine how many objects to keep in the buffer, rather than
75904 // how many bytes or characters.
75905 function validChunk(stream, state, chunk, cb) {
75906 var valid = true;
75907 var er = false;
75908 // Always throw error if a null is written
75909 // if we are not in object mode then throw
75910 // if it is not a buffer, string, or undefined.
75911 if (chunk === null) {
75912 er = new TypeError('May not write null values to stream');
75913 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
75914 er = new TypeError('Invalid non-string/buffer chunk');
75915 }
75916 if (er) {
75917 stream.emit('error', er);
75918 processNextTick(cb, er);
75919 valid = false;
75920 }
75921 return valid;
75922 }
75923
75924 Writable.prototype.write = function (chunk, encoding, cb) {
75925 var state = this._writableState;
75926 var ret = false;
75927
75928 if (typeof encoding === 'function') {
75929 cb = encoding;
75930 encoding = null;
75931 }
75932
75933 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
75934
75935 if (typeof cb !== 'function') cb = nop;
75936
75937 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
75938 state.pendingcb++;
75939 ret = writeOrBuffer(this, state, chunk, encoding, cb);
75940 }
75941
75942 return ret;
75943 };
75944
75945 Writable.prototype.cork = function () {
75946 var state = this._writableState;
75947
75948 state.corked++;
75949 };
75950
75951 Writable.prototype.uncork = function () {
75952 var state = this._writableState;
75953
75954 if (state.corked) {
75955 state.corked--;
75956
75957 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
75958 }
75959 };
75960
75961 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
75962 // node::ParseEncoding() requires lower case.
75963 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
75964 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
75965 this._writableState.defaultEncoding = encoding;
75966 return this;
75967 };
75968
75969 function decodeChunk(state, chunk, encoding) {
75970 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
75971 chunk = bufferShim.from(chunk, encoding);
75972 }
75973 return chunk;
75974 }
75975
75976 // if we're already writing something, then just put this
75977 // in the queue, and wait our turn. Otherwise, call _write
75978 // If we return false, then we need a drain event, so set that flag.
75979 function writeOrBuffer(stream, state, chunk, encoding, cb) {
75980 chunk = decodeChunk(state, chunk, encoding);
75981
75982 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
75983 var len = state.objectMode ? 1 : chunk.length;
75984
75985 state.length += len;
75986
75987 var ret = state.length < state.highWaterMark;
75988 // we must ensure that previous needDrain will not be reset to false.
75989 if (!ret) state.needDrain = true;
75990
75991 if (state.writing || state.corked) {
75992 var last = state.lastBufferedRequest;
75993 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
75994 if (last) {
75995 last.next = state.lastBufferedRequest;
75996 } else {
75997 state.bufferedRequest = state.lastBufferedRequest;
75998 }
75999 state.bufferedRequestCount += 1;
76000 } else {
76001 doWrite(stream, state, false, len, chunk, encoding, cb);
76002 }
76003
76004 return ret;
76005 }
76006
76007 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
76008 state.writelen = len;
76009 state.writecb = cb;
76010 state.writing = true;
76011 state.sync = true;
76012 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
76013 state.sync = false;
76014 }
76015
76016 function onwriteError(stream, state, sync, er, cb) {
76017 --state.pendingcb;
76018 if (sync) processNextTick(cb, er);else cb(er);
76019
76020 stream._writableState.errorEmitted = true;
76021 stream.emit('error', er);
76022 }
76023
76024 function onwriteStateUpdate(state) {
76025 state.writing = false;
76026 state.writecb = null;
76027 state.length -= state.writelen;
76028 state.writelen = 0;
76029 }
76030
76031 function onwrite(stream, er) {
76032 var state = stream._writableState;
76033 var sync = state.sync;
76034 var cb = state.writecb;
76035
76036 onwriteStateUpdate(state);
76037
76038 if (er) onwriteError(stream, state, sync, er, cb);else {
76039 // Check if we're actually ready to finish, but don't emit yet
76040 var finished = needFinish(state);
76041
76042 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
76043 clearBuffer(stream, state);
76044 }
76045
76046 if (sync) {
76047 /*<replacement>*/
76048 asyncWrite(afterWrite, stream, state, finished, cb);
76049 /*</replacement>*/
76050 } else {
76051 afterWrite(stream, state, finished, cb);
76052 }
76053 }
76054 }
76055
76056 function afterWrite(stream, state, finished, cb) {
76057 if (!finished) onwriteDrain(stream, state);
76058 state.pendingcb--;
76059 cb();
76060 finishMaybe(stream, state);
76061 }
76062
76063 // Must force callback to be called on nextTick, so that we don't
76064 // emit 'drain' before the write() consumer gets the 'false' return
76065 // value, and has a chance to attach a 'drain' listener.
76066 function onwriteDrain(stream, state) {
76067 if (state.length === 0 && state.needDrain) {
76068 state.needDrain = false;
76069 stream.emit('drain');
76070 }
76071 }
76072
76073 // if there's something in the buffer waiting, then process it
76074 function clearBuffer(stream, state) {
76075 state.bufferProcessing = true;
76076 var entry = state.bufferedRequest;
76077
76078 if (stream._writev && entry && entry.next) {
76079 // Fast case, write everything using _writev()
76080 var l = state.bufferedRequestCount;
76081 var buffer = new Array(l);
76082 var holder = state.corkedRequestsFree;
76083 holder.entry = entry;
76084
76085 var count = 0;
76086 while (entry) {
76087 buffer[count] = entry;
76088 entry = entry.next;
76089 count += 1;
76090 }
76091
76092 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
76093
76094 // doWrite is almost always async, defer these to save a bit of time
76095 // as the hot path ends with doWrite
76096 state.pendingcb++;
76097 state.lastBufferedRequest = null;
76098 if (holder.next) {
76099 state.corkedRequestsFree = holder.next;
76100 holder.next = null;
76101 } else {
76102 state.corkedRequestsFree = new CorkedRequest(state);
76103 }
76104 } else {
76105 // Slow case, write chunks one-by-one
76106 while (entry) {
76107 var chunk = entry.chunk;
76108 var encoding = entry.encoding;
76109 var cb = entry.callback;
76110 var len = state.objectMode ? 1 : chunk.length;
76111
76112 doWrite(stream, state, false, len, chunk, encoding, cb);
76113 entry = entry.next;
76114 // if we didn't call the onwrite immediately, then
76115 // it means that we need to wait until it does.
76116 // also, that means that the chunk and cb are currently
76117 // being processed, so move the buffer counter past them.
76118 if (state.writing) {
76119 break;
76120 }
76121 }
76122
76123 if (entry === null) state.lastBufferedRequest = null;
76124 }
76125
76126 state.bufferedRequestCount = 0;
76127 state.bufferedRequest = entry;
76128 state.bufferProcessing = false;
76129 }
76130
76131 Writable.prototype._write = function (chunk, encoding, cb) {
76132 cb(new Error('_write() is not implemented'));
76133 };
76134
76135 Writable.prototype._writev = null;
76136
76137 Writable.prototype.end = function (chunk, encoding, cb) {
76138 var state = this._writableState;
76139
76140 if (typeof chunk === 'function') {
76141 cb = chunk;
76142 chunk = null;
76143 encoding = null;
76144 } else if (typeof encoding === 'function') {
76145 cb = encoding;
76146 encoding = null;
76147 }
76148
76149 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
76150
76151 // .end() fully uncorks
76152 if (state.corked) {
76153 state.corked = 1;
76154 this.uncork();
76155 }
76156
76157 // ignore unnecessary end() calls.
76158 if (!state.ending && !state.finished) endWritable(this, state, cb);
76159 };
76160
76161 function needFinish(state) {
76162 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
76163 }
76164
76165 function prefinish(stream, state) {
76166 if (!state.prefinished) {
76167 state.prefinished = true;
76168 stream.emit('prefinish');
76169 }
76170 }
76171
76172 function finishMaybe(stream, state) {
76173 var need = needFinish(state);
76174 if (need) {
76175 if (state.pendingcb === 0) {
76176 prefinish(stream, state);
76177 state.finished = true;
76178 stream.emit('finish');
76179 } else {
76180 prefinish(stream, state);
76181 }
76182 }
76183 return need;
76184 }
76185
76186 function endWritable(stream, state, cb) {
76187 state.ending = true;
76188 finishMaybe(stream, state);
76189 if (cb) {
76190 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
76191 }
76192 state.ended = true;
76193 stream.writable = false;
76194 }
76195
76196 // It seems a linked list but it is not
76197 // there will be only 2 of these for each stream
76198 function CorkedRequest(state) {
76199 var _this = this;
76200
76201 this.next = null;
76202 this.entry = null;
76203
76204 this.finish = function (err) {
76205 var entry = _this.entry;
76206 _this.entry = null;
76207 while (entry) {
76208 var cb = entry.callback;
76209 state.pendingcb--;
76210 cb(err);
76211 entry = entry.next;
76212 }
76213 if (state.corkedRequestsFree) {
76214 state.corkedRequestsFree.next = _this;
76215 } else {
76216 state.corkedRequestsFree = _this;
76217 }
76218 };
76219 }
76220 }).call(this,require('_process'))
76221 },{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
76222 'use strict';
76223
76224 var Buffer = require('buffer').Buffer;
76225 /*<replacement>*/
76226 var bufferShim = require('buffer-shims');
76227 /*</replacement>*/
76228
76229 module.exports = BufferList;
76230
76231 function BufferList() {
76232 this.head = null;
76233 this.tail = null;
76234 this.length = 0;
76235 }
76236
76237 BufferList.prototype.push = function (v) {
76238 var entry = { data: v, next: null };
76239 if (this.length > 0) this.tail.next = entry;else this.head = entry;
76240 this.tail = entry;
76241 ++this.length;
76242 };
76243
76244 BufferList.prototype.unshift = function (v) {
76245 var entry = { data: v, next: this.head };
76246 if (this.length === 0) this.tail = entry;
76247 this.head = entry;
76248 ++this.length;
76249 };
76250
76251 BufferList.prototype.shift = function () {
76252 if (this.length === 0) return;
76253 var ret = this.head.data;
76254 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
76255 --this.length;
76256 return ret;
76257 };
76258
76259 BufferList.prototype.clear = function () {
76260 this.head = this.tail = null;
76261 this.length = 0;
76262 };
76263
76264 BufferList.prototype.join = function (s) {
76265 if (this.length === 0) return '';
76266 var p = this.head;
76267 var ret = '' + p.data;
76268 while (p = p.next) {
76269 ret += s + p.data;
76270 }return ret;
76271 };
76272
76273 BufferList.prototype.concat = function (n) {
76274 if (this.length === 0) return bufferShim.alloc(0);
76275 if (this.length === 1) return this.head.data;
76276 var ret = bufferShim.allocUnsafe(n >>> 0);
76277 var p = this.head;
76278 var i = 0;
76279 while (p) {
76280 p.data.copy(ret, i);
76281 i += p.data.length;
76282 p = p.next;
76283 }
76284 return ret;
76285 };
76286 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
76287 module.exports = require("./lib/_stream_passthrough.js")
76288
76289 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
76290 (function (process){
76291 var Stream = (function (){
76292 try {
76293 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
76294 } catch(_){}
76295 }());
76296 exports = module.exports = require('./lib/_stream_readable.js');
76297 exports.Stream = Stream || exports;
76298 exports.Readable = exports;
76299 exports.Writable = require('./lib/_stream_writable.js');
76300 exports.Duplex = require('./lib/_stream_duplex.js');
76301 exports.Transform = require('./lib/_stream_transform.js');
76302 exports.PassThrough = require('./lib/_stream_passthrough.js');
76303
76304 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
76305 module.exports = Stream;
76306 }
76307
76308 }).call(this,require('_process'))
76309 },{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
76310 module.exports = require("./lib/_stream_transform.js")
76311
76312 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
76313 module.exports = require("./lib/_stream_writable.js")
76314
76315 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
76316 // Copyright Joyent, Inc. and other Node contributors.
76317 //
76318 // Permission is hereby granted, free of charge, to any person obtaining a
76319 // copy of this software and associated documentation files (the
76320 // "Software"), to deal in the Software without restriction, including
76321 // without limitation the rights to use, copy, modify, merge, publish,
76322 // distribute, sublicense, and/or sell copies of the Software, and to permit
76323 // persons to whom the Software is furnished to do so, subject to the
76324 // following conditions:
76325 //
76326 // The above copyright notice and this permission notice shall be included
76327 // in all copies or substantial portions of the Software.
76328 //
76329 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
76330 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
76331 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
76332 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
76333 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
76334 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
76335 // USE OR OTHER DEALINGS IN THE SOFTWARE.
76336
76337 module.exports = Stream;
76338
76339 var EE = require('events').EventEmitter;
76340 var inherits = require('inherits');
76341
76342 inherits(Stream, EE);
76343 Stream.Readable = require('readable-stream/readable.js');
76344 Stream.Writable = require('readable-stream/writable.js');
76345 Stream.Duplex = require('readable-stream/duplex.js');
76346 Stream.Transform = require('readable-stream/transform.js');
76347 Stream.PassThrough = require('readable-stream/passthrough.js');
76348
76349 // Backwards-compat with node 0.4.x
76350 Stream.Stream = Stream;
76351
76352
76353
76354 // old-style streams. Note that the pipe method (the only relevant
76355 // part of this class) is overridden in the Readable class.
76356
76357 function Stream() {
76358 EE.call(this);
76359 }
76360
76361 Stream.prototype.pipe = function(dest, options) {
76362 var source = this;
76363
76364 function ondata(chunk) {
76365 if (dest.writable) {
76366 if (false === dest.write(chunk) && source.pause) {
76367 source.pause();
76368 }
76369 }
76370 }
76371
76372 source.on('data', ondata);
76373
76374 function ondrain() {
76375 if (source.readable && source.resume) {
76376 source.resume();
76377 }
76378 }
76379
76380 dest.on('drain', ondrain);
76381
76382 // If the 'end' option is not supplied, dest.end() will be called when
76383 // source gets the 'end' or 'close' events. Only dest.end() once.
76384 if (!dest._isStdio && (!options || options.end !== false)) {
76385 source.on('end', onend);
76386 source.on('close', onclose);
76387 }
76388
76389 var didOnEnd = false;
76390 function onend() {
76391 if (didOnEnd) return;
76392 didOnEnd = true;
76393
76394 dest.end();
76395 }
76396
76397
76398 function onclose() {
76399 if (didOnEnd) return;
76400 didOnEnd = true;
76401
76402 if (typeof dest.destroy === 'function') dest.destroy();
76403 }
76404
76405 // don't leave dangling pipes when there are errors.
76406 function onerror(er) {
76407 cleanup();
76408 if (EE.listenerCount(this, 'error') === 0) {
76409 throw er; // Unhandled stream error in pipe.
76410 }
76411 }
76412
76413 source.on('error', onerror);
76414 dest.on('error', onerror);
76415
76416 // remove all the event listeners that were added.
76417 function cleanup() {
76418 source.removeListener('data', ondata);
76419 dest.removeListener('drain', ondrain);
76420
76421 source.removeListener('end', onend);
76422 source.removeListener('close', onclose);
76423
76424 source.removeListener('error', onerror);
76425 dest.removeListener('error', onerror);
76426
76427 source.removeListener('end', cleanup);
76428 source.removeListener('close', cleanup);
76429
76430 dest.removeListener('close', cleanup);
76431 }
76432
76433 source.on('end', cleanup);
76434 source.on('close', cleanup);
76435
76436 dest.on('close', cleanup);
76437
76438 dest.emit('pipe', source);
76439
76440 // Allow for unix-like usage: A.pipe(B).pipe(C)
76441 return dest;
76442 };
76443
76444 },{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
76445 // Copyright Joyent, Inc. and other Node contributors.
76446 //
76447 // Permission is hereby granted, free of charge, to any person obtaining a
76448 // copy of this software and associated documentation files (the
76449 // "Software"), to deal in the Software without restriction, including
76450 // without limitation the rights to use, copy, modify, merge, publish,
76451 // distribute, sublicense, and/or sell copies of the Software, and to permit
76452 // persons to whom the Software is furnished to do so, subject to the
76453 // following conditions:
76454 //
76455 // The above copyright notice and this permission notice shall be included
76456 // in all copies or substantial portions of the Software.
76457 //
76458 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
76459 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
76460 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
76461 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
76462 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
76463 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
76464 // USE OR OTHER DEALINGS IN THE SOFTWARE.
76465
76466 var Buffer = require('buffer').Buffer;
76467
76468 var isBufferEncoding = Buffer.isEncoding
76469 || function(encoding) {
76470 switch (encoding && encoding.toLowerCase()) {
76471 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
76472 default: return false;
76473 }
76474 }
76475
76476
76477 function assertEncoding(encoding) {
76478 if (encoding && !isBufferEncoding(encoding)) {
76479 throw new Error('Unknown encoding: ' + encoding);
76480 }
76481 }
76482
76483 // StringDecoder provides an interface for efficiently splitting a series of
76484 // buffers into a series of JS strings without breaking apart multi-byte
76485 // characters. CESU-8 is handled as part of the UTF-8 encoding.
76486 //
76487 // @TODO Handling all encodings inside a single object makes it very difficult
76488 // to reason about this code, so it should be split up in the future.
76489 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
76490 // points as used by CESU-8.
76491 var StringDecoder = exports.StringDecoder = function(encoding) {
76492 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
76493 assertEncoding(encoding);
76494 switch (this.encoding) {
76495 case 'utf8':
76496 // CESU-8 represents each of Surrogate Pair by 3-bytes
76497 this.surrogateSize = 3;
76498 break;
76499 case 'ucs2':
76500 case 'utf16le':
76501 // UTF-16 represents each of Surrogate Pair by 2-bytes
76502 this.surrogateSize = 2;
76503 this.detectIncompleteChar = utf16DetectIncompleteChar;
76504 break;
76505 case 'base64':
76506 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
76507 this.surrogateSize = 3;
76508 this.detectIncompleteChar = base64DetectIncompleteChar;
76509 break;
76510 default:
76511 this.write = passThroughWrite;
76512 return;
76513 }
76514
76515 // Enough space to store all bytes of a single character. UTF-8 needs 4
76516 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
76517 this.charBuffer = new Buffer(6);
76518 // Number of bytes received for the current incomplete multi-byte character.
76519 this.charReceived = 0;
76520 // Number of bytes expected for the current incomplete multi-byte character.
76521 this.charLength = 0;
76522 };
76523
76524
76525 // write decodes the given buffer and returns it as JS string that is
76526 // guaranteed to not contain any partial multi-byte characters. Any partial
76527 // character found at the end of the buffer is buffered up, and will be
76528 // returned when calling write again with the remaining bytes.
76529 //
76530 // Note: Converting a Buffer containing an orphan surrogate to a String
76531 // currently works, but converting a String to a Buffer (via `new Buffer`, or
76532 // Buffer#write) will replace incomplete surrogates with the unicode
76533 // replacement character. See https://codereview.chromium.org/121173009/ .
76534 StringDecoder.prototype.write = function(buffer) {
76535 var charStr = '';
76536 // if our last write ended with an incomplete multibyte character
76537 while (this.charLength) {
76538 // determine how many remaining bytes this buffer has to offer for this char
76539 var available = (buffer.length >= this.charLength - this.charReceived) ?
76540 this.charLength - this.charReceived :
76541 buffer.length;
76542
76543 // add the new bytes to the char buffer
76544 buffer.copy(this.charBuffer, this.charReceived, 0, available);
76545 this.charReceived += available;
76546
76547 if (this.charReceived < this.charLength) {
76548 // still not enough chars in this buffer? wait for more ...
76549 return '';
76550 }
76551
76552 // remove bytes belonging to the current character from the buffer
76553 buffer = buffer.slice(available, buffer.length);
76554
76555 // get the character that was split
76556 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
76557
76558 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
76559 var charCode = charStr.charCodeAt(charStr.length - 1);
76560 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
76561 this.charLength += this.surrogateSize;
76562 charStr = '';
76563 continue;
76564 }
76565 this.charReceived = this.charLength = 0;
76566
76567 // if there are no more bytes in this buffer, just emit our char
76568 if (buffer.length === 0) {
76569 return charStr;
76570 }
76571 break;
76572 }
76573
76574 // determine and set charLength / charReceived
76575 this.detectIncompleteChar(buffer);
76576
76577 var end = buffer.length;
76578 if (this.charLength) {
76579 // buffer the incomplete character bytes we got
76580 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
76581 end -= this.charReceived;
76582 }
76583
76584 charStr += buffer.toString(this.encoding, 0, end);
76585
76586 var end = charStr.length - 1;
76587 var charCode = charStr.charCodeAt(end);
76588 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
76589 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
76590 var size = this.surrogateSize;
76591 this.charLength += size;
76592 this.charReceived += size;
76593 this.charBuffer.copy(this.charBuffer, size, 0, size);
76594 buffer.copy(this.charBuffer, 0, 0, size);
76595 return charStr.substring(0, end);
76596 }
76597
76598 // or just emit the charStr
76599 return charStr;
76600 };
76601
76602 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
76603 // the end of the given buffer. If so, it sets this.charLength to the byte
76604 // length that character, and sets this.charReceived to the number of bytes
76605 // that are available for this character.
76606 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
76607 // determine how many bytes we have to check at the end of this buffer
76608 var i = (buffer.length >= 3) ? 3 : buffer.length;
76609
76610 // Figure out if one of the last i bytes of our buffer announces an
76611 // incomplete char.
76612 for (; i > 0; i--) {
76613 var c = buffer[buffer.length - i];
76614
76615 // See http://en.wikipedia.org/wiki/UTF-8#Description
76616
76617 // 110XXXXX
76618 if (i == 1 && c >> 5 == 0x06) {
76619 this.charLength = 2;
76620 break;
76621 }
76622
76623 // 1110XXXX
76624 if (i <= 2 && c >> 4 == 0x0E) {
76625 this.charLength = 3;
76626 break;
76627 }
76628
76629 // 11110XXX
76630 if (i <= 3 && c >> 3 == 0x1E) {
76631 this.charLength = 4;
76632 break;
76633 }
76634 }
76635 this.charReceived = i;
76636 };
76637
76638 StringDecoder.prototype.end = function(buffer) {
76639 var res = '';
76640 if (buffer && buffer.length)
76641 res = this.write(buffer);
76642
76643 if (this.charReceived) {
76644 var cr = this.charReceived;
76645 var buf = this.charBuffer;
76646 var enc = this.encoding;
76647 res += buf.slice(0, cr).toString(enc);
76648 }
76649
76650 return res;
76651 };
76652
76653 function passThroughWrite(buffer) {
76654 return buffer.toString(this.encoding);
76655 }
76656
76657 function utf16DetectIncompleteChar(buffer) {
76658 this.charReceived = buffer.length % 2;
76659 this.charLength = this.charReceived ? 2 : 0;
76660 }
76661
76662 function base64DetectIncompleteChar(buffer) {
76663 this.charReceived = buffer.length % 3;
76664 this.charLength = this.charReceived ? 3 : 0;
76665 }
76666
76667 },{"buffer":5}],27:[function(require,module,exports){
76668 (function (global){
76669
76670 /**
76671 * Module exports.
76672 */
76673
76674 module.exports = deprecate;
76675
76676 /**
76677 * Mark that a method should not be used.
76678 * Returns a modified function which warns once by default.
76679 *
76680 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
76681 *
76682 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
76683 * will throw an Error when invoked.
76684 *
76685 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
76686 * will invoke `console.trace()` instead of `console.error()`.
76687 *
76688 * @param {Function} fn - the function to deprecate
76689 * @param {String} msg - the string to print to the console when `fn` is invoked
76690 * @returns {Function} a new "deprecated" version of `fn`
76691 * @api public
76692 */
76693
76694 function deprecate (fn, msg) {
76695 if (config('noDeprecation')) {
76696 return fn;
76697 }
76698
76699 var warned = false;
76700 function deprecated() {
76701 if (!warned) {
76702 if (config('throwDeprecation')) {
76703 throw new Error(msg);
76704 } else if (config('traceDeprecation')) {
76705 console.trace(msg);
76706 } else {
76707 console.warn(msg);
76708 }
76709 warned = true;
76710 }
76711 return fn.apply(this, arguments);
76712 }
76713
76714 return deprecated;
76715 }
76716
76717 /**
76718 * Checks `localStorage` for boolean values for the given `name`.
76719 *
76720 * @param {String} name
76721 * @returns {Boolean}
76722 * @api private
76723 */
76724
76725 function config (name) {
76726 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
76727 try {
76728 if (!global.localStorage) return false;
76729 } catch (_) {
76730 return false;
76731 }
76732 var val = global.localStorage[name];
76733 if (null == val) return false;
76734 return String(val).toLowerCase() === 'true';
76735 }
76736
76737 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
76738 },{}],28:[function(require,module,exports){
76739 arguments[4][9][0].apply(exports,arguments)
76740 },{"dup":9}],29:[function(require,module,exports){
76741 module.exports = function isBuffer(arg) {
76742 return arg && typeof arg === 'object'
76743 && typeof arg.copy === 'function'
76744 && typeof arg.fill === 'function'
76745 && typeof arg.readUInt8 === 'function';
76746 }
76747 },{}],30:[function(require,module,exports){
76748 (function (process,global){
76749 // Copyright Joyent, Inc. and other Node contributors.
76750 //
76751 // Permission is hereby granted, free of charge, to any person obtaining a
76752 // copy of this software and associated documentation files (the
76753 // "Software"), to deal in the Software without restriction, including
76754 // without limitation the rights to use, copy, modify, merge, publish,
76755 // distribute, sublicense, and/or sell copies of the Software, and to permit
76756 // persons to whom the Software is furnished to do so, subject to the
76757 // following conditions:
76758 //
76759 // The above copyright notice and this permission notice shall be included
76760 // in all copies or substantial portions of the Software.
76761 //
76762 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
76763 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
76764 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
76765 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
76766 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
76767 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
76768 // USE OR OTHER DEALINGS IN THE SOFTWARE.
76769
76770 var formatRegExp = /%[sdj%]/g;
76771 exports.format = function(f) {
76772 if (!isString(f)) {
76773 var objects = [];
76774 for (var i = 0; i < arguments.length; i++) {
76775 objects.push(inspect(arguments[i]));
76776 }
76777 return objects.join(' ');
76778 }
76779
76780 var i = 1;
76781 var args = arguments;
76782 var len = args.length;
76783 var str = String(f).replace(formatRegExp, function(x) {
76784 if (x === '%%') return '%';
76785 if (i >= len) return x;
76786 switch (x) {
76787 case '%s': return String(args[i++]);
76788 case '%d': return Number(args[i++]);
76789 case '%j':
76790 try {
76791 return JSON.stringify(args[i++]);
76792 } catch (_) {
76793 return '[Circular]';
76794 }
76795 default:
76796 return x;
76797 }
76798 });
76799 for (var x = args[i]; i < len; x = args[++i]) {
76800 if (isNull(x) || !isObject(x)) {
76801 str += ' ' + x;
76802 } else {
76803 str += ' ' + inspect(x);
76804 }
76805 }
76806 return str;
76807 };
76808
76809
76810 // Mark that a method should not be used.
76811 // Returns a modified function which warns once by default.
76812 // If --no-deprecation is set, then it is a no-op.
76813 exports.deprecate = function(fn, msg) {
76814 // Allow for deprecating things in the process of starting up.
76815 if (isUndefined(global.process)) {
76816 return function() {
76817 return exports.deprecate(fn, msg).apply(this, arguments);
76818 };
76819 }
76820
76821 if (process.noDeprecation === true) {
76822 return fn;
76823 }
76824
76825 var warned = false;
76826 function deprecated() {
76827 if (!warned) {
76828 if (process.throwDeprecation) {
76829 throw new Error(msg);
76830 } else if (process.traceDeprecation) {
76831 console.trace(msg);
76832 } else {
76833 console.error(msg);
76834 }
76835 warned = true;
76836 }
76837 return fn.apply(this, arguments);
76838 }
76839
76840 return deprecated;
76841 };
76842
76843
76844 var debugs = {};
76845 var debugEnviron;
76846 exports.debuglog = function(set) {
76847 if (isUndefined(debugEnviron))
76848 debugEnviron = process.env.NODE_DEBUG || '';
76849 set = set.toUpperCase();
76850 if (!debugs[set]) {
76851 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
76852 var pid = process.pid;
76853 debugs[set] = function() {
76854 var msg = exports.format.apply(exports, arguments);
76855 console.error('%s %d: %s', set, pid, msg);
76856 };
76857 } else {
76858 debugs[set] = function() {};
76859 }
76860 }
76861 return debugs[set];
76862 };
76863
76864
76865 /**
76866 * Echos the value of a value. Trys to print the value out
76867 * in the best way possible given the different types.
76868 *
76869 * @param {Object} obj The object to print out.
76870 * @param {Object} opts Optional options object that alters the output.
76871 */
76872 /* legacy: obj, showHidden, depth, colors*/
76873 function inspect(obj, opts) {
76874 // default options
76875 var ctx = {
76876 seen: [],
76877 stylize: stylizeNoColor
76878 };
76879 // legacy...
76880 if (arguments.length >= 3) ctx.depth = arguments[2];
76881 if (arguments.length >= 4) ctx.colors = arguments[3];
76882 if (isBoolean(opts)) {
76883 // legacy...
76884 ctx.showHidden = opts;
76885 } else if (opts) {
76886 // got an "options" object
76887 exports._extend(ctx, opts);
76888 }
76889 // set default options
76890 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
76891 if (isUndefined(ctx.depth)) ctx.depth = 2;
76892 if (isUndefined(ctx.colors)) ctx.colors = false;
76893 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
76894 if (ctx.colors) ctx.stylize = stylizeWithColor;
76895 return formatValue(ctx, obj, ctx.depth);
76896 }
76897 exports.inspect = inspect;
76898
76899
76900 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
76901 inspect.colors = {
76902 'bold' : [1, 22],
76903 'italic' : [3, 23],
76904 'underline' : [4, 24],
76905 'inverse' : [7, 27],
76906 'white' : [37, 39],
76907 'grey' : [90, 39],
76908 'black' : [30, 39],
76909 'blue' : [34, 39],
76910 'cyan' : [36, 39],
76911 'green' : [32, 39],
76912 'magenta' : [35, 39],
76913 'red' : [31, 39],
76914 'yellow' : [33, 39]
76915 };
76916
76917 // Don't use 'blue' not visible on cmd.exe
76918 inspect.styles = {
76919 'special': 'cyan',
76920 'number': 'yellow',
76921 'boolean': 'yellow',
76922 'undefined': 'grey',
76923 'null': 'bold',
76924 'string': 'green',
76925 'date': 'magenta',
76926 // "name": intentionally not styling
76927 'regexp': 'red'
76928 };
76929
76930
76931 function stylizeWithColor(str, styleType) {
76932 var style = inspect.styles[styleType];
76933
76934 if (style) {
76935 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
76936 '\u001b[' + inspect.colors[style][1] + 'm';
76937 } else {
76938 return str;
76939 }
76940 }
76941
76942
76943 function stylizeNoColor(str, styleType) {
76944 return str;
76945 }
76946
76947
76948 function arrayToHash(array) {
76949 var hash = {};
76950
76951 array.forEach(function(val, idx) {
76952 hash[val] = true;
76953 });
76954
76955 return hash;
76956 }
76957
76958
76959 function formatValue(ctx, value, recurseTimes) {
76960 // Provide a hook for user-specified inspect functions.
76961 // Check that value is an object with an inspect function on it
76962 if (ctx.customInspect &&
76963 value &&
76964 isFunction(value.inspect) &&
76965 // Filter out the util module, it's inspect function is special
76966 value.inspect !== exports.inspect &&
76967 // Also filter out any prototype objects using the circular check.
76968 !(value.constructor && value.constructor.prototype === value)) {
76969 var ret = value.inspect(recurseTimes, ctx);
76970 if (!isString(ret)) {
76971 ret = formatValue(ctx, ret, recurseTimes);
76972 }
76973 return ret;
76974 }
76975
76976 // Primitive types cannot have properties
76977 var primitive = formatPrimitive(ctx, value);
76978 if (primitive) {
76979 return primitive;
76980 }
76981
76982 // Look up the keys of the object.
76983 var keys = Object.keys(value);
76984 var visibleKeys = arrayToHash(keys);
76985
76986 if (ctx.showHidden) {
76987 keys = Object.getOwnPropertyNames(value);
76988 }
76989
76990 // IE doesn't make error fields non-enumerable
76991 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
76992 if (isError(value)
76993 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
76994 return formatError(value);
76995 }
76996
76997 // Some type of object without properties can be shortcutted.
76998 if (keys.length === 0) {
76999 if (isFunction(value)) {
77000 var name = value.name ? ': ' + value.name : '';
77001 return ctx.stylize('[Function' + name + ']', 'special');
77002 }
77003 if (isRegExp(value)) {
77004 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
77005 }
77006 if (isDate(value)) {
77007 return ctx.stylize(Date.prototype.toString.call(value), 'date');
77008 }
77009 if (isError(value)) {
77010 return formatError(value);
77011 }
77012 }
77013
77014 var base = '', array = false, braces = ['{', '}'];
77015
77016 // Make Array say that they are Array
77017 if (isArray(value)) {
77018 array = true;
77019 braces = ['[', ']'];
77020 }
77021
77022 // Make functions say that they are functions
77023 if (isFunction(value)) {
77024 var n = value.name ? ': ' + value.name : '';
77025 base = ' [Function' + n + ']';
77026 }
77027
77028 // Make RegExps say that they are RegExps
77029 if (isRegExp(value)) {
77030 base = ' ' + RegExp.prototype.toString.call(value);
77031 }
77032
77033 // Make dates with properties first say the date
77034 if (isDate(value)) {
77035 base = ' ' + Date.prototype.toUTCString.call(value);
77036 }
77037
77038 // Make error with message first say the error
77039 if (isError(value)) {
77040 base = ' ' + formatError(value);
77041 }
77042
77043 if (keys.length === 0 && (!array || value.length == 0)) {
77044 return braces[0] + base + braces[1];
77045 }
77046
77047 if (recurseTimes < 0) {
77048 if (isRegExp(value)) {
77049 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
77050 } else {
77051 return ctx.stylize('[Object]', 'special');
77052 }
77053 }
77054
77055 ctx.seen.push(value);
77056
77057 var output;
77058 if (array) {
77059 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
77060 } else {
77061 output = keys.map(function(key) {
77062 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
77063 });
77064 }
77065
77066 ctx.seen.pop();
77067
77068 return reduceToSingleString(output, base, braces);
77069 }
77070
77071
77072 function formatPrimitive(ctx, value) {
77073 if (isUndefined(value))
77074 return ctx.stylize('undefined', 'undefined');
77075 if (isString(value)) {
77076 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
77077 .replace(/'/g, "\\'")
77078 .replace(/\\"/g, '"') + '\'';
77079 return ctx.stylize(simple, 'string');
77080 }
77081 if (isNumber(value))
77082 return ctx.stylize('' + value, 'number');
77083 if (isBoolean(value))
77084 return ctx.stylize('' + value, 'boolean');
77085 // For some reason typeof null is "object", so special case here.
77086 if (isNull(value))
77087 return ctx.stylize('null', 'null');
77088 }
77089
77090
77091 function formatError(value) {
77092 return '[' + Error.prototype.toString.call(value) + ']';
77093 }
77094
77095
77096 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
77097 var output = [];
77098 for (var i = 0, l = value.length; i < l; ++i) {
77099 if (hasOwnProperty(value, String(i))) {
77100 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
77101 String(i), true));
77102 } else {
77103 output.push('');
77104 }
77105 }
77106 keys.forEach(function(key) {
77107 if (!key.match(/^\d+$/)) {
77108 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
77109 key, true));
77110 }
77111 });
77112 return output;
77113 }
77114
77115
77116 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
77117 var name, str, desc;
77118 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
77119 if (desc.get) {
77120 if (desc.set) {
77121 str = ctx.stylize('[Getter/Setter]', 'special');
77122 } else {
77123 str = ctx.stylize('[Getter]', 'special');
77124 }
77125 } else {
77126 if (desc.set) {
77127 str = ctx.stylize('[Setter]', 'special');
77128 }
77129 }
77130 if (!hasOwnProperty(visibleKeys, key)) {
77131 name = '[' + key + ']';
77132 }
77133 if (!str) {
77134 if (ctx.seen.indexOf(desc.value) < 0) {
77135 if (isNull(recurseTimes)) {
77136 str = formatValue(ctx, desc.value, null);
77137 } else {
77138 str = formatValue(ctx, desc.value, recurseTimes - 1);
77139 }
77140 if (str.indexOf('\n') > -1) {
77141 if (array) {
77142 str = str.split('\n').map(function(line) {
77143 return ' ' + line;
77144 }).join('\n').substr(2);
77145 } else {
77146 str = '\n' + str.split('\n').map(function(line) {
77147 return ' ' + line;
77148 }).join('\n');
77149 }
77150 }
77151 } else {
77152 str = ctx.stylize('[Circular]', 'special');
77153 }
77154 }
77155 if (isUndefined(name)) {
77156 if (array && key.match(/^\d+$/)) {
77157 return str;
77158 }
77159 name = JSON.stringify('' + key);
77160 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
77161 name = name.substr(1, name.length - 2);
77162 name = ctx.stylize(name, 'name');
77163 } else {
77164 name = name.replace(/'/g, "\\'")
77165 .replace(/\\"/g, '"')
77166 .replace(/(^"|"$)/g, "'");
77167 name = ctx.stylize(name, 'string');
77168 }
77169 }
77170
77171 return name + ': ' + str;
77172 }
77173
77174
77175 function reduceToSingleString(output, base, braces) {
77176 var numLinesEst = 0;
77177 var length = output.reduce(function(prev, cur) {
77178 numLinesEst++;
77179 if (cur.indexOf('\n') >= 0) numLinesEst++;
77180 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
77181 }, 0);
77182
77183 if (length > 60) {
77184 return braces[0] +
77185 (base === '' ? '' : base + '\n ') +
77186 ' ' +
77187 output.join(',\n ') +
77188 ' ' +
77189 braces[1];
77190 }
77191
77192 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
77193 }
77194
77195
77196 // NOTE: These type checking functions intentionally don't use `instanceof`
77197 // because it is fragile and can be easily faked with `Object.create()`.
77198 function isArray(ar) {
77199 return Array.isArray(ar);
77200 }
77201 exports.isArray = isArray;
77202
77203 function isBoolean(arg) {
77204 return typeof arg === 'boolean';
77205 }
77206 exports.isBoolean = isBoolean;
77207
77208 function isNull(arg) {
77209 return arg === null;
77210 }
77211 exports.isNull = isNull;
77212
77213 function isNullOrUndefined(arg) {
77214 return arg == null;
77215 }
77216 exports.isNullOrUndefined = isNullOrUndefined;
77217
77218 function isNumber(arg) {
77219 return typeof arg === 'number';
77220 }
77221 exports.isNumber = isNumber;
77222
77223 function isString(arg) {
77224 return typeof arg === 'string';
77225 }
77226 exports.isString = isString;
77227
77228 function isSymbol(arg) {
77229 return typeof arg === 'symbol';
77230 }
77231 exports.isSymbol = isSymbol;
77232
77233 function isUndefined(arg) {
77234 return arg === void 0;
77235 }
77236 exports.isUndefined = isUndefined;
77237
77238 function isRegExp(re) {
77239 return isObject(re) && objectToString(re) === '[object RegExp]';
77240 }
77241 exports.isRegExp = isRegExp;
77242
77243 function isObject(arg) {
77244 return typeof arg === 'object' && arg !== null;
77245 }
77246 exports.isObject = isObject;
77247
77248 function isDate(d) {
77249 return isObject(d) && objectToString(d) === '[object Date]';
77250 }
77251 exports.isDate = isDate;
77252
77253 function isError(e) {
77254 return isObject(e) &&
77255 (objectToString(e) === '[object Error]' || e instanceof Error);
77256 }
77257 exports.isError = isError;
77258
77259 function isFunction(arg) {
77260 return typeof arg === 'function';
77261 }
77262 exports.isFunction = isFunction;
77263
77264 function isPrimitive(arg) {
77265 return arg === null ||
77266 typeof arg === 'boolean' ||
77267 typeof arg === 'number' ||
77268 typeof arg === 'string' ||
77269 typeof arg === 'symbol' || // ES6 symbol
77270 typeof arg === 'undefined';
77271 }
77272 exports.isPrimitive = isPrimitive;
77273
77274 exports.isBuffer = require('./support/isBuffer');
77275
77276 function objectToString(o) {
77277 return Object.prototype.toString.call(o);
77278 }
77279
77280
77281 function pad(n) {
77282 return n < 10 ? '0' + n.toString(10) : n.toString(10);
77283 }
77284
77285
77286 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
77287 'Oct', 'Nov', 'Dec'];
77288
77289 // 26 Feb 16:19:34
77290 function timestamp() {
77291 var d = new Date();
77292 var time = [pad(d.getHours()),
77293 pad(d.getMinutes()),
77294 pad(d.getSeconds())].join(':');
77295 return [d.getDate(), months[d.getMonth()], time].join(' ');
77296 }
77297
77298
77299 // log is just a thin wrapper to console.log that prepends a timestamp
77300 exports.log = function() {
77301 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
77302 };
77303
77304
77305 /**
77306 * Inherit the prototype methods from one constructor into another.
77307 *
77308 * The Function.prototype.inherits from lang.js rewritten as a standalone
77309 * function (not on Function.prototype). NOTE: If this file is to be loaded
77310 * during bootstrapping this function needs to be rewritten using some native
77311 * functions as prototype setup using normal JavaScript does not work as
77312 * expected during bootstrapping (see mirror.js in r114903).
77313 *
77314 * @param {function} ctor Constructor function which needs to inherit the
77315 * prototype.
77316 * @param {function} superCtor Constructor function to inherit prototype from.
77317 */
77318 exports.inherits = require('inherits');
77319
77320 exports._extend = function(origin, add) {
77321 // Don't do anything if add isn't an object
77322 if (!add || !isObject(add)) return origin;
77323
77324 var keys = Object.keys(add);
77325 var i = keys.length;
77326 while (i--) {
77327 origin[keys[i]] = add[keys[i]];
77328 }
77329 return origin;
77330 };
77331
77332 function hasOwnProperty(obj, prop) {
77333 return Object.prototype.hasOwnProperty.call(obj, prop);
77334 }
77335
77336 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
77337 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
77338 (function (Buffer){
77339 const createKeccakHash = require('keccak')
77340 const secp256k1 = require('secp256k1')
77341 const assert = require('assert')
77342 const rlp = require('rlp')
77343 const BN = require('bn.js')
77344 const createHash = require('create-hash')
77345 Object.assign(exports, require('ethjs-util'))
77346
77347 /**
77348 * the max integer that this VM can handle (a ```BN```)
77349 * @var {BN} MAX_INTEGER
77350 */
77351 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
77352
77353 /**
77354 * 2^256 (a ```BN```)
77355 * @var {BN} TWO_POW256
77356 */
77357 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
77358
77359 /**
77360 * SHA3-256 hash of null (a ```String```)
77361 * @var {String} SHA3_NULL_S
77362 */
77363 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
77364
77365 /**
77366 * SHA3-256 hash of null (a ```Buffer```)
77367 * @var {Buffer} SHA3_NULL
77368 */
77369 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
77370
77371 /**
77372 * SHA3-256 of an RLP of an empty array (a ```String```)
77373 * @var {String} SHA3_RLP_ARRAY_S
77374 */
77375 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
77376
77377 /**
77378 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
77379 * @var {Buffer} SHA3_RLP_ARRAY
77380 */
77381 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
77382
77383 /**
77384 * SHA3-256 hash of the RLP of null (a ```String```)
77385 * @var {String} SHA3_RLP_S
77386 */
77387 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
77388
77389 /**
77390 * SHA3-256 hash of the RLP of null (a ```Buffer```)
77391 * @var {Buffer} SHA3_RLP
77392 */
77393 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
77394
77395 /**
77396 * [`BN`](https://github.com/indutny/bn.js)
77397 * @var {Function}
77398 */
77399 exports.BN = BN
77400
77401 /**
77402 * [`rlp`](https://github.com/ethereumjs/rlp)
77403 * @var {Function}
77404 */
77405 exports.rlp = rlp
77406
77407 /**
77408 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
77409 * @var {Object}
77410 */
77411 exports.secp256k1 = secp256k1
77412
77413 /**
77414 * Returns a buffer filled with 0s
77415 * @method zeros
77416 * @param {Number} bytes the number of bytes the buffer should be
77417 * @return {Buffer}
77418 */
77419 exports.zeros = function (bytes) {
77420 return Buffer.allocUnsafe(bytes).fill(0)
77421 }
77422
77423 /**
77424 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
77425 * Or it truncates the beginning if it exceeds.
77426 * @method lsetLength
77427 * @param {Buffer|Array} msg the value to pad
77428 * @param {Number} length the number of bytes the output should be
77429 * @param {Boolean} [right=false] whether to start padding form the left or right
77430 * @return {Buffer|Array}
77431 */
77432 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
77433 var buf = exports.zeros(length)
77434 msg = exports.toBuffer(msg)
77435 if (right) {
77436 if (msg.length < length) {
77437 msg.copy(buf)
77438 return buf
77439 }
77440 return msg.slice(0, length)
77441 } else {
77442 if (msg.length < length) {
77443 msg.copy(buf, length - msg.length)
77444 return buf
77445 }
77446 return msg.slice(-length)
77447 }
77448 }
77449
77450 /**
77451 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
77452 * Or it truncates the beginning if it exceeds.
77453 * @param {Buffer|Array} msg the value to pad
77454 * @param {Number} length the number of bytes the output should be
77455 * @return {Buffer|Array}
77456 */
77457 exports.setLengthRight = function (msg, length) {
77458 return exports.setLength(msg, length, true)
77459 }
77460
77461 /**
77462 * Trims leading zeros from a `Buffer` or an `Array`
77463 * @param {Buffer|Array|String} a
77464 * @return {Buffer|Array|String}
77465 */
77466 exports.unpad = exports.stripZeros = function (a) {
77467 a = exports.stripHexPrefix(a)
77468 var first = a[0]
77469 while (a.length > 0 && first.toString() === '0') {
77470 a = a.slice(1)
77471 first = a[0]
77472 }
77473 return a
77474 }
77475 /**
77476 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
77477 * @param {*} v the value
77478 */
77479 exports.toBuffer = function (v) {
77480 if (!Buffer.isBuffer(v)) {
77481 if (Array.isArray(v)) {
77482 v = Buffer.from(v)
77483 } else if (typeof v === 'string') {
77484 if (exports.isHexPrefixed(v)) {
77485 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
77486 } else {
77487 v = Buffer.from(v)
77488 }
77489 } else if (typeof v === 'number') {
77490 v = exports.intToBuffer(v)
77491 } else if (v === null || v === undefined) {
77492 v = Buffer.allocUnsafe(0)
77493 } else if (v.toArray) {
77494 // converts a BN to a Buffer
77495 v = Buffer.from(v.toArray())
77496 } else {
77497 throw new Error('invalid type')
77498 }
77499 }
77500 return v
77501 }
77502
77503 /**
77504 * Converts a `Buffer` to a `Number`
77505 * @param {Buffer} buf
77506 * @return {Number}
77507 * @throws If the input number exceeds 53 bits.
77508 */
77509 exports.bufferToInt = function (buf) {
77510 return new BN(exports.toBuffer(buf)).toNumber()
77511 }
77512
77513 /**
77514 * Converts a `Buffer` into a hex `String`
77515 * @param {Buffer} buf
77516 * @return {String}
77517 */
77518 exports.bufferToHex = function (buf) {
77519 buf = exports.toBuffer(buf)
77520 return '0x' + buf.toString('hex')
77521 }
77522
77523 /**
77524 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
77525 * @param {Buffer} num
77526 * @return {BN}
77527 */
77528 exports.fromSigned = function (num) {
77529 return new BN(num).fromTwos(256)
77530 }
77531
77532 /**
77533 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
77534 * @param {BN} num
77535 * @return {Buffer}
77536 */
77537 exports.toUnsigned = function (num) {
77538 return Buffer.from(num.toTwos(256).toArray())
77539 }
77540
77541 /**
77542 * Creates SHA-3 hash of the input
77543 * @param {Buffer|Array|String|Number} a the input data
77544 * @param {Number} [bits=256] the SHA width
77545 * @return {Buffer}
77546 */
77547 exports.sha3 = function (a, bits) {
77548 a = exports.toBuffer(a)
77549 if (!bits) bits = 256
77550
77551 return createKeccakHash('keccak' + bits).update(a).digest()
77552 }
77553
77554 /**
77555 * Creates SHA256 hash of the input
77556 * @param {Buffer|Array|String|Number} a the input data
77557 * @return {Buffer}
77558 */
77559 exports.sha256 = function (a) {
77560 a = exports.toBuffer(a)
77561 return createHash('sha256').update(a).digest()
77562 }
77563
77564 /**
77565 * Creates RIPEMD160 hash of the input
77566 * @param {Buffer|Array|String|Number} a the input data
77567 * @param {Boolean} padded whether it should be padded to 256 bits or not
77568 * @return {Buffer}
77569 */
77570 exports.ripemd160 = function (a, padded) {
77571 a = exports.toBuffer(a)
77572 var hash = createHash('rmd160').update(a).digest()
77573 if (padded === true) {
77574 return exports.setLength(hash, 32)
77575 } else {
77576 return hash
77577 }
77578 }
77579
77580 /**
77581 * Creates SHA-3 hash of the RLP encoded version of the input
77582 * @param {Buffer|Array|String|Number} a the input data
77583 * @return {Buffer}
77584 */
77585 exports.rlphash = function (a) {
77586 return exports.sha3(rlp.encode(a))
77587 }
77588
77589 /**
77590 * Checks if the private key satisfies the rules of the curve secp256k1.
77591 * @param {Buffer} privateKey
77592 * @return {Boolean}
77593 */
77594 exports.isValidPrivate = function (privateKey) {
77595 return secp256k1.privateKeyVerify(privateKey)
77596 }
77597
77598 /**
77599 * Checks if the public key satisfies the rules of the curve secp256k1
77600 * and the requirements of Ethereum.
77601 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
77602 * @param {Boolean} [sanitize=false] Accept public keys in other formats
77603 * @return {Boolean}
77604 */
77605 exports.isValidPublic = function (publicKey, sanitize) {
77606 if (publicKey.length === 64) {
77607 // Convert to SEC1 for secp256k1
77608 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
77609 }
77610
77611 if (!sanitize) {
77612 return false
77613 }
77614
77615 return secp256k1.publicKeyVerify(publicKey)
77616 }
77617
77618 /**
77619 * Returns the ethereum address of a given public key.
77620 * Accepts "Ethereum public keys" and SEC1 encoded keys.
77621 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
77622 * @param {Boolean} [sanitize=false] Accept public keys in other formats
77623 * @return {Buffer}
77624 */
77625 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
77626 pubKey = exports.toBuffer(pubKey)
77627 if (sanitize && (pubKey.length !== 64)) {
77628 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
77629 }
77630 assert(pubKey.length === 64)
77631 // Only take the lower 160bits of the hash
77632 return exports.sha3(pubKey).slice(-20)
77633 }
77634
77635 /**
77636 * Returns the ethereum public key of a given private key
77637 * @param {Buffer} privateKey A private key must be 256 bits wide
77638 * @return {Buffer}
77639 */
77640 var privateToPublic = exports.privateToPublic = function (privateKey) {
77641 privateKey = exports.toBuffer(privateKey)
77642 // skip the type flag and use the X, Y points
77643 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
77644 }
77645
77646 /**
77647 * Converts a public key to the Ethereum format.
77648 * @param {Buffer} publicKey
77649 * @return {Buffer}
77650 */
77651 exports.importPublic = function (publicKey) {
77652 publicKey = exports.toBuffer(publicKey)
77653 if (publicKey.length !== 64) {
77654 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
77655 }
77656 return publicKey
77657 }
77658
77659 /**
77660 * ECDSA sign
77661 * @param {Buffer} msgHash
77662 * @param {Buffer} privateKey
77663 * @return {Object}
77664 */
77665 exports.ecsign = function (msgHash, privateKey) {
77666 var sig = secp256k1.sign(msgHash, privateKey)
77667
77668 var ret = {}
77669 ret.r = sig.signature.slice(0, 32)
77670 ret.s = sig.signature.slice(32, 64)
77671 ret.v = sig.recovery + 27
77672 return ret
77673 }
77674
77675 /**
77676 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
77677 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
77678 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
77679 * used to produce the signature.
77680 * @param message
77681 * @returns {Buffer} hash
77682 */
77683 exports.hashPersonalMessage = function (message) {
77684 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
77685 return exports.sha3(Buffer.concat([prefix, message]))
77686 }
77687
77688 /**
77689 * ECDSA public key recovery from signature
77690 * @param {Buffer} msgHash
77691 * @param {Number} v
77692 * @param {Buffer} r
77693 * @param {Buffer} s
77694 * @return {Buffer} publicKey
77695 */
77696 exports.ecrecover = function (msgHash, v, r, s) {
77697 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
77698 var recovery = v - 27
77699 if (recovery !== 0 && recovery !== 1) {
77700 throw new Error('Invalid signature v value')
77701 }
77702 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
77703 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
77704 }
77705
77706 /**
77707 * Convert signature parameters into the format of `eth_sign` RPC method
77708 * @param {Number} v
77709 * @param {Buffer} r
77710 * @param {Buffer} s
77711 * @return {String} sig
77712 */
77713 exports.toRpcSig = function (v, r, s) {
77714 // NOTE: with potential introduction of chainId this might need to be updated
77715 if (v !== 27 && v !== 28) {
77716 throw new Error('Invalid recovery id')
77717 }
77718
77719 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
77720 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
77721 return exports.bufferToHex(Buffer.concat([
77722 exports.setLengthLeft(r, 32),
77723 exports.setLengthLeft(s, 32),
77724 exports.toBuffer(v - 27)
77725 ]))
77726 }
77727
77728 /**
77729 * Convert signature format of the `eth_sign` RPC method to signature parameters
77730 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
77731 * @param {String} sig
77732 * @return {Object}
77733 */
77734 exports.fromRpcSig = function (sig) {
77735 sig = exports.toBuffer(sig)
77736
77737 // NOTE: with potential introduction of chainId this might need to be updated
77738 if (sig.length !== 65) {
77739 throw new Error('Invalid signature length')
77740 }
77741
77742 var v = sig[64]
77743 // support both versions of `eth_sign` responses
77744 if (v < 27) {
77745 v += 27
77746 }
77747
77748 return {
77749 v: v,
77750 r: sig.slice(0, 32),
77751 s: sig.slice(32, 64)
77752 }
77753 }
77754
77755 /**
77756 * Returns the ethereum address of a given private key
77757 * @param {Buffer} privateKey A private key must be 256 bits wide
77758 * @return {Buffer}
77759 */
77760 exports.privateToAddress = function (privateKey) {
77761 return exports.publicToAddress(privateToPublic(privateKey))
77762 }
77763
77764 /**
77765 * Checks if the address is a valid. Accepts checksummed addresses too
77766 * @param {String} address
77767 * @return {Boolean}
77768 */
77769 exports.isValidAddress = function (address) {
77770 return /^0x[0-9a-fA-F]{40}$/i.test(address)
77771 }
77772
77773 /**
77774 * Returns a checksummed address
77775 * @param {String} address
77776 * @return {String}
77777 */
77778 exports.toChecksumAddress = function (address) {
77779 address = exports.stripHexPrefix(address).toLowerCase()
77780 var hash = exports.sha3(address).toString('hex')
77781 var ret = '0x'
77782
77783 for (var i = 0; i < address.length; i++) {
77784 if (parseInt(hash[i], 16) >= 8) {
77785 ret += address[i].toUpperCase()
77786 } else {
77787 ret += address[i]
77788 }
77789 }
77790
77791 return ret
77792 }
77793
77794 /**
77795 * Checks if the address is a valid checksummed address
77796 * @param {Buffer} address
77797 * @return {Boolean}
77798 */
77799 exports.isValidChecksumAddress = function (address) {
77800 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
77801 }
77802
77803 /**
77804 * Generates an address of a newly created contract
77805 * @param {Buffer} from the address which is creating this new address
77806 * @param {Buffer} nonce the nonce of the from account
77807 * @return {Buffer}
77808 */
77809 exports.generateAddress = function (from, nonce) {
77810 from = exports.toBuffer(from)
77811 nonce = new BN(nonce)
77812
77813 if (nonce.isZero()) {
77814 // in RLP we want to encode null in the case of zero nonce
77815 // read the RLP documentation for an answer if you dare
77816 nonce = null
77817 } else {
77818 nonce = Buffer.from(nonce.toArray())
77819 }
77820
77821 // Only take the lower 160bits of the hash
77822 return exports.rlphash([from, nonce]).slice(-20)
77823 }
77824
77825 /**
77826 * Returns true if the supplied address belongs to a precompiled account
77827 * @param {Buffer|String} address
77828 * @return {Boolean}
77829 */
77830 exports.isPrecompiled = function (address) {
77831 var a = exports.unpad(address)
77832 return a.length === 1 && a[0] > 0 && a[0] < 5
77833 }
77834
77835 /**
77836 * Adds "0x" to a given `String` if it does not already start with "0x"
77837 * @param {String} str
77838 * @return {String}
77839 */
77840 exports.addHexPrefix = function (str) {
77841 if (typeof str !== 'string') {
77842 return str
77843 }
77844
77845 return exports.isHexPrefixed(str) ? str : '0x' + str
77846 }
77847
77848 /**
77849 * Validate ECDSA signature
77850 * @method isValidSignature
77851 * @param {Buffer} v
77852 * @param {Buffer} r
77853 * @param {Buffer} s
77854 * @param {Boolean} [homestead=true]
77855 * @return {Boolean}
77856 */
77857
77858 exports.isValidSignature = function (v, r, s, homestead) {
77859 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
77860 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
77861
77862 if (r.length !== 32 || s.length !== 32) {
77863 return false
77864 }
77865
77866 if (v !== 27 && v !== 28) {
77867 return false
77868 }
77869
77870 r = new BN(r)
77871 s = new BN(s)
77872
77873 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
77874 return false
77875 }
77876
77877 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
77878 return false
77879 }
77880
77881 return true
77882 }
77883
77884 /**
77885 * Converts a `Buffer` or `Array` to JSON
77886 * @param {Buffer|Array} ba
77887 * @return {Array|String|null}
77888 */
77889 exports.baToJSON = function (ba) {
77890 if (Buffer.isBuffer(ba)) {
77891 return '0x' + ba.toString('hex')
77892 } else if (ba instanceof Array) {
77893 var array = []
77894 for (var i = 0; i < ba.length; i++) {
77895 array.push(exports.baToJSON(ba[i]))
77896 }
77897 return array
77898 }
77899 }
77900
77901 /**
77902 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
77903 * @param {Object} self the `Object` to define properties on
77904 * @param {Array} fields an array fields to define. Fields can contain:
77905 * * `name` - the name of the properties
77906 * * `length` - the number of bytes the field can have
77907 * * `allowLess` - if the field can be less than the length
77908 * * `allowEmpty`
77909 * @param {*} data data to be validated against the definitions
77910 */
77911 exports.defineProperties = function (self, fields, data) {
77912 self.raw = []
77913 self._fields = []
77914
77915 // attach the `toJSON`
77916 self.toJSON = function (label) {
77917 if (label) {
77918 var obj = {}
77919 self._fields.forEach(function (field) {
77920 obj[field] = '0x' + self[field].toString('hex')
77921 })
77922 return obj
77923 }
77924 return exports.baToJSON(this.raw)
77925 }
77926
77927 self.serialize = function serialize () {
77928 return rlp.encode(self.raw)
77929 }
77930
77931 fields.forEach(function (field, i) {
77932 self._fields.push(field.name)
77933 function getter () {
77934 return self.raw[i]
77935 }
77936 function setter (v) {
77937 v = exports.toBuffer(v)
77938
77939 if (v.toString('hex') === '00' && !field.allowZero) {
77940 v = Buffer.allocUnsafe(0)
77941 }
77942
77943 if (field.allowLess && field.length) {
77944 v = exports.stripZeros(v)
77945 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
77946 } else if (!(field.allowZero && v.length === 0) && field.length) {
77947 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
77948 }
77949
77950 self.raw[i] = v
77951 }
77952
77953 Object.defineProperty(self, field.name, {
77954 enumerable: true,
77955 configurable: true,
77956 get: getter,
77957 set: setter
77958 })
77959
77960 if (field.default) {
77961 self[field.name] = field.default
77962 }
77963
77964 // attach alias
77965 if (field.alias) {
77966 Object.defineProperty(self, field.alias, {
77967 enumerable: false,
77968 configurable: true,
77969 set: setter,
77970 get: getter
77971 })
77972 }
77973 })
77974
77975 // if the constuctor is passed data
77976 if (data) {
77977 if (typeof data === 'string') {
77978 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
77979 }
77980
77981 if (Buffer.isBuffer(data)) {
77982 data = rlp.decode(data)
77983 }
77984
77985 if (Array.isArray(data)) {
77986 if (data.length > self._fields.length) {
77987 throw (new Error('wrong number of fields in data'))
77988 }
77989
77990 // make sure all the items are buffers
77991 data.forEach(function (d, i) {
77992 self[self._fields[i]] = exports.toBuffer(d)
77993 })
77994 } else if (typeof data === 'object') {
77995 const keys = Object.keys(data)
77996 fields.forEach(function (field) {
77997 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
77998 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
77999 })
78000 } else {
78001 throw new Error('invalid data')
78002 }
78003 }
78004 }
78005
78006 }).call(this,require("buffer").Buffer)
78007 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
78008 (function (Buffer){
78009 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
78010 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
78011 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
78012
78013 function check (buffer) {
78014 if (buffer.length < 8) return false
78015 if (buffer.length > 72) return false
78016 if (buffer[0] !== 0x30) return false
78017 if (buffer[1] !== buffer.length - 2) return false
78018 if (buffer[2] !== 0x02) return false
78019
78020 var lenR = buffer[3]
78021 if (lenR === 0) return false
78022 if (5 + lenR >= buffer.length) return false
78023 if (buffer[4 + lenR] !== 0x02) return false
78024
78025 var lenS = buffer[5 + lenR]
78026 if (lenS === 0) return false
78027 if ((6 + lenR + lenS) !== buffer.length) return false
78028
78029 if (buffer[4] & 0x80) return false
78030 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
78031
78032 if (buffer[lenR + 6] & 0x80) return false
78033 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
78034 return true
78035 }
78036
78037 function decode (buffer) {
78038 if (buffer.length < 8) throw new Error('DER sequence length is too short')
78039 if (buffer.length > 72) throw new Error('DER sequence length is too long')
78040 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
78041 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
78042 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
78043
78044 var lenR = buffer[3]
78045 if (lenR === 0) throw new Error('R length is zero')
78046 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
78047 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
78048
78049 var lenS = buffer[5 + lenR]
78050 if (lenS === 0) throw new Error('S length is zero')
78051 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
78052
78053 if (buffer[4] & 0x80) throw new Error('R value is negative')
78054 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
78055
78056 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
78057 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
78058
78059 // non-BIP66 - extract R, S values
78060 return {
78061 r: buffer.slice(4, 4 + lenR),
78062 s: buffer.slice(6 + lenR)
78063 }
78064 }
78065
78066 /*
78067 * Expects r and s to be positive DER integers.
78068 *
78069 * The DER format uses the most significant bit as a sign bit (& 0x80).
78070 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
78071 *
78072 * Examples:
78073 *
78074 * 0 => 0x00
78075 * 1 => 0x01
78076 * -1 => 0xff
78077 * 127 => 0x7f
78078 * -127 => 0x81
78079 * 128 => 0x0080
78080 * -128 => 0x80
78081 * 255 => 0x00ff
78082 * -255 => 0xff01
78083 * 16300 => 0x3fac
78084 * -16300 => 0xc054
78085 * 62300 => 0x00f35c
78086 * -62300 => 0xff0ca4
78087 */
78088 function encode (r, s) {
78089 var lenR = r.length
78090 var lenS = s.length
78091 if (lenR === 0) throw new Error('R length is zero')
78092 if (lenS === 0) throw new Error('S length is zero')
78093 if (lenR > 33) throw new Error('R length is too long')
78094 if (lenS > 33) throw new Error('S length is too long')
78095 if (r[0] & 0x80) throw new Error('R value is negative')
78096 if (s[0] & 0x80) throw new Error('S value is negative')
78097 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
78098 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
78099
78100 var signature = new Buffer(6 + lenR + lenS)
78101
78102 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
78103 signature[0] = 0x30
78104 signature[1] = signature.length - 2
78105 signature[2] = 0x02
78106 signature[3] = r.length
78107 r.copy(signature, 4)
78108 signature[4 + lenR] = 0x02
78109 signature[5 + lenR] = s.length
78110 s.copy(signature, 6 + lenR)
78111
78112 return signature
78113 }
78114
78115 module.exports = {
78116 check: check,
78117 decode: decode,
78118 encode: encode
78119 }
78120
78121 }).call(this,require("buffer").Buffer)
78122 },{"buffer":5}],33:[function(require,module,exports){
78123 (function (module, exports) {
78124 'use strict';
78125
78126 // Utils
78127 function assert (val, msg) {
78128 if (!val) throw new Error(msg || 'Assertion failed');
78129 }
78130
78131 // Could use `inherits` module, but don't want to move from single file
78132 // architecture yet.
78133 function inherits (ctor, superCtor) {
78134 ctor.super_ = superCtor;
78135 var TempCtor = function () {};
78136 TempCtor.prototype = superCtor.prototype;
78137 ctor.prototype = new TempCtor();
78138 ctor.prototype.constructor = ctor;
78139 }
78140
78141 // BN
78142
78143 function BN (number, base, endian) {
78144 if (BN.isBN(number)) {
78145 return number;
78146 }
78147
78148 this.negative = 0;
78149 this.words = null;
78150 this.length = 0;
78151
78152 // Reduction context
78153 this.red = null;
78154
78155 if (number !== null) {
78156 if (base === 'le' || base === 'be') {
78157 endian = base;
78158 base = 10;
78159 }
78160
78161 this._init(number || 0, base || 10, endian || 'be');
78162 }
78163 }
78164 if (typeof module === 'object') {
78165 module.exports = BN;
78166 } else {
78167 exports.BN = BN;
78168 }
78169
78170 BN.BN = BN;
78171 BN.wordSize = 26;
78172
78173 var Buffer;
78174 try {
78175 Buffer = require('buf' + 'fer').Buffer;
78176 } catch (e) {
78177 }
78178
78179 BN.isBN = function isBN (num) {
78180 if (num instanceof BN) {
78181 return true;
78182 }
78183
78184 return num !== null && typeof num === 'object' &&
78185 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
78186 };
78187
78188 BN.max = function max (left, right) {
78189 if (left.cmp(right) > 0) return left;
78190 return right;
78191 };
78192
78193 BN.min = function min (left, right) {
78194 if (left.cmp(right) < 0) return left;
78195 return right;
78196 };
78197
78198 BN.prototype._init = function init (number, base, endian) {
78199 if (typeof number === 'number') {
78200 return this._initNumber(number, base, endian);
78201 }
78202
78203 if (typeof number === 'object') {
78204 return this._initArray(number, base, endian);
78205 }
78206
78207 if (base === 'hex') {
78208 base = 16;
78209 }
78210 assert(base === (base | 0) && base >= 2 && base <= 36);
78211
78212 number = number.toString().replace(/\s+/g, '');
78213 var start = 0;
78214 if (number[0] === '-') {
78215 start++;
78216 }
78217
78218 if (base === 16) {
78219 this._parseHex(number, start);
78220 } else {
78221 this._parseBase(number, base, start);
78222 }
78223
78224 if (number[0] === '-') {
78225 this.negative = 1;
78226 }
78227
78228 this.strip();
78229
78230 if (endian !== 'le') return;
78231
78232 this._initArray(this.toArray(), base, endian);
78233 };
78234
78235 BN.prototype._initNumber = function _initNumber (number, base, endian) {
78236 if (number < 0) {
78237 this.negative = 1;
78238 number = -number;
78239 }
78240 if (number < 0x4000000) {
78241 this.words = [ number & 0x3ffffff ];
78242 this.length = 1;
78243 } else if (number < 0x10000000000000) {
78244 this.words = [
78245 number & 0x3ffffff,
78246 (number / 0x4000000) & 0x3ffffff
78247 ];
78248 this.length = 2;
78249 } else {
78250 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
78251 this.words = [
78252 number & 0x3ffffff,
78253 (number / 0x4000000) & 0x3ffffff,
78254 1
78255 ];
78256 this.length = 3;
78257 }
78258
78259 if (endian !== 'le') return;
78260
78261 // Reverse the bytes
78262 this._initArray(this.toArray(), base, endian);
78263 };
78264
78265 BN.prototype._initArray = function _initArray (number, base, endian) {
78266 // Perhaps a Uint8Array
78267 assert(typeof number.length === 'number');
78268 if (number.length <= 0) {
78269 this.words = [ 0 ];
78270 this.length = 1;
78271 return this;
78272 }
78273
78274 this.length = Math.ceil(number.length / 3);
78275 this.words = new Array(this.length);
78276 for (var i = 0; i < this.length; i++) {
78277 this.words[i] = 0;
78278 }
78279
78280 var j, w;
78281 var off = 0;
78282 if (endian === 'be') {
78283 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
78284 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
78285 this.words[j] |= (w << off) & 0x3ffffff;
78286 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
78287 off += 24;
78288 if (off >= 26) {
78289 off -= 26;
78290 j++;
78291 }
78292 }
78293 } else if (endian === 'le') {
78294 for (i = 0, j = 0; i < number.length; i += 3) {
78295 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
78296 this.words[j] |= (w << off) & 0x3ffffff;
78297 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
78298 off += 24;
78299 if (off >= 26) {
78300 off -= 26;
78301 j++;
78302 }
78303 }
78304 }
78305 return this.strip();
78306 };
78307
78308 function parseHex (str, start, end) {
78309 var r = 0;
78310 var len = Math.min(str.length, end);
78311 for (var i = start; i < len; i++) {
78312 var c = str.charCodeAt(i) - 48;
78313
78314 r <<= 4;
78315
78316 // 'a' - 'f'
78317 if (c >= 49 && c <= 54) {
78318 r |= c - 49 + 0xa;
78319
78320 // 'A' - 'F'
78321 } else if (c >= 17 && c <= 22) {
78322 r |= c - 17 + 0xa;
78323
78324 // '0' - '9'
78325 } else {
78326 r |= c & 0xf;
78327 }
78328 }
78329 return r;
78330 }
78331
78332 BN.prototype._parseHex = function _parseHex (number, start) {
78333 // Create possibly bigger array to ensure that it fits the number
78334 this.length = Math.ceil((number.length - start) / 6);
78335 this.words = new Array(this.length);
78336 for (var i = 0; i < this.length; i++) {
78337 this.words[i] = 0;
78338 }
78339
78340 var j, w;
78341 // Scan 24-bit chunks and add them to the number
78342 var off = 0;
78343 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
78344 w = parseHex(number, i, i + 6);
78345 this.words[j] |= (w << off) & 0x3ffffff;
78346 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
78347 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
78348 off += 24;
78349 if (off >= 26) {
78350 off -= 26;
78351 j++;
78352 }
78353 }
78354 if (i + 6 !== start) {
78355 w = parseHex(number, start, i + 6);
78356 this.words[j] |= (w << off) & 0x3ffffff;
78357 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
78358 }
78359 this.strip();
78360 };
78361
78362 function parseBase (str, start, end, mul) {
78363 var r = 0;
78364 var len = Math.min(str.length, end);
78365 for (var i = start; i < len; i++) {
78366 var c = str.charCodeAt(i) - 48;
78367
78368 r *= mul;
78369
78370 // 'a'
78371 if (c >= 49) {
78372 r += c - 49 + 0xa;
78373
78374 // 'A'
78375 } else if (c >= 17) {
78376 r += c - 17 + 0xa;
78377
78378 // '0' - '9'
78379 } else {
78380 r += c;
78381 }
78382 }
78383 return r;
78384 }
78385
78386 BN.prototype._parseBase = function _parseBase (number, base, start) {
78387 // Initialize as zero
78388 this.words = [ 0 ];
78389 this.length = 1;
78390
78391 // Find length of limb in base
78392 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
78393 limbLen++;
78394 }
78395 limbLen--;
78396 limbPow = (limbPow / base) | 0;
78397
78398 var total = number.length - start;
78399 var mod = total % limbLen;
78400 var end = Math.min(total, total - mod) + start;
78401
78402 var word = 0;
78403 for (var i = start; i < end; i += limbLen) {
78404 word = parseBase(number, i, i + limbLen, base);
78405
78406 this.imuln(limbPow);
78407 if (this.words[0] + word < 0x4000000) {
78408 this.words[0] += word;
78409 } else {
78410 this._iaddn(word);
78411 }
78412 }
78413
78414 if (mod !== 0) {
78415 var pow = 1;
78416 word = parseBase(number, i, number.length, base);
78417
78418 for (i = 0; i < mod; i++) {
78419 pow *= base;
78420 }
78421
78422 this.imuln(pow);
78423 if (this.words[0] + word < 0x4000000) {
78424 this.words[0] += word;
78425 } else {
78426 this._iaddn(word);
78427 }
78428 }
78429 };
78430
78431 BN.prototype.copy = function copy (dest) {
78432 dest.words = new Array(this.length);
78433 for (var i = 0; i < this.length; i++) {
78434 dest.words[i] = this.words[i];
78435 }
78436 dest.length = this.length;
78437 dest.negative = this.negative;
78438 dest.red = this.red;
78439 };
78440
78441 BN.prototype.clone = function clone () {
78442 var r = new BN(null);
78443 this.copy(r);
78444 return r;
78445 };
78446
78447 BN.prototype._expand = function _expand (size) {
78448 while (this.length < size) {
78449 this.words[this.length++] = 0;
78450 }
78451 return this;
78452 };
78453
78454 // Remove leading `0` from `this`
78455 BN.prototype.strip = function strip () {
78456 while (this.length > 1 && this.words[this.length - 1] === 0) {
78457 this.length--;
78458 }
78459 return this._normSign();
78460 };
78461
78462 BN.prototype._normSign = function _normSign () {
78463 // -0 = 0
78464 if (this.length === 1 && this.words[0] === 0) {
78465 this.negative = 0;
78466 }
78467 return this;
78468 };
78469
78470 BN.prototype.inspect = function inspect () {
78471 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
78472 };
78473
78474 /*
78475
78476 var zeros = [];
78477 var groupSizes = [];
78478 var groupBases = [];
78479
78480 var s = '';
78481 var i = -1;
78482 while (++i < BN.wordSize) {
78483 zeros[i] = s;
78484 s += '0';
78485 }
78486 groupSizes[0] = 0;
78487 groupSizes[1] = 0;
78488 groupBases[0] = 0;
78489 groupBases[1] = 0;
78490 var base = 2 - 1;
78491 while (++base < 36 + 1) {
78492 var groupSize = 0;
78493 var groupBase = 1;
78494 while (groupBase < (1 << BN.wordSize) / base) {
78495 groupBase *= base;
78496 groupSize += 1;
78497 }
78498 groupSizes[base] = groupSize;
78499 groupBases[base] = groupBase;
78500 }
78501
78502 */
78503
78504 var zeros = [
78505 '',
78506 '0',
78507 '00',
78508 '000',
78509 '0000',
78510 '00000',
78511 '000000',
78512 '0000000',
78513 '00000000',
78514 '000000000',
78515 '0000000000',
78516 '00000000000',
78517 '000000000000',
78518 '0000000000000',
78519 '00000000000000',
78520 '000000000000000',
78521 '0000000000000000',
78522 '00000000000000000',
78523 '000000000000000000',
78524 '0000000000000000000',
78525 '00000000000000000000',
78526 '000000000000000000000',
78527 '0000000000000000000000',
78528 '00000000000000000000000',
78529 '000000000000000000000000',
78530 '0000000000000000000000000'
78531 ];
78532
78533 var groupSizes = [
78534 0, 0,
78535 25, 16, 12, 11, 10, 9, 8,
78536 8, 7, 7, 7, 7, 6, 6,
78537 6, 6, 6, 6, 6, 5, 5,
78538 5, 5, 5, 5, 5, 5, 5,
78539 5, 5, 5, 5, 5, 5, 5
78540 ];
78541
78542 var groupBases = [
78543 0, 0,
78544 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
78545 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
78546 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
78547 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
78548 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
78549 ];
78550
78551 BN.prototype.toString = function toString (base, padding) {
78552 base = base || 10;
78553 padding = padding | 0 || 1;
78554
78555 var out;
78556 if (base === 16 || base === 'hex') {
78557 out = '';
78558 var off = 0;
78559 var carry = 0;
78560 for (var i = 0; i < this.length; i++) {
78561 var w = this.words[i];
78562 var word = (((w << off) | carry) & 0xffffff).toString(16);
78563 carry = (w >>> (24 - off)) & 0xffffff;
78564 if (carry !== 0 || i !== this.length - 1) {
78565 out = zeros[6 - word.length] + word + out;
78566 } else {
78567 out = word + out;
78568 }
78569 off += 2;
78570 if (off >= 26) {
78571 off -= 26;
78572 i--;
78573 }
78574 }
78575 if (carry !== 0) {
78576 out = carry.toString(16) + out;
78577 }
78578 while (out.length % padding !== 0) {
78579 out = '0' + out;
78580 }
78581 if (this.negative !== 0) {
78582 out = '-' + out;
78583 }
78584 return out;
78585 }
78586
78587 if (base === (base | 0) && base >= 2 && base <= 36) {
78588 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
78589 var groupSize = groupSizes[base];
78590 // var groupBase = Math.pow(base, groupSize);
78591 var groupBase = groupBases[base];
78592 out = '';
78593 var c = this.clone();
78594 c.negative = 0;
78595 while (!c.isZero()) {
78596 var r = c.modn(groupBase).toString(base);
78597 c = c.idivn(groupBase);
78598
78599 if (!c.isZero()) {
78600 out = zeros[groupSize - r.length] + r + out;
78601 } else {
78602 out = r + out;
78603 }
78604 }
78605 if (this.isZero()) {
78606 out = '0' + out;
78607 }
78608 while (out.length % padding !== 0) {
78609 out = '0' + out;
78610 }
78611 if (this.negative !== 0) {
78612 out = '-' + out;
78613 }
78614 return out;
78615 }
78616
78617 assert(false, 'Base should be between 2 and 36');
78618 };
78619
78620 BN.prototype.toNumber = function toNumber () {
78621 var ret = this.words[0];
78622 if (this.length === 2) {
78623 ret += this.words[1] * 0x4000000;
78624 } else if (this.length === 3 && this.words[2] === 0x01) {
78625 // NOTE: at this stage it is known that the top bit is set
78626 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
78627 } else if (this.length > 2) {
78628 assert(false, 'Number can only safely store up to 53 bits');
78629 }
78630 return (this.negative !== 0) ? -ret : ret;
78631 };
78632
78633 BN.prototype.toJSON = function toJSON () {
78634 return this.toString(16);
78635 };
78636
78637 BN.prototype.toBuffer = function toBuffer (endian, length) {
78638 assert(typeof Buffer !== 'undefined');
78639 return this.toArrayLike(Buffer, endian, length);
78640 };
78641
78642 BN.prototype.toArray = function toArray (endian, length) {
78643 return this.toArrayLike(Array, endian, length);
78644 };
78645
78646 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
78647 var byteLength = this.byteLength();
78648 var reqLength = length || Math.max(1, byteLength);
78649 assert(byteLength <= reqLength, 'byte array longer than desired length');
78650 assert(reqLength > 0, 'Requested array length <= 0');
78651
78652 this.strip();
78653 var littleEndian = endian === 'le';
78654 var res = new ArrayType(reqLength);
78655
78656 var b, i;
78657 var q = this.clone();
78658 if (!littleEndian) {
78659 // Assume big-endian
78660 for (i = 0; i < reqLength - byteLength; i++) {
78661 res[i] = 0;
78662 }
78663
78664 for (i = 0; !q.isZero(); i++) {
78665 b = q.andln(0xff);
78666 q.iushrn(8);
78667
78668 res[reqLength - i - 1] = b;
78669 }
78670 } else {
78671 for (i = 0; !q.isZero(); i++) {
78672 b = q.andln(0xff);
78673 q.iushrn(8);
78674
78675 res[i] = b;
78676 }
78677
78678 for (; i < reqLength; i++) {
78679 res[i] = 0;
78680 }
78681 }
78682
78683 return res;
78684 };
78685
78686 if (Math.clz32) {
78687 BN.prototype._countBits = function _countBits (w) {
78688 return 32 - Math.clz32(w);
78689 };
78690 } else {
78691 BN.prototype._countBits = function _countBits (w) {
78692 var t = w;
78693 var r = 0;
78694 if (t >= 0x1000) {
78695 r += 13;
78696 t >>>= 13;
78697 }
78698 if (t >= 0x40) {
78699 r += 7;
78700 t >>>= 7;
78701 }
78702 if (t >= 0x8) {
78703 r += 4;
78704 t >>>= 4;
78705 }
78706 if (t >= 0x02) {
78707 r += 2;
78708 t >>>= 2;
78709 }
78710 return r + t;
78711 };
78712 }
78713
78714 BN.prototype._zeroBits = function _zeroBits (w) {
78715 // Short-cut
78716 if (w === 0) return 26;
78717
78718 var t = w;
78719 var r = 0;
78720 if ((t & 0x1fff) === 0) {
78721 r += 13;
78722 t >>>= 13;
78723 }
78724 if ((t & 0x7f) === 0) {
78725 r += 7;
78726 t >>>= 7;
78727 }
78728 if ((t & 0xf) === 0) {
78729 r += 4;
78730 t >>>= 4;
78731 }
78732 if ((t & 0x3) === 0) {
78733 r += 2;
78734 t >>>= 2;
78735 }
78736 if ((t & 0x1) === 0) {
78737 r++;
78738 }
78739 return r;
78740 };
78741
78742 // Return number of used bits in a BN
78743 BN.prototype.bitLength = function bitLength () {
78744 var w = this.words[this.length - 1];
78745 var hi = this._countBits(w);
78746 return (this.length - 1) * 26 + hi;
78747 };
78748
78749 function toBitArray (num) {
78750 var w = new Array(num.bitLength());
78751
78752 for (var bit = 0; bit < w.length; bit++) {
78753 var off = (bit / 26) | 0;
78754 var wbit = bit % 26;
78755
78756 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
78757 }
78758
78759 return w;
78760 }
78761
78762 // Number of trailing zero bits
78763 BN.prototype.zeroBits = function zeroBits () {
78764 if (this.isZero()) return 0;
78765
78766 var r = 0;
78767 for (var i = 0; i < this.length; i++) {
78768 var b = this._zeroBits(this.words[i]);
78769 r += b;
78770 if (b !== 26) break;
78771 }
78772 return r;
78773 };
78774
78775 BN.prototype.byteLength = function byteLength () {
78776 return Math.ceil(this.bitLength() / 8);
78777 };
78778
78779 BN.prototype.toTwos = function toTwos (width) {
78780 if (this.negative !== 0) {
78781 return this.abs().inotn(width).iaddn(1);
78782 }
78783 return this.clone();
78784 };
78785
78786 BN.prototype.fromTwos = function fromTwos (width) {
78787 if (this.testn(width - 1)) {
78788 return this.notn(width).iaddn(1).ineg();
78789 }
78790 return this.clone();
78791 };
78792
78793 BN.prototype.isNeg = function isNeg () {
78794 return this.negative !== 0;
78795 };
78796
78797 // Return negative clone of `this`
78798 BN.prototype.neg = function neg () {
78799 return this.clone().ineg();
78800 };
78801
78802 BN.prototype.ineg = function ineg () {
78803 if (!this.isZero()) {
78804 this.negative ^= 1;
78805 }
78806
78807 return this;
78808 };
78809
78810 // Or `num` with `this` in-place
78811 BN.prototype.iuor = function iuor (num) {
78812 while (this.length < num.length) {
78813 this.words[this.length++] = 0;
78814 }
78815
78816 for (var i = 0; i < num.length; i++) {
78817 this.words[i] = this.words[i] | num.words[i];
78818 }
78819
78820 return this.strip();
78821 };
78822
78823 BN.prototype.ior = function ior (num) {
78824 assert((this.negative | num.negative) === 0);
78825 return this.iuor(num);
78826 };
78827
78828 // Or `num` with `this`
78829 BN.prototype.or = function or (num) {
78830 if (this.length > num.length) return this.clone().ior(num);
78831 return num.clone().ior(this);
78832 };
78833
78834 BN.prototype.uor = function uor (num) {
78835 if (this.length > num.length) return this.clone().iuor(num);
78836 return num.clone().iuor(this);
78837 };
78838
78839 // And `num` with `this` in-place
78840 BN.prototype.iuand = function iuand (num) {
78841 // b = min-length(num, this)
78842 var b;
78843 if (this.length > num.length) {
78844 b = num;
78845 } else {
78846 b = this;
78847 }
78848
78849 for (var i = 0; i < b.length; i++) {
78850 this.words[i] = this.words[i] & num.words[i];
78851 }
78852
78853 this.length = b.length;
78854
78855 return this.strip();
78856 };
78857
78858 BN.prototype.iand = function iand (num) {
78859 assert((this.negative | num.negative) === 0);
78860 return this.iuand(num);
78861 };
78862
78863 // And `num` with `this`
78864 BN.prototype.and = function and (num) {
78865 if (this.length > num.length) return this.clone().iand(num);
78866 return num.clone().iand(this);
78867 };
78868
78869 BN.prototype.uand = function uand (num) {
78870 if (this.length > num.length) return this.clone().iuand(num);
78871 return num.clone().iuand(this);
78872 };
78873
78874 // Xor `num` with `this` in-place
78875 BN.prototype.iuxor = function iuxor (num) {
78876 // a.length > b.length
78877 var a;
78878 var b;
78879 if (this.length > num.length) {
78880 a = this;
78881 b = num;
78882 } else {
78883 a = num;
78884 b = this;
78885 }
78886
78887 for (var i = 0; i < b.length; i++) {
78888 this.words[i] = a.words[i] ^ b.words[i];
78889 }
78890
78891 if (this !== a) {
78892 for (; i < a.length; i++) {
78893 this.words[i] = a.words[i];
78894 }
78895 }
78896
78897 this.length = a.length;
78898
78899 return this.strip();
78900 };
78901
78902 BN.prototype.ixor = function ixor (num) {
78903 assert((this.negative | num.negative) === 0);
78904 return this.iuxor(num);
78905 };
78906
78907 // Xor `num` with `this`
78908 BN.prototype.xor = function xor (num) {
78909 if (this.length > num.length) return this.clone().ixor(num);
78910 return num.clone().ixor(this);
78911 };
78912
78913 BN.prototype.uxor = function uxor (num) {
78914 if (this.length > num.length) return this.clone().iuxor(num);
78915 return num.clone().iuxor(this);
78916 };
78917
78918 // Not ``this`` with ``width`` bitwidth
78919 BN.prototype.inotn = function inotn (width) {
78920 assert(typeof width === 'number' && width >= 0);
78921
78922 var bytesNeeded = Math.ceil(width / 26) | 0;
78923 var bitsLeft = width % 26;
78924
78925 // Extend the buffer with leading zeroes
78926 this._expand(bytesNeeded);
78927
78928 if (bitsLeft > 0) {
78929 bytesNeeded--;
78930 }
78931
78932 // Handle complete words
78933 for (var i = 0; i < bytesNeeded; i++) {
78934 this.words[i] = ~this.words[i] & 0x3ffffff;
78935 }
78936
78937 // Handle the residue
78938 if (bitsLeft > 0) {
78939 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
78940 }
78941
78942 // And remove leading zeroes
78943 return this.strip();
78944 };
78945
78946 BN.prototype.notn = function notn (width) {
78947 return this.clone().inotn(width);
78948 };
78949
78950 // Set `bit` of `this`
78951 BN.prototype.setn = function setn (bit, val) {
78952 assert(typeof bit === 'number' && bit >= 0);
78953
78954 var off = (bit / 26) | 0;
78955 var wbit = bit % 26;
78956
78957 this._expand(off + 1);
78958
78959 if (val) {
78960 this.words[off] = this.words[off] | (1 << wbit);
78961 } else {
78962 this.words[off] = this.words[off] & ~(1 << wbit);
78963 }
78964
78965 return this.strip();
78966 };
78967
78968 // Add `num` to `this` in-place
78969 BN.prototype.iadd = function iadd (num) {
78970 var r;
78971
78972 // negative + positive
78973 if (this.negative !== 0 && num.negative === 0) {
78974 this.negative = 0;
78975 r = this.isub(num);
78976 this.negative ^= 1;
78977 return this._normSign();
78978
78979 // positive + negative
78980 } else if (this.negative === 0 && num.negative !== 0) {
78981 num.negative = 0;
78982 r = this.isub(num);
78983 num.negative = 1;
78984 return r._normSign();
78985 }
78986
78987 // a.length > b.length
78988 var a, b;
78989 if (this.length > num.length) {
78990 a = this;
78991 b = num;
78992 } else {
78993 a = num;
78994 b = this;
78995 }
78996
78997 var carry = 0;
78998 for (var i = 0; i < b.length; i++) {
78999 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
79000 this.words[i] = r & 0x3ffffff;
79001 carry = r >>> 26;
79002 }
79003 for (; carry !== 0 && i < a.length; i++) {
79004 r = (a.words[i] | 0) + carry;
79005 this.words[i] = r & 0x3ffffff;
79006 carry = r >>> 26;
79007 }
79008
79009 this.length = a.length;
79010 if (carry !== 0) {
79011 this.words[this.length] = carry;
79012 this.length++;
79013 // Copy the rest of the words
79014 } else if (a !== this) {
79015 for (; i < a.length; i++) {
79016 this.words[i] = a.words[i];
79017 }
79018 }
79019
79020 return this;
79021 };
79022
79023 // Add `num` to `this`
79024 BN.prototype.add = function add (num) {
79025 var res;
79026 if (num.negative !== 0 && this.negative === 0) {
79027 num.negative = 0;
79028 res = this.sub(num);
79029 num.negative ^= 1;
79030 return res;
79031 } else if (num.negative === 0 && this.negative !== 0) {
79032 this.negative = 0;
79033 res = num.sub(this);
79034 this.negative = 1;
79035 return res;
79036 }
79037
79038 if (this.length > num.length) return this.clone().iadd(num);
79039
79040 return num.clone().iadd(this);
79041 };
79042
79043 // Subtract `num` from `this` in-place
79044 BN.prototype.isub = function isub (num) {
79045 // this - (-num) = this + num
79046 if (num.negative !== 0) {
79047 num.negative = 0;
79048 var r = this.iadd(num);
79049 num.negative = 1;
79050 return r._normSign();
79051
79052 // -this - num = -(this + num)
79053 } else if (this.negative !== 0) {
79054 this.negative = 0;
79055 this.iadd(num);
79056 this.negative = 1;
79057 return this._normSign();
79058 }
79059
79060 // At this point both numbers are positive
79061 var cmp = this.cmp(num);
79062
79063 // Optimization - zeroify
79064 if (cmp === 0) {
79065 this.negative = 0;
79066 this.length = 1;
79067 this.words[0] = 0;
79068 return this;
79069 }
79070
79071 // a > b
79072 var a, b;
79073 if (cmp > 0) {
79074 a = this;
79075 b = num;
79076 } else {
79077 a = num;
79078 b = this;
79079 }
79080
79081 var carry = 0;
79082 for (var i = 0; i < b.length; i++) {
79083 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
79084 carry = r >> 26;
79085 this.words[i] = r & 0x3ffffff;
79086 }
79087 for (; carry !== 0 && i < a.length; i++) {
79088 r = (a.words[i] | 0) + carry;
79089 carry = r >> 26;
79090 this.words[i] = r & 0x3ffffff;
79091 }
79092
79093 // Copy rest of the words
79094 if (carry === 0 && i < a.length && a !== this) {
79095 for (; i < a.length; i++) {
79096 this.words[i] = a.words[i];
79097 }
79098 }
79099
79100 this.length = Math.max(this.length, i);
79101
79102 if (a !== this) {
79103 this.negative = 1;
79104 }
79105
79106 return this.strip();
79107 };
79108
79109 // Subtract `num` from `this`
79110 BN.prototype.sub = function sub (num) {
79111 return this.clone().isub(num);
79112 };
79113
79114 function smallMulTo (self, num, out) {
79115 out.negative = num.negative ^ self.negative;
79116 var len = (self.length + num.length) | 0;
79117 out.length = len;
79118 len = (len - 1) | 0;
79119
79120 // Peel one iteration (compiler can't do it, because of code complexity)
79121 var a = self.words[0] | 0;
79122 var b = num.words[0] | 0;
79123 var r = a * b;
79124
79125 var lo = r & 0x3ffffff;
79126 var carry = (r / 0x4000000) | 0;
79127 out.words[0] = lo;
79128
79129 for (var k = 1; k < len; k++) {
79130 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
79131 // note that ncarry could be >= 0x3ffffff
79132 var ncarry = carry >>> 26;
79133 var rword = carry & 0x3ffffff;
79134 var maxJ = Math.min(k, num.length - 1);
79135 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
79136 var i = (k - j) | 0;
79137 a = self.words[i] | 0;
79138 b = num.words[j] | 0;
79139 r = a * b + rword;
79140 ncarry += (r / 0x4000000) | 0;
79141 rword = r & 0x3ffffff;
79142 }
79143 out.words[k] = rword | 0;
79144 carry = ncarry | 0;
79145 }
79146 if (carry !== 0) {
79147 out.words[k] = carry | 0;
79148 } else {
79149 out.length--;
79150 }
79151
79152 return out.strip();
79153 }
79154
79155 // TODO(indutny): it may be reasonable to omit it for users who don't need
79156 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
79157 // multiplication (like elliptic secp256k1).
79158 var comb10MulTo = function comb10MulTo (self, num, out) {
79159 var a = self.words;
79160 var b = num.words;
79161 var o = out.words;
79162 var c = 0;
79163 var lo;
79164 var mid;
79165 var hi;
79166 var a0 = a[0] | 0;
79167 var al0 = a0 & 0x1fff;
79168 var ah0 = a0 >>> 13;
79169 var a1 = a[1] | 0;
79170 var al1 = a1 & 0x1fff;
79171 var ah1 = a1 >>> 13;
79172 var a2 = a[2] | 0;
79173 var al2 = a2 & 0x1fff;
79174 var ah2 = a2 >>> 13;
79175 var a3 = a[3] | 0;
79176 var al3 = a3 & 0x1fff;
79177 var ah3 = a3 >>> 13;
79178 var a4 = a[4] | 0;
79179 var al4 = a4 & 0x1fff;
79180 var ah4 = a4 >>> 13;
79181 var a5 = a[5] | 0;
79182 var al5 = a5 & 0x1fff;
79183 var ah5 = a5 >>> 13;
79184 var a6 = a[6] | 0;
79185 var al6 = a6 & 0x1fff;
79186 var ah6 = a6 >>> 13;
79187 var a7 = a[7] | 0;
79188 var al7 = a7 & 0x1fff;
79189 var ah7 = a7 >>> 13;
79190 var a8 = a[8] | 0;
79191 var al8 = a8 & 0x1fff;
79192 var ah8 = a8 >>> 13;
79193 var a9 = a[9] | 0;
79194 var al9 = a9 & 0x1fff;
79195 var ah9 = a9 >>> 13;
79196 var b0 = b[0] | 0;
79197 var bl0 = b0 & 0x1fff;
79198 var bh0 = b0 >>> 13;
79199 var b1 = b[1] | 0;
79200 var bl1 = b1 & 0x1fff;
79201 var bh1 = b1 >>> 13;
79202 var b2 = b[2] | 0;
79203 var bl2 = b2 & 0x1fff;
79204 var bh2 = b2 >>> 13;
79205 var b3 = b[3] | 0;
79206 var bl3 = b3 & 0x1fff;
79207 var bh3 = b3 >>> 13;
79208 var b4 = b[4] | 0;
79209 var bl4 = b4 & 0x1fff;
79210 var bh4 = b4 >>> 13;
79211 var b5 = b[5] | 0;
79212 var bl5 = b5 & 0x1fff;
79213 var bh5 = b5 >>> 13;
79214 var b6 = b[6] | 0;
79215 var bl6 = b6 & 0x1fff;
79216 var bh6 = b6 >>> 13;
79217 var b7 = b[7] | 0;
79218 var bl7 = b7 & 0x1fff;
79219 var bh7 = b7 >>> 13;
79220 var b8 = b[8] | 0;
79221 var bl8 = b8 & 0x1fff;
79222 var bh8 = b8 >>> 13;
79223 var b9 = b[9] | 0;
79224 var bl9 = b9 & 0x1fff;
79225 var bh9 = b9 >>> 13;
79226
79227 out.negative = self.negative ^ num.negative;
79228 out.length = 19;
79229 /* k = 0 */
79230 lo = Math.imul(al0, bl0);
79231 mid = Math.imul(al0, bh0);
79232 mid = (mid + Math.imul(ah0, bl0)) | 0;
79233 hi = Math.imul(ah0, bh0);
79234 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79235 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
79236 w0 &= 0x3ffffff;
79237 /* k = 1 */
79238 lo = Math.imul(al1, bl0);
79239 mid = Math.imul(al1, bh0);
79240 mid = (mid + Math.imul(ah1, bl0)) | 0;
79241 hi = Math.imul(ah1, bh0);
79242 lo = (lo + Math.imul(al0, bl1)) | 0;
79243 mid = (mid + Math.imul(al0, bh1)) | 0;
79244 mid = (mid + Math.imul(ah0, bl1)) | 0;
79245 hi = (hi + Math.imul(ah0, bh1)) | 0;
79246 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79247 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
79248 w1 &= 0x3ffffff;
79249 /* k = 2 */
79250 lo = Math.imul(al2, bl0);
79251 mid = Math.imul(al2, bh0);
79252 mid = (mid + Math.imul(ah2, bl0)) | 0;
79253 hi = Math.imul(ah2, bh0);
79254 lo = (lo + Math.imul(al1, bl1)) | 0;
79255 mid = (mid + Math.imul(al1, bh1)) | 0;
79256 mid = (mid + Math.imul(ah1, bl1)) | 0;
79257 hi = (hi + Math.imul(ah1, bh1)) | 0;
79258 lo = (lo + Math.imul(al0, bl2)) | 0;
79259 mid = (mid + Math.imul(al0, bh2)) | 0;
79260 mid = (mid + Math.imul(ah0, bl2)) | 0;
79261 hi = (hi + Math.imul(ah0, bh2)) | 0;
79262 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79263 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
79264 w2 &= 0x3ffffff;
79265 /* k = 3 */
79266 lo = Math.imul(al3, bl0);
79267 mid = Math.imul(al3, bh0);
79268 mid = (mid + Math.imul(ah3, bl0)) | 0;
79269 hi = Math.imul(ah3, bh0);
79270 lo = (lo + Math.imul(al2, bl1)) | 0;
79271 mid = (mid + Math.imul(al2, bh1)) | 0;
79272 mid = (mid + Math.imul(ah2, bl1)) | 0;
79273 hi = (hi + Math.imul(ah2, bh1)) | 0;
79274 lo = (lo + Math.imul(al1, bl2)) | 0;
79275 mid = (mid + Math.imul(al1, bh2)) | 0;
79276 mid = (mid + Math.imul(ah1, bl2)) | 0;
79277 hi = (hi + Math.imul(ah1, bh2)) | 0;
79278 lo = (lo + Math.imul(al0, bl3)) | 0;
79279 mid = (mid + Math.imul(al0, bh3)) | 0;
79280 mid = (mid + Math.imul(ah0, bl3)) | 0;
79281 hi = (hi + Math.imul(ah0, bh3)) | 0;
79282 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79283 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
79284 w3 &= 0x3ffffff;
79285 /* k = 4 */
79286 lo = Math.imul(al4, bl0);
79287 mid = Math.imul(al4, bh0);
79288 mid = (mid + Math.imul(ah4, bl0)) | 0;
79289 hi = Math.imul(ah4, bh0);
79290 lo = (lo + Math.imul(al3, bl1)) | 0;
79291 mid = (mid + Math.imul(al3, bh1)) | 0;
79292 mid = (mid + Math.imul(ah3, bl1)) | 0;
79293 hi = (hi + Math.imul(ah3, bh1)) | 0;
79294 lo = (lo + Math.imul(al2, bl2)) | 0;
79295 mid = (mid + Math.imul(al2, bh2)) | 0;
79296 mid = (mid + Math.imul(ah2, bl2)) | 0;
79297 hi = (hi + Math.imul(ah2, bh2)) | 0;
79298 lo = (lo + Math.imul(al1, bl3)) | 0;
79299 mid = (mid + Math.imul(al1, bh3)) | 0;
79300 mid = (mid + Math.imul(ah1, bl3)) | 0;
79301 hi = (hi + Math.imul(ah1, bh3)) | 0;
79302 lo = (lo + Math.imul(al0, bl4)) | 0;
79303 mid = (mid + Math.imul(al0, bh4)) | 0;
79304 mid = (mid + Math.imul(ah0, bl4)) | 0;
79305 hi = (hi + Math.imul(ah0, bh4)) | 0;
79306 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79307 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
79308 w4 &= 0x3ffffff;
79309 /* k = 5 */
79310 lo = Math.imul(al5, bl0);
79311 mid = Math.imul(al5, bh0);
79312 mid = (mid + Math.imul(ah5, bl0)) | 0;
79313 hi = Math.imul(ah5, bh0);
79314 lo = (lo + Math.imul(al4, bl1)) | 0;
79315 mid = (mid + Math.imul(al4, bh1)) | 0;
79316 mid = (mid + Math.imul(ah4, bl1)) | 0;
79317 hi = (hi + Math.imul(ah4, bh1)) | 0;
79318 lo = (lo + Math.imul(al3, bl2)) | 0;
79319 mid = (mid + Math.imul(al3, bh2)) | 0;
79320 mid = (mid + Math.imul(ah3, bl2)) | 0;
79321 hi = (hi + Math.imul(ah3, bh2)) | 0;
79322 lo = (lo + Math.imul(al2, bl3)) | 0;
79323 mid = (mid + Math.imul(al2, bh3)) | 0;
79324 mid = (mid + Math.imul(ah2, bl3)) | 0;
79325 hi = (hi + Math.imul(ah2, bh3)) | 0;
79326 lo = (lo + Math.imul(al1, bl4)) | 0;
79327 mid = (mid + Math.imul(al1, bh4)) | 0;
79328 mid = (mid + Math.imul(ah1, bl4)) | 0;
79329 hi = (hi + Math.imul(ah1, bh4)) | 0;
79330 lo = (lo + Math.imul(al0, bl5)) | 0;
79331 mid = (mid + Math.imul(al0, bh5)) | 0;
79332 mid = (mid + Math.imul(ah0, bl5)) | 0;
79333 hi = (hi + Math.imul(ah0, bh5)) | 0;
79334 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79335 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
79336 w5 &= 0x3ffffff;
79337 /* k = 6 */
79338 lo = Math.imul(al6, bl0);
79339 mid = Math.imul(al6, bh0);
79340 mid = (mid + Math.imul(ah6, bl0)) | 0;
79341 hi = Math.imul(ah6, bh0);
79342 lo = (lo + Math.imul(al5, bl1)) | 0;
79343 mid = (mid + Math.imul(al5, bh1)) | 0;
79344 mid = (mid + Math.imul(ah5, bl1)) | 0;
79345 hi = (hi + Math.imul(ah5, bh1)) | 0;
79346 lo = (lo + Math.imul(al4, bl2)) | 0;
79347 mid = (mid + Math.imul(al4, bh2)) | 0;
79348 mid = (mid + Math.imul(ah4, bl2)) | 0;
79349 hi = (hi + Math.imul(ah4, bh2)) | 0;
79350 lo = (lo + Math.imul(al3, bl3)) | 0;
79351 mid = (mid + Math.imul(al3, bh3)) | 0;
79352 mid = (mid + Math.imul(ah3, bl3)) | 0;
79353 hi = (hi + Math.imul(ah3, bh3)) | 0;
79354 lo = (lo + Math.imul(al2, bl4)) | 0;
79355 mid = (mid + Math.imul(al2, bh4)) | 0;
79356 mid = (mid + Math.imul(ah2, bl4)) | 0;
79357 hi = (hi + Math.imul(ah2, bh4)) | 0;
79358 lo = (lo + Math.imul(al1, bl5)) | 0;
79359 mid = (mid + Math.imul(al1, bh5)) | 0;
79360 mid = (mid + Math.imul(ah1, bl5)) | 0;
79361 hi = (hi + Math.imul(ah1, bh5)) | 0;
79362 lo = (lo + Math.imul(al0, bl6)) | 0;
79363 mid = (mid + Math.imul(al0, bh6)) | 0;
79364 mid = (mid + Math.imul(ah0, bl6)) | 0;
79365 hi = (hi + Math.imul(ah0, bh6)) | 0;
79366 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79367 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
79368 w6 &= 0x3ffffff;
79369 /* k = 7 */
79370 lo = Math.imul(al7, bl0);
79371 mid = Math.imul(al7, bh0);
79372 mid = (mid + Math.imul(ah7, bl0)) | 0;
79373 hi = Math.imul(ah7, bh0);
79374 lo = (lo + Math.imul(al6, bl1)) | 0;
79375 mid = (mid + Math.imul(al6, bh1)) | 0;
79376 mid = (mid + Math.imul(ah6, bl1)) | 0;
79377 hi = (hi + Math.imul(ah6, bh1)) | 0;
79378 lo = (lo + Math.imul(al5, bl2)) | 0;
79379 mid = (mid + Math.imul(al5, bh2)) | 0;
79380 mid = (mid + Math.imul(ah5, bl2)) | 0;
79381 hi = (hi + Math.imul(ah5, bh2)) | 0;
79382 lo = (lo + Math.imul(al4, bl3)) | 0;
79383 mid = (mid + Math.imul(al4, bh3)) | 0;
79384 mid = (mid + Math.imul(ah4, bl3)) | 0;
79385 hi = (hi + Math.imul(ah4, bh3)) | 0;
79386 lo = (lo + Math.imul(al3, bl4)) | 0;
79387 mid = (mid + Math.imul(al3, bh4)) | 0;
79388 mid = (mid + Math.imul(ah3, bl4)) | 0;
79389 hi = (hi + Math.imul(ah3, bh4)) | 0;
79390 lo = (lo + Math.imul(al2, bl5)) | 0;
79391 mid = (mid + Math.imul(al2, bh5)) | 0;
79392 mid = (mid + Math.imul(ah2, bl5)) | 0;
79393 hi = (hi + Math.imul(ah2, bh5)) | 0;
79394 lo = (lo + Math.imul(al1, bl6)) | 0;
79395 mid = (mid + Math.imul(al1, bh6)) | 0;
79396 mid = (mid + Math.imul(ah1, bl6)) | 0;
79397 hi = (hi + Math.imul(ah1, bh6)) | 0;
79398 lo = (lo + Math.imul(al0, bl7)) | 0;
79399 mid = (mid + Math.imul(al0, bh7)) | 0;
79400 mid = (mid + Math.imul(ah0, bl7)) | 0;
79401 hi = (hi + Math.imul(ah0, bh7)) | 0;
79402 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79403 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
79404 w7 &= 0x3ffffff;
79405 /* k = 8 */
79406 lo = Math.imul(al8, bl0);
79407 mid = Math.imul(al8, bh0);
79408 mid = (mid + Math.imul(ah8, bl0)) | 0;
79409 hi = Math.imul(ah8, bh0);
79410 lo = (lo + Math.imul(al7, bl1)) | 0;
79411 mid = (mid + Math.imul(al7, bh1)) | 0;
79412 mid = (mid + Math.imul(ah7, bl1)) | 0;
79413 hi = (hi + Math.imul(ah7, bh1)) | 0;
79414 lo = (lo + Math.imul(al6, bl2)) | 0;
79415 mid = (mid + Math.imul(al6, bh2)) | 0;
79416 mid = (mid + Math.imul(ah6, bl2)) | 0;
79417 hi = (hi + Math.imul(ah6, bh2)) | 0;
79418 lo = (lo + Math.imul(al5, bl3)) | 0;
79419 mid = (mid + Math.imul(al5, bh3)) | 0;
79420 mid = (mid + Math.imul(ah5, bl3)) | 0;
79421 hi = (hi + Math.imul(ah5, bh3)) | 0;
79422 lo = (lo + Math.imul(al4, bl4)) | 0;
79423 mid = (mid + Math.imul(al4, bh4)) | 0;
79424 mid = (mid + Math.imul(ah4, bl4)) | 0;
79425 hi = (hi + Math.imul(ah4, bh4)) | 0;
79426 lo = (lo + Math.imul(al3, bl5)) | 0;
79427 mid = (mid + Math.imul(al3, bh5)) | 0;
79428 mid = (mid + Math.imul(ah3, bl5)) | 0;
79429 hi = (hi + Math.imul(ah3, bh5)) | 0;
79430 lo = (lo + Math.imul(al2, bl6)) | 0;
79431 mid = (mid + Math.imul(al2, bh6)) | 0;
79432 mid = (mid + Math.imul(ah2, bl6)) | 0;
79433 hi = (hi + Math.imul(ah2, bh6)) | 0;
79434 lo = (lo + Math.imul(al1, bl7)) | 0;
79435 mid = (mid + Math.imul(al1, bh7)) | 0;
79436 mid = (mid + Math.imul(ah1, bl7)) | 0;
79437 hi = (hi + Math.imul(ah1, bh7)) | 0;
79438 lo = (lo + Math.imul(al0, bl8)) | 0;
79439 mid = (mid + Math.imul(al0, bh8)) | 0;
79440 mid = (mid + Math.imul(ah0, bl8)) | 0;
79441 hi = (hi + Math.imul(ah0, bh8)) | 0;
79442 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79443 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
79444 w8 &= 0x3ffffff;
79445 /* k = 9 */
79446 lo = Math.imul(al9, bl0);
79447 mid = Math.imul(al9, bh0);
79448 mid = (mid + Math.imul(ah9, bl0)) | 0;
79449 hi = Math.imul(ah9, bh0);
79450 lo = (lo + Math.imul(al8, bl1)) | 0;
79451 mid = (mid + Math.imul(al8, bh1)) | 0;
79452 mid = (mid + Math.imul(ah8, bl1)) | 0;
79453 hi = (hi + Math.imul(ah8, bh1)) | 0;
79454 lo = (lo + Math.imul(al7, bl2)) | 0;
79455 mid = (mid + Math.imul(al7, bh2)) | 0;
79456 mid = (mid + Math.imul(ah7, bl2)) | 0;
79457 hi = (hi + Math.imul(ah7, bh2)) | 0;
79458 lo = (lo + Math.imul(al6, bl3)) | 0;
79459 mid = (mid + Math.imul(al6, bh3)) | 0;
79460 mid = (mid + Math.imul(ah6, bl3)) | 0;
79461 hi = (hi + Math.imul(ah6, bh3)) | 0;
79462 lo = (lo + Math.imul(al5, bl4)) | 0;
79463 mid = (mid + Math.imul(al5, bh4)) | 0;
79464 mid = (mid + Math.imul(ah5, bl4)) | 0;
79465 hi = (hi + Math.imul(ah5, bh4)) | 0;
79466 lo = (lo + Math.imul(al4, bl5)) | 0;
79467 mid = (mid + Math.imul(al4, bh5)) | 0;
79468 mid = (mid + Math.imul(ah4, bl5)) | 0;
79469 hi = (hi + Math.imul(ah4, bh5)) | 0;
79470 lo = (lo + Math.imul(al3, bl6)) | 0;
79471 mid = (mid + Math.imul(al3, bh6)) | 0;
79472 mid = (mid + Math.imul(ah3, bl6)) | 0;
79473 hi = (hi + Math.imul(ah3, bh6)) | 0;
79474 lo = (lo + Math.imul(al2, bl7)) | 0;
79475 mid = (mid + Math.imul(al2, bh7)) | 0;
79476 mid = (mid + Math.imul(ah2, bl7)) | 0;
79477 hi = (hi + Math.imul(ah2, bh7)) | 0;
79478 lo = (lo + Math.imul(al1, bl8)) | 0;
79479 mid = (mid + Math.imul(al1, bh8)) | 0;
79480 mid = (mid + Math.imul(ah1, bl8)) | 0;
79481 hi = (hi + Math.imul(ah1, bh8)) | 0;
79482 lo = (lo + Math.imul(al0, bl9)) | 0;
79483 mid = (mid + Math.imul(al0, bh9)) | 0;
79484 mid = (mid + Math.imul(ah0, bl9)) | 0;
79485 hi = (hi + Math.imul(ah0, bh9)) | 0;
79486 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79487 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
79488 w9 &= 0x3ffffff;
79489 /* k = 10 */
79490 lo = Math.imul(al9, bl1);
79491 mid = Math.imul(al9, bh1);
79492 mid = (mid + Math.imul(ah9, bl1)) | 0;
79493 hi = Math.imul(ah9, bh1);
79494 lo = (lo + Math.imul(al8, bl2)) | 0;
79495 mid = (mid + Math.imul(al8, bh2)) | 0;
79496 mid = (mid + Math.imul(ah8, bl2)) | 0;
79497 hi = (hi + Math.imul(ah8, bh2)) | 0;
79498 lo = (lo + Math.imul(al7, bl3)) | 0;
79499 mid = (mid + Math.imul(al7, bh3)) | 0;
79500 mid = (mid + Math.imul(ah7, bl3)) | 0;
79501 hi = (hi + Math.imul(ah7, bh3)) | 0;
79502 lo = (lo + Math.imul(al6, bl4)) | 0;
79503 mid = (mid + Math.imul(al6, bh4)) | 0;
79504 mid = (mid + Math.imul(ah6, bl4)) | 0;
79505 hi = (hi + Math.imul(ah6, bh4)) | 0;
79506 lo = (lo + Math.imul(al5, bl5)) | 0;
79507 mid = (mid + Math.imul(al5, bh5)) | 0;
79508 mid = (mid + Math.imul(ah5, bl5)) | 0;
79509 hi = (hi + Math.imul(ah5, bh5)) | 0;
79510 lo = (lo + Math.imul(al4, bl6)) | 0;
79511 mid = (mid + Math.imul(al4, bh6)) | 0;
79512 mid = (mid + Math.imul(ah4, bl6)) | 0;
79513 hi = (hi + Math.imul(ah4, bh6)) | 0;
79514 lo = (lo + Math.imul(al3, bl7)) | 0;
79515 mid = (mid + Math.imul(al3, bh7)) | 0;
79516 mid = (mid + Math.imul(ah3, bl7)) | 0;
79517 hi = (hi + Math.imul(ah3, bh7)) | 0;
79518 lo = (lo + Math.imul(al2, bl8)) | 0;
79519 mid = (mid + Math.imul(al2, bh8)) | 0;
79520 mid = (mid + Math.imul(ah2, bl8)) | 0;
79521 hi = (hi + Math.imul(ah2, bh8)) | 0;
79522 lo = (lo + Math.imul(al1, bl9)) | 0;
79523 mid = (mid + Math.imul(al1, bh9)) | 0;
79524 mid = (mid + Math.imul(ah1, bl9)) | 0;
79525 hi = (hi + Math.imul(ah1, bh9)) | 0;
79526 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79527 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
79528 w10 &= 0x3ffffff;
79529 /* k = 11 */
79530 lo = Math.imul(al9, bl2);
79531 mid = Math.imul(al9, bh2);
79532 mid = (mid + Math.imul(ah9, bl2)) | 0;
79533 hi = Math.imul(ah9, bh2);
79534 lo = (lo + Math.imul(al8, bl3)) | 0;
79535 mid = (mid + Math.imul(al8, bh3)) | 0;
79536 mid = (mid + Math.imul(ah8, bl3)) | 0;
79537 hi = (hi + Math.imul(ah8, bh3)) | 0;
79538 lo = (lo + Math.imul(al7, bl4)) | 0;
79539 mid = (mid + Math.imul(al7, bh4)) | 0;
79540 mid = (mid + Math.imul(ah7, bl4)) | 0;
79541 hi = (hi + Math.imul(ah7, bh4)) | 0;
79542 lo = (lo + Math.imul(al6, bl5)) | 0;
79543 mid = (mid + Math.imul(al6, bh5)) | 0;
79544 mid = (mid + Math.imul(ah6, bl5)) | 0;
79545 hi = (hi + Math.imul(ah6, bh5)) | 0;
79546 lo = (lo + Math.imul(al5, bl6)) | 0;
79547 mid = (mid + Math.imul(al5, bh6)) | 0;
79548 mid = (mid + Math.imul(ah5, bl6)) | 0;
79549 hi = (hi + Math.imul(ah5, bh6)) | 0;
79550 lo = (lo + Math.imul(al4, bl7)) | 0;
79551 mid = (mid + Math.imul(al4, bh7)) | 0;
79552 mid = (mid + Math.imul(ah4, bl7)) | 0;
79553 hi = (hi + Math.imul(ah4, bh7)) | 0;
79554 lo = (lo + Math.imul(al3, bl8)) | 0;
79555 mid = (mid + Math.imul(al3, bh8)) | 0;
79556 mid = (mid + Math.imul(ah3, bl8)) | 0;
79557 hi = (hi + Math.imul(ah3, bh8)) | 0;
79558 lo = (lo + Math.imul(al2, bl9)) | 0;
79559 mid = (mid + Math.imul(al2, bh9)) | 0;
79560 mid = (mid + Math.imul(ah2, bl9)) | 0;
79561 hi = (hi + Math.imul(ah2, bh9)) | 0;
79562 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79563 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
79564 w11 &= 0x3ffffff;
79565 /* k = 12 */
79566 lo = Math.imul(al9, bl3);
79567 mid = Math.imul(al9, bh3);
79568 mid = (mid + Math.imul(ah9, bl3)) | 0;
79569 hi = Math.imul(ah9, bh3);
79570 lo = (lo + Math.imul(al8, bl4)) | 0;
79571 mid = (mid + Math.imul(al8, bh4)) | 0;
79572 mid = (mid + Math.imul(ah8, bl4)) | 0;
79573 hi = (hi + Math.imul(ah8, bh4)) | 0;
79574 lo = (lo + Math.imul(al7, bl5)) | 0;
79575 mid = (mid + Math.imul(al7, bh5)) | 0;
79576 mid = (mid + Math.imul(ah7, bl5)) | 0;
79577 hi = (hi + Math.imul(ah7, bh5)) | 0;
79578 lo = (lo + Math.imul(al6, bl6)) | 0;
79579 mid = (mid + Math.imul(al6, bh6)) | 0;
79580 mid = (mid + Math.imul(ah6, bl6)) | 0;
79581 hi = (hi + Math.imul(ah6, bh6)) | 0;
79582 lo = (lo + Math.imul(al5, bl7)) | 0;
79583 mid = (mid + Math.imul(al5, bh7)) | 0;
79584 mid = (mid + Math.imul(ah5, bl7)) | 0;
79585 hi = (hi + Math.imul(ah5, bh7)) | 0;
79586 lo = (lo + Math.imul(al4, bl8)) | 0;
79587 mid = (mid + Math.imul(al4, bh8)) | 0;
79588 mid = (mid + Math.imul(ah4, bl8)) | 0;
79589 hi = (hi + Math.imul(ah4, bh8)) | 0;
79590 lo = (lo + Math.imul(al3, bl9)) | 0;
79591 mid = (mid + Math.imul(al3, bh9)) | 0;
79592 mid = (mid + Math.imul(ah3, bl9)) | 0;
79593 hi = (hi + Math.imul(ah3, bh9)) | 0;
79594 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79595 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
79596 w12 &= 0x3ffffff;
79597 /* k = 13 */
79598 lo = Math.imul(al9, bl4);
79599 mid = Math.imul(al9, bh4);
79600 mid = (mid + Math.imul(ah9, bl4)) | 0;
79601 hi = Math.imul(ah9, bh4);
79602 lo = (lo + Math.imul(al8, bl5)) | 0;
79603 mid = (mid + Math.imul(al8, bh5)) | 0;
79604 mid = (mid + Math.imul(ah8, bl5)) | 0;
79605 hi = (hi + Math.imul(ah8, bh5)) | 0;
79606 lo = (lo + Math.imul(al7, bl6)) | 0;
79607 mid = (mid + Math.imul(al7, bh6)) | 0;
79608 mid = (mid + Math.imul(ah7, bl6)) | 0;
79609 hi = (hi + Math.imul(ah7, bh6)) | 0;
79610 lo = (lo + Math.imul(al6, bl7)) | 0;
79611 mid = (mid + Math.imul(al6, bh7)) | 0;
79612 mid = (mid + Math.imul(ah6, bl7)) | 0;
79613 hi = (hi + Math.imul(ah6, bh7)) | 0;
79614 lo = (lo + Math.imul(al5, bl8)) | 0;
79615 mid = (mid + Math.imul(al5, bh8)) | 0;
79616 mid = (mid + Math.imul(ah5, bl8)) | 0;
79617 hi = (hi + Math.imul(ah5, bh8)) | 0;
79618 lo = (lo + Math.imul(al4, bl9)) | 0;
79619 mid = (mid + Math.imul(al4, bh9)) | 0;
79620 mid = (mid + Math.imul(ah4, bl9)) | 0;
79621 hi = (hi + Math.imul(ah4, bh9)) | 0;
79622 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79623 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
79624 w13 &= 0x3ffffff;
79625 /* k = 14 */
79626 lo = Math.imul(al9, bl5);
79627 mid = Math.imul(al9, bh5);
79628 mid = (mid + Math.imul(ah9, bl5)) | 0;
79629 hi = Math.imul(ah9, bh5);
79630 lo = (lo + Math.imul(al8, bl6)) | 0;
79631 mid = (mid + Math.imul(al8, bh6)) | 0;
79632 mid = (mid + Math.imul(ah8, bl6)) | 0;
79633 hi = (hi + Math.imul(ah8, bh6)) | 0;
79634 lo = (lo + Math.imul(al7, bl7)) | 0;
79635 mid = (mid + Math.imul(al7, bh7)) | 0;
79636 mid = (mid + Math.imul(ah7, bl7)) | 0;
79637 hi = (hi + Math.imul(ah7, bh7)) | 0;
79638 lo = (lo + Math.imul(al6, bl8)) | 0;
79639 mid = (mid + Math.imul(al6, bh8)) | 0;
79640 mid = (mid + Math.imul(ah6, bl8)) | 0;
79641 hi = (hi + Math.imul(ah6, bh8)) | 0;
79642 lo = (lo + Math.imul(al5, bl9)) | 0;
79643 mid = (mid + Math.imul(al5, bh9)) | 0;
79644 mid = (mid + Math.imul(ah5, bl9)) | 0;
79645 hi = (hi + Math.imul(ah5, bh9)) | 0;
79646 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79647 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
79648 w14 &= 0x3ffffff;
79649 /* k = 15 */
79650 lo = Math.imul(al9, bl6);
79651 mid = Math.imul(al9, bh6);
79652 mid = (mid + Math.imul(ah9, bl6)) | 0;
79653 hi = Math.imul(ah9, bh6);
79654 lo = (lo + Math.imul(al8, bl7)) | 0;
79655 mid = (mid + Math.imul(al8, bh7)) | 0;
79656 mid = (mid + Math.imul(ah8, bl7)) | 0;
79657 hi = (hi + Math.imul(ah8, bh7)) | 0;
79658 lo = (lo + Math.imul(al7, bl8)) | 0;
79659 mid = (mid + Math.imul(al7, bh8)) | 0;
79660 mid = (mid + Math.imul(ah7, bl8)) | 0;
79661 hi = (hi + Math.imul(ah7, bh8)) | 0;
79662 lo = (lo + Math.imul(al6, bl9)) | 0;
79663 mid = (mid + Math.imul(al6, bh9)) | 0;
79664 mid = (mid + Math.imul(ah6, bl9)) | 0;
79665 hi = (hi + Math.imul(ah6, bh9)) | 0;
79666 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79667 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
79668 w15 &= 0x3ffffff;
79669 /* k = 16 */
79670 lo = Math.imul(al9, bl7);
79671 mid = Math.imul(al9, bh7);
79672 mid = (mid + Math.imul(ah9, bl7)) | 0;
79673 hi = Math.imul(ah9, bh7);
79674 lo = (lo + Math.imul(al8, bl8)) | 0;
79675 mid = (mid + Math.imul(al8, bh8)) | 0;
79676 mid = (mid + Math.imul(ah8, bl8)) | 0;
79677 hi = (hi + Math.imul(ah8, bh8)) | 0;
79678 lo = (lo + Math.imul(al7, bl9)) | 0;
79679 mid = (mid + Math.imul(al7, bh9)) | 0;
79680 mid = (mid + Math.imul(ah7, bl9)) | 0;
79681 hi = (hi + Math.imul(ah7, bh9)) | 0;
79682 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79683 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
79684 w16 &= 0x3ffffff;
79685 /* k = 17 */
79686 lo = Math.imul(al9, bl8);
79687 mid = Math.imul(al9, bh8);
79688 mid = (mid + Math.imul(ah9, bl8)) | 0;
79689 hi = Math.imul(ah9, bh8);
79690 lo = (lo + Math.imul(al8, bl9)) | 0;
79691 mid = (mid + Math.imul(al8, bh9)) | 0;
79692 mid = (mid + Math.imul(ah8, bl9)) | 0;
79693 hi = (hi + Math.imul(ah8, bh9)) | 0;
79694 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79695 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
79696 w17 &= 0x3ffffff;
79697 /* k = 18 */
79698 lo = Math.imul(al9, bl9);
79699 mid = Math.imul(al9, bh9);
79700 mid = (mid + Math.imul(ah9, bl9)) | 0;
79701 hi = Math.imul(ah9, bh9);
79702 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79703 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
79704 w18 &= 0x3ffffff;
79705 o[0] = w0;
79706 o[1] = w1;
79707 o[2] = w2;
79708 o[3] = w3;
79709 o[4] = w4;
79710 o[5] = w5;
79711 o[6] = w6;
79712 o[7] = w7;
79713 o[8] = w8;
79714 o[9] = w9;
79715 o[10] = w10;
79716 o[11] = w11;
79717 o[12] = w12;
79718 o[13] = w13;
79719 o[14] = w14;
79720 o[15] = w15;
79721 o[16] = w16;
79722 o[17] = w17;
79723 o[18] = w18;
79724 if (c !== 0) {
79725 o[19] = c;
79726 out.length++;
79727 }
79728 return out;
79729 };
79730
79731 // Polyfill comb
79732 if (!Math.imul) {
79733 comb10MulTo = smallMulTo;
79734 }
79735
79736 function bigMulTo (self, num, out) {
79737 out.negative = num.negative ^ self.negative;
79738 out.length = self.length + num.length;
79739
79740 var carry = 0;
79741 var hncarry = 0;
79742 for (var k = 0; k < out.length - 1; k++) {
79743 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
79744 // note that ncarry could be >= 0x3ffffff
79745 var ncarry = hncarry;
79746 hncarry = 0;
79747 var rword = carry & 0x3ffffff;
79748 var maxJ = Math.min(k, num.length - 1);
79749 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
79750 var i = k - j;
79751 var a = self.words[i] | 0;
79752 var b = num.words[j] | 0;
79753 var r = a * b;
79754
79755 var lo = r & 0x3ffffff;
79756 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
79757 lo = (lo + rword) | 0;
79758 rword = lo & 0x3ffffff;
79759 ncarry = (ncarry + (lo >>> 26)) | 0;
79760
79761 hncarry += ncarry >>> 26;
79762 ncarry &= 0x3ffffff;
79763 }
79764 out.words[k] = rword;
79765 carry = ncarry;
79766 ncarry = hncarry;
79767 }
79768 if (carry !== 0) {
79769 out.words[k] = carry;
79770 } else {
79771 out.length--;
79772 }
79773
79774 return out.strip();
79775 }
79776
79777 function jumboMulTo (self, num, out) {
79778 var fftm = new FFTM();
79779 return fftm.mulp(self, num, out);
79780 }
79781
79782 BN.prototype.mulTo = function mulTo (num, out) {
79783 var res;
79784 var len = this.length + num.length;
79785 if (this.length === 10 && num.length === 10) {
79786 res = comb10MulTo(this, num, out);
79787 } else if (len < 63) {
79788 res = smallMulTo(this, num, out);
79789 } else if (len < 1024) {
79790 res = bigMulTo(this, num, out);
79791 } else {
79792 res = jumboMulTo(this, num, out);
79793 }
79794
79795 return res;
79796 };
79797
79798 // Cooley-Tukey algorithm for FFT
79799 // slightly revisited to rely on looping instead of recursion
79800
79801 function FFTM (x, y) {
79802 this.x = x;
79803 this.y = y;
79804 }
79805
79806 FFTM.prototype.makeRBT = function makeRBT (N) {
79807 var t = new Array(N);
79808 var l = BN.prototype._countBits(N) - 1;
79809 for (var i = 0; i < N; i++) {
79810 t[i] = this.revBin(i, l, N);
79811 }
79812
79813 return t;
79814 };
79815
79816 // Returns binary-reversed representation of `x`
79817 FFTM.prototype.revBin = function revBin (x, l, N) {
79818 if (x === 0 || x === N - 1) return x;
79819
79820 var rb = 0;
79821 for (var i = 0; i < l; i++) {
79822 rb |= (x & 1) << (l - i - 1);
79823 x >>= 1;
79824 }
79825
79826 return rb;
79827 };
79828
79829 // Performs "tweedling" phase, therefore 'emulating'
79830 // behaviour of the recursive algorithm
79831 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
79832 for (var i = 0; i < N; i++) {
79833 rtws[i] = rws[rbt[i]];
79834 itws[i] = iws[rbt[i]];
79835 }
79836 };
79837
79838 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
79839 this.permute(rbt, rws, iws, rtws, itws, N);
79840
79841 for (var s = 1; s < N; s <<= 1) {
79842 var l = s << 1;
79843
79844 var rtwdf = Math.cos(2 * Math.PI / l);
79845 var itwdf = Math.sin(2 * Math.PI / l);
79846
79847 for (var p = 0; p < N; p += l) {
79848 var rtwdf_ = rtwdf;
79849 var itwdf_ = itwdf;
79850
79851 for (var j = 0; j < s; j++) {
79852 var re = rtws[p + j];
79853 var ie = itws[p + j];
79854
79855 var ro = rtws[p + j + s];
79856 var io = itws[p + j + s];
79857
79858 var rx = rtwdf_ * ro - itwdf_ * io;
79859
79860 io = rtwdf_ * io + itwdf_ * ro;
79861 ro = rx;
79862
79863 rtws[p + j] = re + ro;
79864 itws[p + j] = ie + io;
79865
79866 rtws[p + j + s] = re - ro;
79867 itws[p + j + s] = ie - io;
79868
79869 /* jshint maxdepth : false */
79870 if (j !== l) {
79871 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
79872
79873 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
79874 rtwdf_ = rx;
79875 }
79876 }
79877 }
79878 }
79879 };
79880
79881 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
79882 var N = Math.max(m, n) | 1;
79883 var odd = N & 1;
79884 var i = 0;
79885 for (N = N / 2 | 0; N; N = N >>> 1) {
79886 i++;
79887 }
79888
79889 return 1 << i + 1 + odd;
79890 };
79891
79892 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
79893 if (N <= 1) return;
79894
79895 for (var i = 0; i < N / 2; i++) {
79896 var t = rws[i];
79897
79898 rws[i] = rws[N - i - 1];
79899 rws[N - i - 1] = t;
79900
79901 t = iws[i];
79902
79903 iws[i] = -iws[N - i - 1];
79904 iws[N - i - 1] = -t;
79905 }
79906 };
79907
79908 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
79909 var carry = 0;
79910 for (var i = 0; i < N / 2; i++) {
79911 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
79912 Math.round(ws[2 * i] / N) +
79913 carry;
79914
79915 ws[i] = w & 0x3ffffff;
79916
79917 if (w < 0x4000000) {
79918 carry = 0;
79919 } else {
79920 carry = w / 0x4000000 | 0;
79921 }
79922 }
79923
79924 return ws;
79925 };
79926
79927 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
79928 var carry = 0;
79929 for (var i = 0; i < len; i++) {
79930 carry = carry + (ws[i] | 0);
79931
79932 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
79933 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
79934 }
79935
79936 // Pad with zeroes
79937 for (i = 2 * len; i < N; ++i) {
79938 rws[i] = 0;
79939 }
79940
79941 assert(carry === 0);
79942 assert((carry & ~0x1fff) === 0);
79943 };
79944
79945 FFTM.prototype.stub = function stub (N) {
79946 var ph = new Array(N);
79947 for (var i = 0; i < N; i++) {
79948 ph[i] = 0;
79949 }
79950
79951 return ph;
79952 };
79953
79954 FFTM.prototype.mulp = function mulp (x, y, out) {
79955 var N = 2 * this.guessLen13b(x.length, y.length);
79956
79957 var rbt = this.makeRBT(N);
79958
79959 var _ = this.stub(N);
79960
79961 var rws = new Array(N);
79962 var rwst = new Array(N);
79963 var iwst = new Array(N);
79964
79965 var nrws = new Array(N);
79966 var nrwst = new Array(N);
79967 var niwst = new Array(N);
79968
79969 var rmws = out.words;
79970 rmws.length = N;
79971
79972 this.convert13b(x.words, x.length, rws, N);
79973 this.convert13b(y.words, y.length, nrws, N);
79974
79975 this.transform(rws, _, rwst, iwst, N, rbt);
79976 this.transform(nrws, _, nrwst, niwst, N, rbt);
79977
79978 for (var i = 0; i < N; i++) {
79979 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
79980 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
79981 rwst[i] = rx;
79982 }
79983
79984 this.conjugate(rwst, iwst, N);
79985 this.transform(rwst, iwst, rmws, _, N, rbt);
79986 this.conjugate(rmws, _, N);
79987 this.normalize13b(rmws, N);
79988
79989 out.negative = x.negative ^ y.negative;
79990 out.length = x.length + y.length;
79991 return out.strip();
79992 };
79993
79994 // Multiply `this` by `num`
79995 BN.prototype.mul = function mul (num) {
79996 var out = new BN(null);
79997 out.words = new Array(this.length + num.length);
79998 return this.mulTo(num, out);
79999 };
80000
80001 // Multiply employing FFT
80002 BN.prototype.mulf = function mulf (num) {
80003 var out = new BN(null);
80004 out.words = new Array(this.length + num.length);
80005 return jumboMulTo(this, num, out);
80006 };
80007
80008 // In-place Multiplication
80009 BN.prototype.imul = function imul (num) {
80010 return this.clone().mulTo(num, this);
80011 };
80012
80013 BN.prototype.imuln = function imuln (num) {
80014 assert(typeof num === 'number');
80015 assert(num < 0x4000000);
80016
80017 // Carry
80018 var carry = 0;
80019 for (var i = 0; i < this.length; i++) {
80020 var w = (this.words[i] | 0) * num;
80021 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
80022 carry >>= 26;
80023 carry += (w / 0x4000000) | 0;
80024 // NOTE: lo is 27bit maximum
80025 carry += lo >>> 26;
80026 this.words[i] = lo & 0x3ffffff;
80027 }
80028
80029 if (carry !== 0) {
80030 this.words[i] = carry;
80031 this.length++;
80032 }
80033
80034 return this;
80035 };
80036
80037 BN.prototype.muln = function muln (num) {
80038 return this.clone().imuln(num);
80039 };
80040
80041 // `this` * `this`
80042 BN.prototype.sqr = function sqr () {
80043 return this.mul(this);
80044 };
80045
80046 // `this` * `this` in-place
80047 BN.prototype.isqr = function isqr () {
80048 return this.imul(this.clone());
80049 };
80050
80051 // Math.pow(`this`, `num`)
80052 BN.prototype.pow = function pow (num) {
80053 var w = toBitArray(num);
80054 if (w.length === 0) return new BN(1);
80055
80056 // Skip leading zeroes
80057 var res = this;
80058 for (var i = 0; i < w.length; i++, res = res.sqr()) {
80059 if (w[i] !== 0) break;
80060 }
80061
80062 if (++i < w.length) {
80063 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
80064 if (w[i] === 0) continue;
80065
80066 res = res.mul(q);
80067 }
80068 }
80069
80070 return res;
80071 };
80072
80073 // Shift-left in-place
80074 BN.prototype.iushln = function iushln (bits) {
80075 assert(typeof bits === 'number' && bits >= 0);
80076 var r = bits % 26;
80077 var s = (bits - r) / 26;
80078 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
80079 var i;
80080
80081 if (r !== 0) {
80082 var carry = 0;
80083
80084 for (i = 0; i < this.length; i++) {
80085 var newCarry = this.words[i] & carryMask;
80086 var c = ((this.words[i] | 0) - newCarry) << r;
80087 this.words[i] = c | carry;
80088 carry = newCarry >>> (26 - r);
80089 }
80090
80091 if (carry) {
80092 this.words[i] = carry;
80093 this.length++;
80094 }
80095 }
80096
80097 if (s !== 0) {
80098 for (i = this.length - 1; i >= 0; i--) {
80099 this.words[i + s] = this.words[i];
80100 }
80101
80102 for (i = 0; i < s; i++) {
80103 this.words[i] = 0;
80104 }
80105
80106 this.length += s;
80107 }
80108
80109 return this.strip();
80110 };
80111
80112 BN.prototype.ishln = function ishln (bits) {
80113 // TODO(indutny): implement me
80114 assert(this.negative === 0);
80115 return this.iushln(bits);
80116 };
80117
80118 // Shift-right in-place
80119 // NOTE: `hint` is a lowest bit before trailing zeroes
80120 // NOTE: if `extended` is present - it will be filled with destroyed bits
80121 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
80122 assert(typeof bits === 'number' && bits >= 0);
80123 var h;
80124 if (hint) {
80125 h = (hint - (hint % 26)) / 26;
80126 } else {
80127 h = 0;
80128 }
80129
80130 var r = bits % 26;
80131 var s = Math.min((bits - r) / 26, this.length);
80132 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
80133 var maskedWords = extended;
80134
80135 h -= s;
80136 h = Math.max(0, h);
80137
80138 // Extended mode, copy masked part
80139 if (maskedWords) {
80140 for (var i = 0; i < s; i++) {
80141 maskedWords.words[i] = this.words[i];
80142 }
80143 maskedWords.length = s;
80144 }
80145
80146 if (s === 0) {
80147 // No-op, we should not move anything at all
80148 } else if (this.length > s) {
80149 this.length -= s;
80150 for (i = 0; i < this.length; i++) {
80151 this.words[i] = this.words[i + s];
80152 }
80153 } else {
80154 this.words[0] = 0;
80155 this.length = 1;
80156 }
80157
80158 var carry = 0;
80159 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
80160 var word = this.words[i] | 0;
80161 this.words[i] = (carry << (26 - r)) | (word >>> r);
80162 carry = word & mask;
80163 }
80164
80165 // Push carried bits as a mask
80166 if (maskedWords && carry !== 0) {
80167 maskedWords.words[maskedWords.length++] = carry;
80168 }
80169
80170 if (this.length === 0) {
80171 this.words[0] = 0;
80172 this.length = 1;
80173 }
80174
80175 return this.strip();
80176 };
80177
80178 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
80179 // TODO(indutny): implement me
80180 assert(this.negative === 0);
80181 return this.iushrn(bits, hint, extended);
80182 };
80183
80184 // Shift-left
80185 BN.prototype.shln = function shln (bits) {
80186 return this.clone().ishln(bits);
80187 };
80188
80189 BN.prototype.ushln = function ushln (bits) {
80190 return this.clone().iushln(bits);
80191 };
80192
80193 // Shift-right
80194 BN.prototype.shrn = function shrn (bits) {
80195 return this.clone().ishrn(bits);
80196 };
80197
80198 BN.prototype.ushrn = function ushrn (bits) {
80199 return this.clone().iushrn(bits);
80200 };
80201
80202 // Test if n bit is set
80203 BN.prototype.testn = function testn (bit) {
80204 assert(typeof bit === 'number' && bit >= 0);
80205 var r = bit % 26;
80206 var s = (bit - r) / 26;
80207 var q = 1 << r;
80208
80209 // Fast case: bit is much higher than all existing words
80210 if (this.length <= s) return false;
80211
80212 // Check bit and return
80213 var w = this.words[s];
80214
80215 return !!(w & q);
80216 };
80217
80218 // Return only lowers bits of number (in-place)
80219 BN.prototype.imaskn = function imaskn (bits) {
80220 assert(typeof bits === 'number' && bits >= 0);
80221 var r = bits % 26;
80222 var s = (bits - r) / 26;
80223
80224 assert(this.negative === 0, 'imaskn works only with positive numbers');
80225
80226 if (this.length <= s) {
80227 return this;
80228 }
80229
80230 if (r !== 0) {
80231 s++;
80232 }
80233 this.length = Math.min(s, this.length);
80234
80235 if (r !== 0) {
80236 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
80237 this.words[this.length - 1] &= mask;
80238 }
80239
80240 return this.strip();
80241 };
80242
80243 // Return only lowers bits of number
80244 BN.prototype.maskn = function maskn (bits) {
80245 return this.clone().imaskn(bits);
80246 };
80247
80248 // Add plain number `num` to `this`
80249 BN.prototype.iaddn = function iaddn (num) {
80250 assert(typeof num === 'number');
80251 assert(num < 0x4000000);
80252 if (num < 0) return this.isubn(-num);
80253
80254 // Possible sign change
80255 if (this.negative !== 0) {
80256 if (this.length === 1 && (this.words[0] | 0) < num) {
80257 this.words[0] = num - (this.words[0] | 0);
80258 this.negative = 0;
80259 return this;
80260 }
80261
80262 this.negative = 0;
80263 this.isubn(num);
80264 this.negative = 1;
80265 return this;
80266 }
80267
80268 // Add without checks
80269 return this._iaddn(num);
80270 };
80271
80272 BN.prototype._iaddn = function _iaddn (num) {
80273 this.words[0] += num;
80274
80275 // Carry
80276 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
80277 this.words[i] -= 0x4000000;
80278 if (i === this.length - 1) {
80279 this.words[i + 1] = 1;
80280 } else {
80281 this.words[i + 1]++;
80282 }
80283 }
80284 this.length = Math.max(this.length, i + 1);
80285
80286 return this;
80287 };
80288
80289 // Subtract plain number `num` from `this`
80290 BN.prototype.isubn = function isubn (num) {
80291 assert(typeof num === 'number');
80292 assert(num < 0x4000000);
80293 if (num < 0) return this.iaddn(-num);
80294
80295 if (this.negative !== 0) {
80296 this.negative = 0;
80297 this.iaddn(num);
80298 this.negative = 1;
80299 return this;
80300 }
80301
80302 this.words[0] -= num;
80303
80304 if (this.length === 1 && this.words[0] < 0) {
80305 this.words[0] = -this.words[0];
80306 this.negative = 1;
80307 } else {
80308 // Carry
80309 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
80310 this.words[i] += 0x4000000;
80311 this.words[i + 1] -= 1;
80312 }
80313 }
80314
80315 return this.strip();
80316 };
80317
80318 BN.prototype.addn = function addn (num) {
80319 return this.clone().iaddn(num);
80320 };
80321
80322 BN.prototype.subn = function subn (num) {
80323 return this.clone().isubn(num);
80324 };
80325
80326 BN.prototype.iabs = function iabs () {
80327 this.negative = 0;
80328
80329 return this;
80330 };
80331
80332 BN.prototype.abs = function abs () {
80333 return this.clone().iabs();
80334 };
80335
80336 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
80337 var len = num.length + shift;
80338 var i;
80339
80340 this._expand(len);
80341
80342 var w;
80343 var carry = 0;
80344 for (i = 0; i < num.length; i++) {
80345 w = (this.words[i + shift] | 0) + carry;
80346 var right = (num.words[i] | 0) * mul;
80347 w -= right & 0x3ffffff;
80348 carry = (w >> 26) - ((right / 0x4000000) | 0);
80349 this.words[i + shift] = w & 0x3ffffff;
80350 }
80351 for (; i < this.length - shift; i++) {
80352 w = (this.words[i + shift] | 0) + carry;
80353 carry = w >> 26;
80354 this.words[i + shift] = w & 0x3ffffff;
80355 }
80356
80357 if (carry === 0) return this.strip();
80358
80359 // Subtraction overflow
80360 assert(carry === -1);
80361 carry = 0;
80362 for (i = 0; i < this.length; i++) {
80363 w = -(this.words[i] | 0) + carry;
80364 carry = w >> 26;
80365 this.words[i] = w & 0x3ffffff;
80366 }
80367 this.negative = 1;
80368
80369 return this.strip();
80370 };
80371
80372 BN.prototype._wordDiv = function _wordDiv (num, mode) {
80373 var shift = this.length - num.length;
80374
80375 var a = this.clone();
80376 var b = num;
80377
80378 // Normalize
80379 var bhi = b.words[b.length - 1] | 0;
80380 var bhiBits = this._countBits(bhi);
80381 shift = 26 - bhiBits;
80382 if (shift !== 0) {
80383 b = b.ushln(shift);
80384 a.iushln(shift);
80385 bhi = b.words[b.length - 1] | 0;
80386 }
80387
80388 // Initialize quotient
80389 var m = a.length - b.length;
80390 var q;
80391
80392 if (mode !== 'mod') {
80393 q = new BN(null);
80394 q.length = m + 1;
80395 q.words = new Array(q.length);
80396 for (var i = 0; i < q.length; i++) {
80397 q.words[i] = 0;
80398 }
80399 }
80400
80401 var diff = a.clone()._ishlnsubmul(b, 1, m);
80402 if (diff.negative === 0) {
80403 a = diff;
80404 if (q) {
80405 q.words[m] = 1;
80406 }
80407 }
80408
80409 for (var j = m - 1; j >= 0; j--) {
80410 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
80411 (a.words[b.length + j - 1] | 0);
80412
80413 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
80414 // (0x7ffffff)
80415 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
80416
80417 a._ishlnsubmul(b, qj, j);
80418 while (a.negative !== 0) {
80419 qj--;
80420 a.negative = 0;
80421 a._ishlnsubmul(b, 1, j);
80422 if (!a.isZero()) {
80423 a.negative ^= 1;
80424 }
80425 }
80426 if (q) {
80427 q.words[j] = qj;
80428 }
80429 }
80430 if (q) {
80431 q.strip();
80432 }
80433 a.strip();
80434
80435 // Denormalize
80436 if (mode !== 'div' && shift !== 0) {
80437 a.iushrn(shift);
80438 }
80439
80440 return {
80441 div: q || null,
80442 mod: a
80443 };
80444 };
80445
80446 // NOTE: 1) `mode` can be set to `mod` to request mod only,
80447 // to `div` to request div only, or be absent to
80448 // request both div & mod
80449 // 2) `positive` is true if unsigned mod is requested
80450 BN.prototype.divmod = function divmod (num, mode, positive) {
80451 assert(!num.isZero());
80452
80453 if (this.isZero()) {
80454 return {
80455 div: new BN(0),
80456 mod: new BN(0)
80457 };
80458 }
80459
80460 var div, mod, res;
80461 if (this.negative !== 0 && num.negative === 0) {
80462 res = this.neg().divmod(num, mode);
80463
80464 if (mode !== 'mod') {
80465 div = res.div.neg();
80466 }
80467
80468 if (mode !== 'div') {
80469 mod = res.mod.neg();
80470 if (positive && mod.negative !== 0) {
80471 mod.iadd(num);
80472 }
80473 }
80474
80475 return {
80476 div: div,
80477 mod: mod
80478 };
80479 }
80480
80481 if (this.negative === 0 && num.negative !== 0) {
80482 res = this.divmod(num.neg(), mode);
80483
80484 if (mode !== 'mod') {
80485 div = res.div.neg();
80486 }
80487
80488 return {
80489 div: div,
80490 mod: res.mod
80491 };
80492 }
80493
80494 if ((this.negative & num.negative) !== 0) {
80495 res = this.neg().divmod(num.neg(), mode);
80496
80497 if (mode !== 'div') {
80498 mod = res.mod.neg();
80499 if (positive && mod.negative !== 0) {
80500 mod.isub(num);
80501 }
80502 }
80503
80504 return {
80505 div: res.div,
80506 mod: mod
80507 };
80508 }
80509
80510 // Both numbers are positive at this point
80511
80512 // Strip both numbers to approximate shift value
80513 if (num.length > this.length || this.cmp(num) < 0) {
80514 return {
80515 div: new BN(0),
80516 mod: this
80517 };
80518 }
80519
80520 // Very short reduction
80521 if (num.length === 1) {
80522 if (mode === 'div') {
80523 return {
80524 div: this.divn(num.words[0]),
80525 mod: null
80526 };
80527 }
80528
80529 if (mode === 'mod') {
80530 return {
80531 div: null,
80532 mod: new BN(this.modn(num.words[0]))
80533 };
80534 }
80535
80536 return {
80537 div: this.divn(num.words[0]),
80538 mod: new BN(this.modn(num.words[0]))
80539 };
80540 }
80541
80542 return this._wordDiv(num, mode);
80543 };
80544
80545 // Find `this` / `num`
80546 BN.prototype.div = function div (num) {
80547 return this.divmod(num, 'div', false).div;
80548 };
80549
80550 // Find `this` % `num`
80551 BN.prototype.mod = function mod (num) {
80552 return this.divmod(num, 'mod', false).mod;
80553 };
80554
80555 BN.prototype.umod = function umod (num) {
80556 return this.divmod(num, 'mod', true).mod;
80557 };
80558
80559 // Find Round(`this` / `num`)
80560 BN.prototype.divRound = function divRound (num) {
80561 var dm = this.divmod(num);
80562
80563 // Fast case - exact division
80564 if (dm.mod.isZero()) return dm.div;
80565
80566 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
80567
80568 var half = num.ushrn(1);
80569 var r2 = num.andln(1);
80570 var cmp = mod.cmp(half);
80571
80572 // Round down
80573 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
80574
80575 // Round up
80576 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
80577 };
80578
80579 BN.prototype.modn = function modn (num) {
80580 assert(num <= 0x3ffffff);
80581 var p = (1 << 26) % num;
80582
80583 var acc = 0;
80584 for (var i = this.length - 1; i >= 0; i--) {
80585 acc = (p * acc + (this.words[i] | 0)) % num;
80586 }
80587
80588 return acc;
80589 };
80590
80591 // In-place division by number
80592 BN.prototype.idivn = function idivn (num) {
80593 assert(num <= 0x3ffffff);
80594
80595 var carry = 0;
80596 for (var i = this.length - 1; i >= 0; i--) {
80597 var w = (this.words[i] | 0) + carry * 0x4000000;
80598 this.words[i] = (w / num) | 0;
80599 carry = w % num;
80600 }
80601
80602 return this.strip();
80603 };
80604
80605 BN.prototype.divn = function divn (num) {
80606 return this.clone().idivn(num);
80607 };
80608
80609 BN.prototype.egcd = function egcd (p) {
80610 assert(p.negative === 0);
80611 assert(!p.isZero());
80612
80613 var x = this;
80614 var y = p.clone();
80615
80616 if (x.negative !== 0) {
80617 x = x.umod(p);
80618 } else {
80619 x = x.clone();
80620 }
80621
80622 // A * x + B * y = x
80623 var A = new BN(1);
80624 var B = new BN(0);
80625
80626 // C * x + D * y = y
80627 var C = new BN(0);
80628 var D = new BN(1);
80629
80630 var g = 0;
80631
80632 while (x.isEven() && y.isEven()) {
80633 x.iushrn(1);
80634 y.iushrn(1);
80635 ++g;
80636 }
80637
80638 var yp = y.clone();
80639 var xp = x.clone();
80640
80641 while (!x.isZero()) {
80642 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
80643 if (i > 0) {
80644 x.iushrn(i);
80645 while (i-- > 0) {
80646 if (A.isOdd() || B.isOdd()) {
80647 A.iadd(yp);
80648 B.isub(xp);
80649 }
80650
80651 A.iushrn(1);
80652 B.iushrn(1);
80653 }
80654 }
80655
80656 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
80657 if (j > 0) {
80658 y.iushrn(j);
80659 while (j-- > 0) {
80660 if (C.isOdd() || D.isOdd()) {
80661 C.iadd(yp);
80662 D.isub(xp);
80663 }
80664
80665 C.iushrn(1);
80666 D.iushrn(1);
80667 }
80668 }
80669
80670 if (x.cmp(y) >= 0) {
80671 x.isub(y);
80672 A.isub(C);
80673 B.isub(D);
80674 } else {
80675 y.isub(x);
80676 C.isub(A);
80677 D.isub(B);
80678 }
80679 }
80680
80681 return {
80682 a: C,
80683 b: D,
80684 gcd: y.iushln(g)
80685 };
80686 };
80687
80688 // This is reduced incarnation of the binary EEA
80689 // above, designated to invert members of the
80690 // _prime_ fields F(p) at a maximal speed
80691 BN.prototype._invmp = function _invmp (p) {
80692 assert(p.negative === 0);
80693 assert(!p.isZero());
80694
80695 var a = this;
80696 var b = p.clone();
80697
80698 if (a.negative !== 0) {
80699 a = a.umod(p);
80700 } else {
80701 a = a.clone();
80702 }
80703
80704 var x1 = new BN(1);
80705 var x2 = new BN(0);
80706
80707 var delta = b.clone();
80708
80709 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
80710 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
80711 if (i > 0) {
80712 a.iushrn(i);
80713 while (i-- > 0) {
80714 if (x1.isOdd()) {
80715 x1.iadd(delta);
80716 }
80717
80718 x1.iushrn(1);
80719 }
80720 }
80721
80722 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
80723 if (j > 0) {
80724 b.iushrn(j);
80725 while (j-- > 0) {
80726 if (x2.isOdd()) {
80727 x2.iadd(delta);
80728 }
80729
80730 x2.iushrn(1);
80731 }
80732 }
80733
80734 if (a.cmp(b) >= 0) {
80735 a.isub(b);
80736 x1.isub(x2);
80737 } else {
80738 b.isub(a);
80739 x2.isub(x1);
80740 }
80741 }
80742
80743 var res;
80744 if (a.cmpn(1) === 0) {
80745 res = x1;
80746 } else {
80747 res = x2;
80748 }
80749
80750 if (res.cmpn(0) < 0) {
80751 res.iadd(p);
80752 }
80753
80754 return res;
80755 };
80756
80757 BN.prototype.gcd = function gcd (num) {
80758 if (this.isZero()) return num.abs();
80759 if (num.isZero()) return this.abs();
80760
80761 var a = this.clone();
80762 var b = num.clone();
80763 a.negative = 0;
80764 b.negative = 0;
80765
80766 // Remove common factor of two
80767 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
80768 a.iushrn(1);
80769 b.iushrn(1);
80770 }
80771
80772 do {
80773 while (a.isEven()) {
80774 a.iushrn(1);
80775 }
80776 while (b.isEven()) {
80777 b.iushrn(1);
80778 }
80779
80780 var r = a.cmp(b);
80781 if (r < 0) {
80782 // Swap `a` and `b` to make `a` always bigger than `b`
80783 var t = a;
80784 a = b;
80785 b = t;
80786 } else if (r === 0 || b.cmpn(1) === 0) {
80787 break;
80788 }
80789
80790 a.isub(b);
80791 } while (true);
80792
80793 return b.iushln(shift);
80794 };
80795
80796 // Invert number in the field F(num)
80797 BN.prototype.invm = function invm (num) {
80798 return this.egcd(num).a.umod(num);
80799 };
80800
80801 BN.prototype.isEven = function isEven () {
80802 return (this.words[0] & 1) === 0;
80803 };
80804
80805 BN.prototype.isOdd = function isOdd () {
80806 return (this.words[0] & 1) === 1;
80807 };
80808
80809 // And first word and num
80810 BN.prototype.andln = function andln (num) {
80811 return this.words[0] & num;
80812 };
80813
80814 // Increment at the bit position in-line
80815 BN.prototype.bincn = function bincn (bit) {
80816 assert(typeof bit === 'number');
80817 var r = bit % 26;
80818 var s = (bit - r) / 26;
80819 var q = 1 << r;
80820
80821 // Fast case: bit is much higher than all existing words
80822 if (this.length <= s) {
80823 this._expand(s + 1);
80824 this.words[s] |= q;
80825 return this;
80826 }
80827
80828 // Add bit and propagate, if needed
80829 var carry = q;
80830 for (var i = s; carry !== 0 && i < this.length; i++) {
80831 var w = this.words[i] | 0;
80832 w += carry;
80833 carry = w >>> 26;
80834 w &= 0x3ffffff;
80835 this.words[i] = w;
80836 }
80837 if (carry !== 0) {
80838 this.words[i] = carry;
80839 this.length++;
80840 }
80841 return this;
80842 };
80843
80844 BN.prototype.isZero = function isZero () {
80845 return this.length === 1 && this.words[0] === 0;
80846 };
80847
80848 BN.prototype.cmpn = function cmpn (num) {
80849 var negative = num < 0;
80850
80851 if (this.negative !== 0 && !negative) return -1;
80852 if (this.negative === 0 && negative) return 1;
80853
80854 this.strip();
80855
80856 var res;
80857 if (this.length > 1) {
80858 res = 1;
80859 } else {
80860 if (negative) {
80861 num = -num;
80862 }
80863
80864 assert(num <= 0x3ffffff, 'Number is too big');
80865
80866 var w = this.words[0] | 0;
80867 res = w === num ? 0 : w < num ? -1 : 1;
80868 }
80869 if (this.negative !== 0) return -res | 0;
80870 return res;
80871 };
80872
80873 // Compare two numbers and return:
80874 // 1 - if `this` > `num`
80875 // 0 - if `this` == `num`
80876 // -1 - if `this` < `num`
80877 BN.prototype.cmp = function cmp (num) {
80878 if (this.negative !== 0 && num.negative === 0) return -1;
80879 if (this.negative === 0 && num.negative !== 0) return 1;
80880
80881 var res = this.ucmp(num);
80882 if (this.negative !== 0) return -res | 0;
80883 return res;
80884 };
80885
80886 // Unsigned comparison
80887 BN.prototype.ucmp = function ucmp (num) {
80888 // At this point both numbers have the same sign
80889 if (this.length > num.length) return 1;
80890 if (this.length < num.length) return -1;
80891
80892 var res = 0;
80893 for (var i = this.length - 1; i >= 0; i--) {
80894 var a = this.words[i] | 0;
80895 var b = num.words[i] | 0;
80896
80897 if (a === b) continue;
80898 if (a < b) {
80899 res = -1;
80900 } else if (a > b) {
80901 res = 1;
80902 }
80903 break;
80904 }
80905 return res;
80906 };
80907
80908 BN.prototype.gtn = function gtn (num) {
80909 return this.cmpn(num) === 1;
80910 };
80911
80912 BN.prototype.gt = function gt (num) {
80913 return this.cmp(num) === 1;
80914 };
80915
80916 BN.prototype.gten = function gten (num) {
80917 return this.cmpn(num) >= 0;
80918 };
80919
80920 BN.prototype.gte = function gte (num) {
80921 return this.cmp(num) >= 0;
80922 };
80923
80924 BN.prototype.ltn = function ltn (num) {
80925 return this.cmpn(num) === -1;
80926 };
80927
80928 BN.prototype.lt = function lt (num) {
80929 return this.cmp(num) === -1;
80930 };
80931
80932 BN.prototype.lten = function lten (num) {
80933 return this.cmpn(num) <= 0;
80934 };
80935
80936 BN.prototype.lte = function lte (num) {
80937 return this.cmp(num) <= 0;
80938 };
80939
80940 BN.prototype.eqn = function eqn (num) {
80941 return this.cmpn(num) === 0;
80942 };
80943
80944 BN.prototype.eq = function eq (num) {
80945 return this.cmp(num) === 0;
80946 };
80947
80948 //
80949 // A reduce context, could be using montgomery or something better, depending
80950 // on the `m` itself.
80951 //
80952 BN.red = function red (num) {
80953 return new Red(num);
80954 };
80955
80956 BN.prototype.toRed = function toRed (ctx) {
80957 assert(!this.red, 'Already a number in reduction context');
80958 assert(this.negative === 0, 'red works only with positives');
80959 return ctx.convertTo(this)._forceRed(ctx);
80960 };
80961
80962 BN.prototype.fromRed = function fromRed () {
80963 assert(this.red, 'fromRed works only with numbers in reduction context');
80964 return this.red.convertFrom(this);
80965 };
80966
80967 BN.prototype._forceRed = function _forceRed (ctx) {
80968 this.red = ctx;
80969 return this;
80970 };
80971
80972 BN.prototype.forceRed = function forceRed (ctx) {
80973 assert(!this.red, 'Already a number in reduction context');
80974 return this._forceRed(ctx);
80975 };
80976
80977 BN.prototype.redAdd = function redAdd (num) {
80978 assert(this.red, 'redAdd works only with red numbers');
80979 return this.red.add(this, num);
80980 };
80981
80982 BN.prototype.redIAdd = function redIAdd (num) {
80983 assert(this.red, 'redIAdd works only with red numbers');
80984 return this.red.iadd(this, num);
80985 };
80986
80987 BN.prototype.redSub = function redSub (num) {
80988 assert(this.red, 'redSub works only with red numbers');
80989 return this.red.sub(this, num);
80990 };
80991
80992 BN.prototype.redISub = function redISub (num) {
80993 assert(this.red, 'redISub works only with red numbers');
80994 return this.red.isub(this, num);
80995 };
80996
80997 BN.prototype.redShl = function redShl (num) {
80998 assert(this.red, 'redShl works only with red numbers');
80999 return this.red.shl(this, num);
81000 };
81001
81002 BN.prototype.redMul = function redMul (num) {
81003 assert(this.red, 'redMul works only with red numbers');
81004 this.red._verify2(this, num);
81005 return this.red.mul(this, num);
81006 };
81007
81008 BN.prototype.redIMul = function redIMul (num) {
81009 assert(this.red, 'redMul works only with red numbers');
81010 this.red._verify2(this, num);
81011 return this.red.imul(this, num);
81012 };
81013
81014 BN.prototype.redSqr = function redSqr () {
81015 assert(this.red, 'redSqr works only with red numbers');
81016 this.red._verify1(this);
81017 return this.red.sqr(this);
81018 };
81019
81020 BN.prototype.redISqr = function redISqr () {
81021 assert(this.red, 'redISqr works only with red numbers');
81022 this.red._verify1(this);
81023 return this.red.isqr(this);
81024 };
81025
81026 // Square root over p
81027 BN.prototype.redSqrt = function redSqrt () {
81028 assert(this.red, 'redSqrt works only with red numbers');
81029 this.red._verify1(this);
81030 return this.red.sqrt(this);
81031 };
81032
81033 BN.prototype.redInvm = function redInvm () {
81034 assert(this.red, 'redInvm works only with red numbers');
81035 this.red._verify1(this);
81036 return this.red.invm(this);
81037 };
81038
81039 // Return negative clone of `this` % `red modulo`
81040 BN.prototype.redNeg = function redNeg () {
81041 assert(this.red, 'redNeg works only with red numbers');
81042 this.red._verify1(this);
81043 return this.red.neg(this);
81044 };
81045
81046 BN.prototype.redPow = function redPow (num) {
81047 assert(this.red && !num.red, 'redPow(normalNum)');
81048 this.red._verify1(this);
81049 return this.red.pow(this, num);
81050 };
81051
81052 // Prime numbers with efficient reduction
81053 var primes = {
81054 k256: null,
81055 p224: null,
81056 p192: null,
81057 p25519: null
81058 };
81059
81060 // Pseudo-Mersenne prime
81061 function MPrime (name, p) {
81062 // P = 2 ^ N - K
81063 this.name = name;
81064 this.p = new BN(p, 16);
81065 this.n = this.p.bitLength();
81066 this.k = new BN(1).iushln(this.n).isub(this.p);
81067
81068 this.tmp = this._tmp();
81069 }
81070
81071 MPrime.prototype._tmp = function _tmp () {
81072 var tmp = new BN(null);
81073 tmp.words = new Array(Math.ceil(this.n / 13));
81074 return tmp;
81075 };
81076
81077 MPrime.prototype.ireduce = function ireduce (num) {
81078 // Assumes that `num` is less than `P^2`
81079 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
81080 var r = num;
81081 var rlen;
81082
81083 do {
81084 this.split(r, this.tmp);
81085 r = this.imulK(r);
81086 r = r.iadd(this.tmp);
81087 rlen = r.bitLength();
81088 } while (rlen > this.n);
81089
81090 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
81091 if (cmp === 0) {
81092 r.words[0] = 0;
81093 r.length = 1;
81094 } else if (cmp > 0) {
81095 r.isub(this.p);
81096 } else {
81097 r.strip();
81098 }
81099
81100 return r;
81101 };
81102
81103 MPrime.prototype.split = function split (input, out) {
81104 input.iushrn(this.n, 0, out);
81105 };
81106
81107 MPrime.prototype.imulK = function imulK (num) {
81108 return num.imul(this.k);
81109 };
81110
81111 function K256 () {
81112 MPrime.call(
81113 this,
81114 'k256',
81115 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
81116 }
81117 inherits(K256, MPrime);
81118
81119 K256.prototype.split = function split (input, output) {
81120 // 256 = 9 * 26 + 22
81121 var mask = 0x3fffff;
81122
81123 var outLen = Math.min(input.length, 9);
81124 for (var i = 0; i < outLen; i++) {
81125 output.words[i] = input.words[i];
81126 }
81127 output.length = outLen;
81128
81129 if (input.length <= 9) {
81130 input.words[0] = 0;
81131 input.length = 1;
81132 return;
81133 }
81134
81135 // Shift by 9 limbs
81136 var prev = input.words[9];
81137 output.words[output.length++] = prev & mask;
81138
81139 for (i = 10; i < input.length; i++) {
81140 var next = input.words[i] | 0;
81141 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
81142 prev = next;
81143 }
81144 prev >>>= 22;
81145 input.words[i - 10] = prev;
81146 if (prev === 0 && input.length > 10) {
81147 input.length -= 10;
81148 } else {
81149 input.length -= 9;
81150 }
81151 };
81152
81153 K256.prototype.imulK = function imulK (num) {
81154 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
81155 num.words[num.length] = 0;
81156 num.words[num.length + 1] = 0;
81157 num.length += 2;
81158
81159 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
81160 var lo = 0;
81161 for (var i = 0; i < num.length; i++) {
81162 var w = num.words[i] | 0;
81163 lo += w * 0x3d1;
81164 num.words[i] = lo & 0x3ffffff;
81165 lo = w * 0x40 + ((lo / 0x4000000) | 0);
81166 }
81167
81168 // Fast length reduction
81169 if (num.words[num.length - 1] === 0) {
81170 num.length--;
81171 if (num.words[num.length - 1] === 0) {
81172 num.length--;
81173 }
81174 }
81175 return num;
81176 };
81177
81178 function P224 () {
81179 MPrime.call(
81180 this,
81181 'p224',
81182 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
81183 }
81184 inherits(P224, MPrime);
81185
81186 function P192 () {
81187 MPrime.call(
81188 this,
81189 'p192',
81190 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
81191 }
81192 inherits(P192, MPrime);
81193
81194 function P25519 () {
81195 // 2 ^ 255 - 19
81196 MPrime.call(
81197 this,
81198 '25519',
81199 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
81200 }
81201 inherits(P25519, MPrime);
81202
81203 P25519.prototype.imulK = function imulK (num) {
81204 // K = 0x13
81205 var carry = 0;
81206 for (var i = 0; i < num.length; i++) {
81207 var hi = (num.words[i] | 0) * 0x13 + carry;
81208 var lo = hi & 0x3ffffff;
81209 hi >>>= 26;
81210
81211 num.words[i] = lo;
81212 carry = hi;
81213 }
81214 if (carry !== 0) {
81215 num.words[num.length++] = carry;
81216 }
81217 return num;
81218 };
81219
81220 // Exported mostly for testing purposes, use plain name instead
81221 BN._prime = function prime (name) {
81222 // Cached version of prime
81223 if (primes[name]) return primes[name];
81224
81225 var prime;
81226 if (name === 'k256') {
81227 prime = new K256();
81228 } else if (name === 'p224') {
81229 prime = new P224();
81230 } else if (name === 'p192') {
81231 prime = new P192();
81232 } else if (name === 'p25519') {
81233 prime = new P25519();
81234 } else {
81235 throw new Error('Unknown prime ' + name);
81236 }
81237 primes[name] = prime;
81238
81239 return prime;
81240 };
81241
81242 //
81243 // Base reduction engine
81244 //
81245 function Red (m) {
81246 if (typeof m === 'string') {
81247 var prime = BN._prime(m);
81248 this.m = prime.p;
81249 this.prime = prime;
81250 } else {
81251 assert(m.gtn(1), 'modulus must be greater than 1');
81252 this.m = m;
81253 this.prime = null;
81254 }
81255 }
81256
81257 Red.prototype._verify1 = function _verify1 (a) {
81258 assert(a.negative === 0, 'red works only with positives');
81259 assert(a.red, 'red works only with red numbers');
81260 };
81261
81262 Red.prototype._verify2 = function _verify2 (a, b) {
81263 assert((a.negative | b.negative) === 0, 'red works only with positives');
81264 assert(a.red && a.red === b.red,
81265 'red works only with red numbers');
81266 };
81267
81268 Red.prototype.imod = function imod (a) {
81269 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
81270 return a.umod(this.m)._forceRed(this);
81271 };
81272
81273 Red.prototype.neg = function neg (a) {
81274 if (a.isZero()) {
81275 return a.clone();
81276 }
81277
81278 return this.m.sub(a)._forceRed(this);
81279 };
81280
81281 Red.prototype.add = function add (a, b) {
81282 this._verify2(a, b);
81283
81284 var res = a.add(b);
81285 if (res.cmp(this.m) >= 0) {
81286 res.isub(this.m);
81287 }
81288 return res._forceRed(this);
81289 };
81290
81291 Red.prototype.iadd = function iadd (a, b) {
81292 this._verify2(a, b);
81293
81294 var res = a.iadd(b);
81295 if (res.cmp(this.m) >= 0) {
81296 res.isub(this.m);
81297 }
81298 return res;
81299 };
81300
81301 Red.prototype.sub = function sub (a, b) {
81302 this._verify2(a, b);
81303
81304 var res = a.sub(b);
81305 if (res.cmpn(0) < 0) {
81306 res.iadd(this.m);
81307 }
81308 return res._forceRed(this);
81309 };
81310
81311 Red.prototype.isub = function isub (a, b) {
81312 this._verify2(a, b);
81313
81314 var res = a.isub(b);
81315 if (res.cmpn(0) < 0) {
81316 res.iadd(this.m);
81317 }
81318 return res;
81319 };
81320
81321 Red.prototype.shl = function shl (a, num) {
81322 this._verify1(a);
81323 return this.imod(a.ushln(num));
81324 };
81325
81326 Red.prototype.imul = function imul (a, b) {
81327 this._verify2(a, b);
81328 return this.imod(a.imul(b));
81329 };
81330
81331 Red.prototype.mul = function mul (a, b) {
81332 this._verify2(a, b);
81333 return this.imod(a.mul(b));
81334 };
81335
81336 Red.prototype.isqr = function isqr (a) {
81337 return this.imul(a, a.clone());
81338 };
81339
81340 Red.prototype.sqr = function sqr (a) {
81341 return this.mul(a, a);
81342 };
81343
81344 Red.prototype.sqrt = function sqrt (a) {
81345 if (a.isZero()) return a.clone();
81346
81347 var mod3 = this.m.andln(3);
81348 assert(mod3 % 2 === 1);
81349
81350 // Fast case
81351 if (mod3 === 3) {
81352 var pow = this.m.add(new BN(1)).iushrn(2);
81353 return this.pow(a, pow);
81354 }
81355
81356 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
81357 //
81358 // Find Q and S, that Q * 2 ^ S = (P - 1)
81359 var q = this.m.subn(1);
81360 var s = 0;
81361 while (!q.isZero() && q.andln(1) === 0) {
81362 s++;
81363 q.iushrn(1);
81364 }
81365 assert(!q.isZero());
81366
81367 var one = new BN(1).toRed(this);
81368 var nOne = one.redNeg();
81369
81370 // Find quadratic non-residue
81371 // NOTE: Max is such because of generalized Riemann hypothesis.
81372 var lpow = this.m.subn(1).iushrn(1);
81373 var z = this.m.bitLength();
81374 z = new BN(2 * z * z).toRed(this);
81375
81376 while (this.pow(z, lpow).cmp(nOne) !== 0) {
81377 z.redIAdd(nOne);
81378 }
81379
81380 var c = this.pow(z, q);
81381 var r = this.pow(a, q.addn(1).iushrn(1));
81382 var t = this.pow(a, q);
81383 var m = s;
81384 while (t.cmp(one) !== 0) {
81385 var tmp = t;
81386 for (var i = 0; tmp.cmp(one) !== 0; i++) {
81387 tmp = tmp.redSqr();
81388 }
81389 assert(i < m);
81390 var b = this.pow(c, new BN(1).iushln(m - i - 1));
81391
81392 r = r.redMul(b);
81393 c = b.redSqr();
81394 t = t.redMul(c);
81395 m = i;
81396 }
81397
81398 return r;
81399 };
81400
81401 Red.prototype.invm = function invm (a) {
81402 var inv = a._invmp(this.m);
81403 if (inv.negative !== 0) {
81404 inv.negative = 0;
81405 return this.imod(inv).redNeg();
81406 } else {
81407 return this.imod(inv);
81408 }
81409 };
81410
81411 Red.prototype.pow = function pow (a, num) {
81412 if (num.isZero()) return new BN(1);
81413 if (num.cmpn(1) === 0) return a.clone();
81414
81415 var windowSize = 4;
81416 var wnd = new Array(1 << windowSize);
81417 wnd[0] = new BN(1).toRed(this);
81418 wnd[1] = a;
81419 for (var i = 2; i < wnd.length; i++) {
81420 wnd[i] = this.mul(wnd[i - 1], a);
81421 }
81422
81423 var res = wnd[0];
81424 var current = 0;
81425 var currentLen = 0;
81426 var start = num.bitLength() % 26;
81427 if (start === 0) {
81428 start = 26;
81429 }
81430
81431 for (i = num.length - 1; i >= 0; i--) {
81432 var word = num.words[i];
81433 for (var j = start - 1; j >= 0; j--) {
81434 var bit = (word >> j) & 1;
81435 if (res !== wnd[0]) {
81436 res = this.sqr(res);
81437 }
81438
81439 if (bit === 0 && current === 0) {
81440 currentLen = 0;
81441 continue;
81442 }
81443
81444 current <<= 1;
81445 current |= bit;
81446 currentLen++;
81447 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
81448
81449 res = this.mul(res, wnd[current]);
81450 currentLen = 0;
81451 current = 0;
81452 }
81453 start = 26;
81454 }
81455
81456 return res;
81457 };
81458
81459 Red.prototype.convertTo = function convertTo (num) {
81460 var r = num.umod(this.m);
81461
81462 return r === num ? r.clone() : r;
81463 };
81464
81465 Red.prototype.convertFrom = function convertFrom (num) {
81466 var res = num.clone();
81467 res.red = null;
81468 return res;
81469 };
81470
81471 //
81472 // Montgomery method engine
81473 //
81474
81475 BN.mont = function mont (num) {
81476 return new Mont(num);
81477 };
81478
81479 function Mont (m) {
81480 Red.call(this, m);
81481
81482 this.shift = this.m.bitLength();
81483 if (this.shift % 26 !== 0) {
81484 this.shift += 26 - (this.shift % 26);
81485 }
81486
81487 this.r = new BN(1).iushln(this.shift);
81488 this.r2 = this.imod(this.r.sqr());
81489 this.rinv = this.r._invmp(this.m);
81490
81491 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
81492 this.minv = this.minv.umod(this.r);
81493 this.minv = this.r.sub(this.minv);
81494 }
81495 inherits(Mont, Red);
81496
81497 Mont.prototype.convertTo = function convertTo (num) {
81498 return this.imod(num.ushln(this.shift));
81499 };
81500
81501 Mont.prototype.convertFrom = function convertFrom (num) {
81502 var r = this.imod(num.mul(this.rinv));
81503 r.red = null;
81504 return r;
81505 };
81506
81507 Mont.prototype.imul = function imul (a, b) {
81508 if (a.isZero() || b.isZero()) {
81509 a.words[0] = 0;
81510 a.length = 1;
81511 return a;
81512 }
81513
81514 var t = a.imul(b);
81515 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
81516 var u = t.isub(c).iushrn(this.shift);
81517 var res = u;
81518
81519 if (u.cmp(this.m) >= 0) {
81520 res = u.isub(this.m);
81521 } else if (u.cmpn(0) < 0) {
81522 res = u.iadd(this.m);
81523 }
81524
81525 return res._forceRed(this);
81526 };
81527
81528 Mont.prototype.mul = function mul (a, b) {
81529 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
81530
81531 var t = a.mul(b);
81532 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
81533 var u = t.isub(c).iushrn(this.shift);
81534 var res = u;
81535 if (u.cmp(this.m) >= 0) {
81536 res = u.isub(this.m);
81537 } else if (u.cmpn(0) < 0) {
81538 res = u.iadd(this.m);
81539 }
81540
81541 return res._forceRed(this);
81542 };
81543
81544 Mont.prototype.invm = function invm (a) {
81545 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
81546 var res = this.imod(a._invmp(this.m).mul(this.r2));
81547 return res._forceRed(this);
81548 };
81549 })(typeof module === 'undefined' || module, this);
81550
81551 },{}],34:[function(require,module,exports){
81552 var r;
81553
81554 module.exports = function rand(len) {
81555 if (!r)
81556 r = new Rand(null);
81557
81558 return r.generate(len);
81559 };
81560
81561 function Rand(rand) {
81562 this.rand = rand;
81563 }
81564 module.exports.Rand = Rand;
81565
81566 Rand.prototype.generate = function generate(len) {
81567 return this._rand(len);
81568 };
81569
81570 if (typeof self === 'object') {
81571 if (self.crypto && self.crypto.getRandomValues) {
81572 // Modern browsers
81573 Rand.prototype._rand = function _rand(n) {
81574 var arr = new Uint8Array(n);
81575 self.crypto.getRandomValues(arr);
81576 return arr;
81577 };
81578 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
81579 // IE
81580 Rand.prototype._rand = function _rand(n) {
81581 var arr = new Uint8Array(n);
81582 self.msCrypto.getRandomValues(arr);
81583 return arr;
81584 };
81585 } else {
81586 // Old junk
81587 Rand.prototype._rand = function() {
81588 throw new Error('Not implemented yet');
81589 };
81590 }
81591 } else {
81592 // Node.js or Web worker with no crypto support
81593 try {
81594 var crypto = require('crypto');
81595
81596 Rand.prototype._rand = function _rand(n) {
81597 return crypto.randomBytes(n);
81598 };
81599 } catch (e) {
81600 // Emulate crypto API using randy
81601 Rand.prototype._rand = function _rand(n) {
81602 var res = new Uint8Array(n);
81603 for (var i = 0; i < res.length; i++)
81604 res[i] = this.rand.getByte();
81605 return res;
81606 };
81607 }
81608 }
81609
81610 },{"crypto":3}],35:[function(require,module,exports){
81611 (function (Buffer){
81612 var Transform = require('stream').Transform
81613 var inherits = require('inherits')
81614 var StringDecoder = require('string_decoder').StringDecoder
81615 module.exports = CipherBase
81616 inherits(CipherBase, Transform)
81617 function CipherBase (hashMode) {
81618 Transform.call(this)
81619 this.hashMode = typeof hashMode === 'string'
81620 if (this.hashMode) {
81621 this[hashMode] = this._finalOrDigest
81622 } else {
81623 this.final = this._finalOrDigest
81624 }
81625 this._decoder = null
81626 this._encoding = null
81627 }
81628 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
81629 if (typeof data === 'string') {
81630 data = new Buffer(data, inputEnc)
81631 }
81632 var outData = this._update(data)
81633 if (this.hashMode) {
81634 return this
81635 }
81636 if (outputEnc) {
81637 outData = this._toString(outData, outputEnc)
81638 }
81639 return outData
81640 }
81641
81642 CipherBase.prototype.setAutoPadding = function () {}
81643
81644 CipherBase.prototype.getAuthTag = function () {
81645 throw new Error('trying to get auth tag in unsupported state')
81646 }
81647
81648 CipherBase.prototype.setAuthTag = function () {
81649 throw new Error('trying to set auth tag in unsupported state')
81650 }
81651
81652 CipherBase.prototype.setAAD = function () {
81653 throw new Error('trying to set aad in unsupported state')
81654 }
81655
81656 CipherBase.prototype._transform = function (data, _, next) {
81657 var err
81658 try {
81659 if (this.hashMode) {
81660 this._update(data)
81661 } else {
81662 this.push(this._update(data))
81663 }
81664 } catch (e) {
81665 err = e
81666 } finally {
81667 next(err)
81668 }
81669 }
81670 CipherBase.prototype._flush = function (done) {
81671 var err
81672 try {
81673 this.push(this._final())
81674 } catch (e) {
81675 err = e
81676 } finally {
81677 done(err)
81678 }
81679 }
81680 CipherBase.prototype._finalOrDigest = function (outputEnc) {
81681 var outData = this._final() || new Buffer('')
81682 if (outputEnc) {
81683 outData = this._toString(outData, outputEnc, true)
81684 }
81685 return outData
81686 }
81687
81688 CipherBase.prototype._toString = function (value, enc, fin) {
81689 if (!this._decoder) {
81690 this._decoder = new StringDecoder(enc)
81691 this._encoding = enc
81692 }
81693 if (this._encoding !== enc) {
81694 throw new Error('can\'t switch encodings')
81695 }
81696 var out = this._decoder.write(value)
81697 if (fin) {
81698 out += this._decoder.end()
81699 }
81700 return out
81701 }
81702
81703 }).call(this,require("buffer").Buffer)
81704 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
81705 (function (Buffer){
81706 'use strict';
81707 var inherits = require('inherits')
81708 var md5 = require('./md5')
81709 var rmd160 = require('ripemd160')
81710 var sha = require('sha.js')
81711
81712 var Base = require('cipher-base')
81713
81714 function HashNoConstructor(hash) {
81715 Base.call(this, 'digest')
81716
81717 this._hash = hash
81718 this.buffers = []
81719 }
81720
81721 inherits(HashNoConstructor, Base)
81722
81723 HashNoConstructor.prototype._update = function (data) {
81724 this.buffers.push(data)
81725 }
81726
81727 HashNoConstructor.prototype._final = function () {
81728 var buf = Buffer.concat(this.buffers)
81729 var r = this._hash(buf)
81730 this.buffers = null
81731
81732 return r
81733 }
81734
81735 function Hash(hash) {
81736 Base.call(this, 'digest')
81737
81738 this._hash = hash
81739 }
81740
81741 inherits(Hash, Base)
81742
81743 Hash.prototype._update = function (data) {
81744 this._hash.update(data)
81745 }
81746
81747 Hash.prototype._final = function () {
81748 return this._hash.digest()
81749 }
81750
81751 module.exports = function createHash (alg) {
81752 alg = alg.toLowerCase()
81753 if ('md5' === alg) return new HashNoConstructor(md5)
81754 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
81755
81756 return new Hash(sha(alg))
81757 }
81758
81759 }).call(this,require("buffer").Buffer)
81760 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
81761 (function (Buffer){
81762 'use strict';
81763 var intSize = 4;
81764 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
81765 var chrsz = 8;
81766
81767 function toArray(buf, bigEndian) {
81768 if ((buf.length % intSize) !== 0) {
81769 var len = buf.length + (intSize - (buf.length % intSize));
81770 buf = Buffer.concat([buf, zeroBuffer], len);
81771 }
81772
81773 var arr = [];
81774 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
81775 for (var i = 0; i < buf.length; i += intSize) {
81776 arr.push(fn.call(buf, i));
81777 }
81778 return arr;
81779 }
81780
81781 function toBuffer(arr, size, bigEndian) {
81782 var buf = new Buffer(size);
81783 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
81784 for (var i = 0; i < arr.length; i++) {
81785 fn.call(buf, arr[i], i * 4, true);
81786 }
81787 return buf;
81788 }
81789
81790 function hash(buf, fn, hashSize, bigEndian) {
81791 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
81792 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
81793 return toBuffer(arr, hashSize, bigEndian);
81794 }
81795 exports.hash = hash;
81796 }).call(this,require("buffer").Buffer)
81797 },{"buffer":5}],38:[function(require,module,exports){
81798 'use strict';
81799 /*
81800 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
81801 * Digest Algorithm, as defined in RFC 1321.
81802 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
81803 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
81804 * Distributed under the BSD License
81805 * See http://pajhome.org.uk/crypt/md5 for more info.
81806 */
81807
81808 var helpers = require('./helpers');
81809
81810 /*
81811 * Calculate the MD5 of an array of little-endian words, and a bit length
81812 */
81813 function core_md5(x, len)
81814 {
81815 /* append padding */
81816 x[len >> 5] |= 0x80 << ((len) % 32);
81817 x[(((len + 64) >>> 9) << 4) + 14] = len;
81818
81819 var a = 1732584193;
81820 var b = -271733879;
81821 var c = -1732584194;
81822 var d = 271733878;
81823
81824 for(var i = 0; i < x.length; i += 16)
81825 {
81826 var olda = a;
81827 var oldb = b;
81828 var oldc = c;
81829 var oldd = d;
81830
81831 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
81832 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
81833 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
81834 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
81835 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
81836 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
81837 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
81838 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
81839 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
81840 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
81841 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
81842 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
81843 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
81844 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
81845 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
81846 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
81847
81848 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
81849 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
81850 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
81851 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
81852 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
81853 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
81854 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
81855 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
81856 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
81857 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
81858 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
81859 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
81860 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
81861 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
81862 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
81863 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
81864
81865 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
81866 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
81867 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
81868 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
81869 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
81870 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
81871 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
81872 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
81873 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
81874 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
81875 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
81876 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
81877 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
81878 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
81879 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
81880 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
81881
81882 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
81883 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
81884 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
81885 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
81886 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
81887 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
81888 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
81889 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
81890 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
81891 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
81892 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
81893 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
81894 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
81895 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
81896 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
81897 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
81898
81899 a = safe_add(a, olda);
81900 b = safe_add(b, oldb);
81901 c = safe_add(c, oldc);
81902 d = safe_add(d, oldd);
81903 }
81904 return Array(a, b, c, d);
81905
81906 }
81907
81908 /*
81909 * These functions implement the four basic operations the algorithm uses.
81910 */
81911 function md5_cmn(q, a, b, x, s, t)
81912 {
81913 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
81914 }
81915 function md5_ff(a, b, c, d, x, s, t)
81916 {
81917 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
81918 }
81919 function md5_gg(a, b, c, d, x, s, t)
81920 {
81921 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
81922 }
81923 function md5_hh(a, b, c, d, x, s, t)
81924 {
81925 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
81926 }
81927 function md5_ii(a, b, c, d, x, s, t)
81928 {
81929 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
81930 }
81931
81932 /*
81933 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
81934 * to work around bugs in some JS interpreters.
81935 */
81936 function safe_add(x, y)
81937 {
81938 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
81939 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
81940 return (msw << 16) | (lsw & 0xFFFF);
81941 }
81942
81943 /*
81944 * Bitwise rotate a 32-bit number to the left.
81945 */
81946 function bit_rol(num, cnt)
81947 {
81948 return (num << cnt) | (num >>> (32 - cnt));
81949 }
81950
81951 module.exports = function md5(buf) {
81952 return helpers.hash(buf, core_md5, 16);
81953 };
81954 },{"./helpers":37}],39:[function(require,module,exports){
81955 'use strict';
81956
81957 var elliptic = exports;
81958
81959 elliptic.version = require('../package.json').version;
81960 elliptic.utils = require('./elliptic/utils');
81961 elliptic.rand = require('brorand');
81962 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
81963 elliptic.curve = require('./elliptic/curve');
81964 elliptic.curves = require('./elliptic/curves');
81965
81966 // Protocols
81967 elliptic.ec = require('./elliptic/ec');
81968 elliptic.eddsa = require('./elliptic/eddsa');
81969
81970 },{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
81971 'use strict';
81972
81973 var BN = require('bn.js');
81974 var elliptic = require('../../elliptic');
81975 var utils = elliptic.utils;
81976 var getNAF = utils.getNAF;
81977 var getJSF = utils.getJSF;
81978 var assert = utils.assert;
81979
81980 function BaseCurve(type, conf) {
81981 this.type = type;
81982 this.p = new BN(conf.p, 16);
81983
81984 // Use Montgomery, when there is no fast reduction for the prime
81985 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
81986
81987 // Useful for many curves
81988 this.zero = new BN(0).toRed(this.red);
81989 this.one = new BN(1).toRed(this.red);
81990 this.two = new BN(2).toRed(this.red);
81991
81992 // Curve configuration, optional
81993 this.n = conf.n && new BN(conf.n, 16);
81994 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
81995
81996 // Temporary arrays
81997 this._wnafT1 = new Array(4);
81998 this._wnafT2 = new Array(4);
81999 this._wnafT3 = new Array(4);
82000 this._wnafT4 = new Array(4);
82001
82002 // Generalized Greg Maxwell's trick
82003 var adjustCount = this.n && this.p.div(this.n);
82004 if (!adjustCount || adjustCount.cmpn(100) > 0) {
82005 this.redN = null;
82006 } else {
82007 this._maxwellTrick = true;
82008 this.redN = this.n.toRed(this.red);
82009 }
82010 }
82011 module.exports = BaseCurve;
82012
82013 BaseCurve.prototype.point = function point() {
82014 throw new Error('Not implemented');
82015 };
82016
82017 BaseCurve.prototype.validate = function validate() {
82018 throw new Error('Not implemented');
82019 };
82020
82021 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
82022 assert(p.precomputed);
82023 var doubles = p._getDoubles();
82024
82025 var naf = getNAF(k, 1);
82026 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
82027 I /= 3;
82028
82029 // Translate into more windowed form
82030 var repr = [];
82031 for (var j = 0; j < naf.length; j += doubles.step) {
82032 var nafW = 0;
82033 for (var k = j + doubles.step - 1; k >= j; k--)
82034 nafW = (nafW << 1) + naf[k];
82035 repr.push(nafW);
82036 }
82037
82038 var a = this.jpoint(null, null, null);
82039 var b = this.jpoint(null, null, null);
82040 for (var i = I; i > 0; i--) {
82041 for (var j = 0; j < repr.length; j++) {
82042 var nafW = repr[j];
82043 if (nafW === i)
82044 b = b.mixedAdd(doubles.points[j]);
82045 else if (nafW === -i)
82046 b = b.mixedAdd(doubles.points[j].neg());
82047 }
82048 a = a.add(b);
82049 }
82050 return a.toP();
82051 };
82052
82053 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
82054 var w = 4;
82055
82056 // Precompute window
82057 var nafPoints = p._getNAFPoints(w);
82058 w = nafPoints.wnd;
82059 var wnd = nafPoints.points;
82060
82061 // Get NAF form
82062 var naf = getNAF(k, w);
82063
82064 // Add `this`*(N+1) for every w-NAF index
82065 var acc = this.jpoint(null, null, null);
82066 for (var i = naf.length - 1; i >= 0; i--) {
82067 // Count zeroes
82068 for (var k = 0; i >= 0 && naf[i] === 0; i--)
82069 k++;
82070 if (i >= 0)
82071 k++;
82072 acc = acc.dblp(k);
82073
82074 if (i < 0)
82075 break;
82076 var z = naf[i];
82077 assert(z !== 0);
82078 if (p.type === 'affine') {
82079 // J +- P
82080 if (z > 0)
82081 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
82082 else
82083 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
82084 } else {
82085 // J +- J
82086 if (z > 0)
82087 acc = acc.add(wnd[(z - 1) >> 1]);
82088 else
82089 acc = acc.add(wnd[(-z - 1) >> 1].neg());
82090 }
82091 }
82092 return p.type === 'affine' ? acc.toP() : acc;
82093 };
82094
82095 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
82096 points,
82097 coeffs,
82098 len,
82099 jacobianResult) {
82100 var wndWidth = this._wnafT1;
82101 var wnd = this._wnafT2;
82102 var naf = this._wnafT3;
82103
82104 // Fill all arrays
82105 var max = 0;
82106 for (var i = 0; i < len; i++) {
82107 var p = points[i];
82108 var nafPoints = p._getNAFPoints(defW);
82109 wndWidth[i] = nafPoints.wnd;
82110 wnd[i] = nafPoints.points;
82111 }
82112
82113 // Comb small window NAFs
82114 for (var i = len - 1; i >= 1; i -= 2) {
82115 var a = i - 1;
82116 var b = i;
82117 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
82118 naf[a] = getNAF(coeffs[a], wndWidth[a]);
82119 naf[b] = getNAF(coeffs[b], wndWidth[b]);
82120 max = Math.max(naf[a].length, max);
82121 max = Math.max(naf[b].length, max);
82122 continue;
82123 }
82124
82125 var comb = [
82126 points[a], /* 1 */
82127 null, /* 3 */
82128 null, /* 5 */
82129 points[b] /* 7 */
82130 ];
82131
82132 // Try to avoid Projective points, if possible
82133 if (points[a].y.cmp(points[b].y) === 0) {
82134 comb[1] = points[a].add(points[b]);
82135 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
82136 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
82137 comb[1] = points[a].toJ().mixedAdd(points[b]);
82138 comb[2] = points[a].add(points[b].neg());
82139 } else {
82140 comb[1] = points[a].toJ().mixedAdd(points[b]);
82141 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
82142 }
82143
82144 var index = [
82145 -3, /* -1 -1 */
82146 -1, /* -1 0 */
82147 -5, /* -1 1 */
82148 -7, /* 0 -1 */
82149 0, /* 0 0 */
82150 7, /* 0 1 */
82151 5, /* 1 -1 */
82152 1, /* 1 0 */
82153 3 /* 1 1 */
82154 ];
82155
82156 var jsf = getJSF(coeffs[a], coeffs[b]);
82157 max = Math.max(jsf[0].length, max);
82158 naf[a] = new Array(max);
82159 naf[b] = new Array(max);
82160 for (var j = 0; j < max; j++) {
82161 var ja = jsf[0][j] | 0;
82162 var jb = jsf[1][j] | 0;
82163
82164 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
82165 naf[b][j] = 0;
82166 wnd[a] = comb;
82167 }
82168 }
82169
82170 var acc = this.jpoint(null, null, null);
82171 var tmp = this._wnafT4;
82172 for (var i = max; i >= 0; i--) {
82173 var k = 0;
82174
82175 while (i >= 0) {
82176 var zero = true;
82177 for (var j = 0; j < len; j++) {
82178 tmp[j] = naf[j][i] | 0;
82179 if (tmp[j] !== 0)
82180 zero = false;
82181 }
82182 if (!zero)
82183 break;
82184 k++;
82185 i--;
82186 }
82187 if (i >= 0)
82188 k++;
82189 acc = acc.dblp(k);
82190 if (i < 0)
82191 break;
82192
82193 for (var j = 0; j < len; j++) {
82194 var z = tmp[j];
82195 var p;
82196 if (z === 0)
82197 continue;
82198 else if (z > 0)
82199 p = wnd[j][(z - 1) >> 1];
82200 else if (z < 0)
82201 p = wnd[j][(-z - 1) >> 1].neg();
82202
82203 if (p.type === 'affine')
82204 acc = acc.mixedAdd(p);
82205 else
82206 acc = acc.add(p);
82207 }
82208 }
82209 // Zeroify references
82210 for (var i = 0; i < len; i++)
82211 wnd[i] = null;
82212
82213 if (jacobianResult)
82214 return acc;
82215 else
82216 return acc.toP();
82217 };
82218
82219 function BasePoint(curve, type) {
82220 this.curve = curve;
82221 this.type = type;
82222 this.precomputed = null;
82223 }
82224 BaseCurve.BasePoint = BasePoint;
82225
82226 BasePoint.prototype.eq = function eq(/*other*/) {
82227 throw new Error('Not implemented');
82228 };
82229
82230 BasePoint.prototype.validate = function validate() {
82231 return this.curve.validate(this);
82232 };
82233
82234 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
82235 bytes = utils.toArray(bytes, enc);
82236
82237 var len = this.p.byteLength();
82238
82239 // uncompressed, hybrid-odd, hybrid-even
82240 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
82241 bytes.length - 1 === 2 * len) {
82242 if (bytes[0] === 0x06)
82243 assert(bytes[bytes.length - 1] % 2 === 0);
82244 else if (bytes[0] === 0x07)
82245 assert(bytes[bytes.length - 1] % 2 === 1);
82246
82247 var res = this.point(bytes.slice(1, 1 + len),
82248 bytes.slice(1 + len, 1 + 2 * len));
82249
82250 return res;
82251 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
82252 bytes.length - 1 === len) {
82253 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
82254 }
82255 throw new Error('Unknown point format');
82256 };
82257
82258 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
82259 return this.encode(enc, true);
82260 };
82261
82262 BasePoint.prototype._encode = function _encode(compact) {
82263 var len = this.curve.p.byteLength();
82264 var x = this.getX().toArray('be', len);
82265
82266 if (compact)
82267 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
82268
82269 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
82270 };
82271
82272 BasePoint.prototype.encode = function encode(enc, compact) {
82273 return utils.encode(this._encode(compact), enc);
82274 };
82275
82276 BasePoint.prototype.precompute = function precompute(power) {
82277 if (this.precomputed)
82278 return this;
82279
82280 var precomputed = {
82281 doubles: null,
82282 naf: null,
82283 beta: null
82284 };
82285 precomputed.naf = this._getNAFPoints(8);
82286 precomputed.doubles = this._getDoubles(4, power);
82287 precomputed.beta = this._getBeta();
82288 this.precomputed = precomputed;
82289
82290 return this;
82291 };
82292
82293 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
82294 if (!this.precomputed)
82295 return false;
82296
82297 var doubles = this.precomputed.doubles;
82298 if (!doubles)
82299 return false;
82300
82301 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
82302 };
82303
82304 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
82305 if (this.precomputed && this.precomputed.doubles)
82306 return this.precomputed.doubles;
82307
82308 var doubles = [ this ];
82309 var acc = this;
82310 for (var i = 0; i < power; i += step) {
82311 for (var j = 0; j < step; j++)
82312 acc = acc.dbl();
82313 doubles.push(acc);
82314 }
82315 return {
82316 step: step,
82317 points: doubles
82318 };
82319 };
82320
82321 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
82322 if (this.precomputed && this.precomputed.naf)
82323 return this.precomputed.naf;
82324
82325 var res = [ this ];
82326 var max = (1 << wnd) - 1;
82327 var dbl = max === 1 ? null : this.dbl();
82328 for (var i = 1; i < max; i++)
82329 res[i] = res[i - 1].add(dbl);
82330 return {
82331 wnd: wnd,
82332 points: res
82333 };
82334 };
82335
82336 BasePoint.prototype._getBeta = function _getBeta() {
82337 return null;
82338 };
82339
82340 BasePoint.prototype.dblp = function dblp(k) {
82341 var r = this;
82342 for (var i = 0; i < k; i++)
82343 r = r.dbl();
82344 return r;
82345 };
82346
82347 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
82348 'use strict';
82349
82350 var curve = require('../curve');
82351 var elliptic = require('../../elliptic');
82352 var BN = require('bn.js');
82353 var inherits = require('inherits');
82354 var Base = curve.base;
82355
82356 var assert = elliptic.utils.assert;
82357
82358 function EdwardsCurve(conf) {
82359 // NOTE: Important as we are creating point in Base.call()
82360 this.twisted = (conf.a | 0) !== 1;
82361 this.mOneA = this.twisted && (conf.a | 0) === -1;
82362 this.extended = this.mOneA;
82363
82364 Base.call(this, 'edwards', conf);
82365
82366 this.a = new BN(conf.a, 16).umod(this.red.m);
82367 this.a = this.a.toRed(this.red);
82368 this.c = new BN(conf.c, 16).toRed(this.red);
82369 this.c2 = this.c.redSqr();
82370 this.d = new BN(conf.d, 16).toRed(this.red);
82371 this.dd = this.d.redAdd(this.d);
82372
82373 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
82374 this.oneC = (conf.c | 0) === 1;
82375 }
82376 inherits(EdwardsCurve, Base);
82377 module.exports = EdwardsCurve;
82378
82379 EdwardsCurve.prototype._mulA = function _mulA(num) {
82380 if (this.mOneA)
82381 return num.redNeg();
82382 else
82383 return this.a.redMul(num);
82384 };
82385
82386 EdwardsCurve.prototype._mulC = function _mulC(num) {
82387 if (this.oneC)
82388 return num;
82389 else
82390 return this.c.redMul(num);
82391 };
82392
82393 // Just for compatibility with Short curve
82394 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
82395 return this.point(x, y, z, t);
82396 };
82397
82398 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
82399 x = new BN(x, 16);
82400 if (!x.red)
82401 x = x.toRed(this.red);
82402
82403 var x2 = x.redSqr();
82404 var rhs = this.c2.redSub(this.a.redMul(x2));
82405 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
82406
82407 var y2 = rhs.redMul(lhs.redInvm());
82408 var y = y2.redSqrt();
82409 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
82410 throw new Error('invalid point');
82411
82412 var isOdd = y.fromRed().isOdd();
82413 if (odd && !isOdd || !odd && isOdd)
82414 y = y.redNeg();
82415
82416 return this.point(x, y);
82417 };
82418
82419 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
82420 y = new BN(y, 16);
82421 if (!y.red)
82422 y = y.toRed(this.red);
82423
82424 // x^2 = (y^2 - 1) / (d y^2 + 1)
82425 var y2 = y.redSqr();
82426 var lhs = y2.redSub(this.one);
82427 var rhs = y2.redMul(this.d).redAdd(this.one);
82428 var x2 = lhs.redMul(rhs.redInvm());
82429
82430 if (x2.cmp(this.zero) === 0) {
82431 if (odd)
82432 throw new Error('invalid point');
82433 else
82434 return this.point(this.zero, y);
82435 }
82436
82437 var x = x2.redSqrt();
82438 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
82439 throw new Error('invalid point');
82440
82441 if (x.isOdd() !== odd)
82442 x = x.redNeg();
82443
82444 return this.point(x, y);
82445 };
82446
82447 EdwardsCurve.prototype.validate = function validate(point) {
82448 if (point.isInfinity())
82449 return true;
82450
82451 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
82452 point.normalize();
82453
82454 var x2 = point.x.redSqr();
82455 var y2 = point.y.redSqr();
82456 var lhs = x2.redMul(this.a).redAdd(y2);
82457 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
82458
82459 return lhs.cmp(rhs) === 0;
82460 };
82461
82462 function Point(curve, x, y, z, t) {
82463 Base.BasePoint.call(this, curve, 'projective');
82464 if (x === null && y === null && z === null) {
82465 this.x = this.curve.zero;
82466 this.y = this.curve.one;
82467 this.z = this.curve.one;
82468 this.t = this.curve.zero;
82469 this.zOne = true;
82470 } else {
82471 this.x = new BN(x, 16);
82472 this.y = new BN(y, 16);
82473 this.z = z ? new BN(z, 16) : this.curve.one;
82474 this.t = t && new BN(t, 16);
82475 if (!this.x.red)
82476 this.x = this.x.toRed(this.curve.red);
82477 if (!this.y.red)
82478 this.y = this.y.toRed(this.curve.red);
82479 if (!this.z.red)
82480 this.z = this.z.toRed(this.curve.red);
82481 if (this.t && !this.t.red)
82482 this.t = this.t.toRed(this.curve.red);
82483 this.zOne = this.z === this.curve.one;
82484
82485 // Use extended coordinates
82486 if (this.curve.extended && !this.t) {
82487 this.t = this.x.redMul(this.y);
82488 if (!this.zOne)
82489 this.t = this.t.redMul(this.z.redInvm());
82490 }
82491 }
82492 }
82493 inherits(Point, Base.BasePoint);
82494
82495 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
82496 return Point.fromJSON(this, obj);
82497 };
82498
82499 EdwardsCurve.prototype.point = function point(x, y, z, t) {
82500 return new Point(this, x, y, z, t);
82501 };
82502
82503 Point.fromJSON = function fromJSON(curve, obj) {
82504 return new Point(curve, obj[0], obj[1], obj[2]);
82505 };
82506
82507 Point.prototype.inspect = function inspect() {
82508 if (this.isInfinity())
82509 return '<EC Point Infinity>';
82510 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
82511 ' y: ' + this.y.fromRed().toString(16, 2) +
82512 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
82513 };
82514
82515 Point.prototype.isInfinity = function isInfinity() {
82516 // XXX This code assumes that zero is always zero in red
82517 return this.x.cmpn(0) === 0 &&
82518 this.y.cmp(this.z) === 0;
82519 };
82520
82521 Point.prototype._extDbl = function _extDbl() {
82522 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
82523 // #doubling-dbl-2008-hwcd
82524 // 4M + 4S
82525
82526 // A = X1^2
82527 var a = this.x.redSqr();
82528 // B = Y1^2
82529 var b = this.y.redSqr();
82530 // C = 2 * Z1^2
82531 var c = this.z.redSqr();
82532 c = c.redIAdd(c);
82533 // D = a * A
82534 var d = this.curve._mulA(a);
82535 // E = (X1 + Y1)^2 - A - B
82536 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
82537 // G = D + B
82538 var g = d.redAdd(b);
82539 // F = G - C
82540 var f = g.redSub(c);
82541 // H = D - B
82542 var h = d.redSub(b);
82543 // X3 = E * F
82544 var nx = e.redMul(f);
82545 // Y3 = G * H
82546 var ny = g.redMul(h);
82547 // T3 = E * H
82548 var nt = e.redMul(h);
82549 // Z3 = F * G
82550 var nz = f.redMul(g);
82551 return this.curve.point(nx, ny, nz, nt);
82552 };
82553
82554 Point.prototype._projDbl = function _projDbl() {
82555 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
82556 // #doubling-dbl-2008-bbjlp
82557 // #doubling-dbl-2007-bl
82558 // and others
82559 // Generally 3M + 4S or 2M + 4S
82560
82561 // B = (X1 + Y1)^2
82562 var b = this.x.redAdd(this.y).redSqr();
82563 // C = X1^2
82564 var c = this.x.redSqr();
82565 // D = Y1^2
82566 var d = this.y.redSqr();
82567
82568 var nx;
82569 var ny;
82570 var nz;
82571 if (this.curve.twisted) {
82572 // E = a * C
82573 var e = this.curve._mulA(c);
82574 // F = E + D
82575 var f = e.redAdd(d);
82576 if (this.zOne) {
82577 // X3 = (B - C - D) * (F - 2)
82578 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
82579 // Y3 = F * (E - D)
82580 ny = f.redMul(e.redSub(d));
82581 // Z3 = F^2 - 2 * F
82582 nz = f.redSqr().redSub(f).redSub(f);
82583 } else {
82584 // H = Z1^2
82585 var h = this.z.redSqr();
82586 // J = F - 2 * H
82587 var j = f.redSub(h).redISub(h);
82588 // X3 = (B-C-D)*J
82589 nx = b.redSub(c).redISub(d).redMul(j);
82590 // Y3 = F * (E - D)
82591 ny = f.redMul(e.redSub(d));
82592 // Z3 = F * J
82593 nz = f.redMul(j);
82594 }
82595 } else {
82596 // E = C + D
82597 var e = c.redAdd(d);
82598 // H = (c * Z1)^2
82599 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
82600 // J = E - 2 * H
82601 var j = e.redSub(h).redSub(h);
82602 // X3 = c * (B - E) * J
82603 nx = this.curve._mulC(b.redISub(e)).redMul(j);
82604 // Y3 = c * E * (C - D)
82605 ny = this.curve._mulC(e).redMul(c.redISub(d));
82606 // Z3 = E * J
82607 nz = e.redMul(j);
82608 }
82609 return this.curve.point(nx, ny, nz);
82610 };
82611
82612 Point.prototype.dbl = function dbl() {
82613 if (this.isInfinity())
82614 return this;
82615
82616 // Double in extended coordinates
82617 if (this.curve.extended)
82618 return this._extDbl();
82619 else
82620 return this._projDbl();
82621 };
82622
82623 Point.prototype._extAdd = function _extAdd(p) {
82624 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
82625 // #addition-add-2008-hwcd-3
82626 // 8M
82627
82628 // A = (Y1 - X1) * (Y2 - X2)
82629 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
82630 // B = (Y1 + X1) * (Y2 + X2)
82631 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
82632 // C = T1 * k * T2
82633 var c = this.t.redMul(this.curve.dd).redMul(p.t);
82634 // D = Z1 * 2 * Z2
82635 var d = this.z.redMul(p.z.redAdd(p.z));
82636 // E = B - A
82637 var e = b.redSub(a);
82638 // F = D - C
82639 var f = d.redSub(c);
82640 // G = D + C
82641 var g = d.redAdd(c);
82642 // H = B + A
82643 var h = b.redAdd(a);
82644 // X3 = E * F
82645 var nx = e.redMul(f);
82646 // Y3 = G * H
82647 var ny = g.redMul(h);
82648 // T3 = E * H
82649 var nt = e.redMul(h);
82650 // Z3 = F * G
82651 var nz = f.redMul(g);
82652 return this.curve.point(nx, ny, nz, nt);
82653 };
82654
82655 Point.prototype._projAdd = function _projAdd(p) {
82656 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
82657 // #addition-add-2008-bbjlp
82658 // #addition-add-2007-bl
82659 // 10M + 1S
82660
82661 // A = Z1 * Z2
82662 var a = this.z.redMul(p.z);
82663 // B = A^2
82664 var b = a.redSqr();
82665 // C = X1 * X2
82666 var c = this.x.redMul(p.x);
82667 // D = Y1 * Y2
82668 var d = this.y.redMul(p.y);
82669 // E = d * C * D
82670 var e = this.curve.d.redMul(c).redMul(d);
82671 // F = B - E
82672 var f = b.redSub(e);
82673 // G = B + E
82674 var g = b.redAdd(e);
82675 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
82676 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
82677 var nx = a.redMul(f).redMul(tmp);
82678 var ny;
82679 var nz;
82680 if (this.curve.twisted) {
82681 // Y3 = A * G * (D - a * C)
82682 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
82683 // Z3 = F * G
82684 nz = f.redMul(g);
82685 } else {
82686 // Y3 = A * G * (D - C)
82687 ny = a.redMul(g).redMul(d.redSub(c));
82688 // Z3 = c * F * G
82689 nz = this.curve._mulC(f).redMul(g);
82690 }
82691 return this.curve.point(nx, ny, nz);
82692 };
82693
82694 Point.prototype.add = function add(p) {
82695 if (this.isInfinity())
82696 return p;
82697 if (p.isInfinity())
82698 return this;
82699
82700 if (this.curve.extended)
82701 return this._extAdd(p);
82702 else
82703 return this._projAdd(p);
82704 };
82705
82706 Point.prototype.mul = function mul(k) {
82707 if (this._hasDoubles(k))
82708 return this.curve._fixedNafMul(this, k);
82709 else
82710 return this.curve._wnafMul(this, k);
82711 };
82712
82713 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
82714 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
82715 };
82716
82717 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
82718 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
82719 };
82720
82721 Point.prototype.normalize = function normalize() {
82722 if (this.zOne)
82723 return this;
82724
82725 // Normalize coordinates
82726 var zi = this.z.redInvm();
82727 this.x = this.x.redMul(zi);
82728 this.y = this.y.redMul(zi);
82729 if (this.t)
82730 this.t = this.t.redMul(zi);
82731 this.z = this.curve.one;
82732 this.zOne = true;
82733 return this;
82734 };
82735
82736 Point.prototype.neg = function neg() {
82737 return this.curve.point(this.x.redNeg(),
82738 this.y,
82739 this.z,
82740 this.t && this.t.redNeg());
82741 };
82742
82743 Point.prototype.getX = function getX() {
82744 this.normalize();
82745 return this.x.fromRed();
82746 };
82747
82748 Point.prototype.getY = function getY() {
82749 this.normalize();
82750 return this.y.fromRed();
82751 };
82752
82753 Point.prototype.eq = function eq(other) {
82754 return this === other ||
82755 this.getX().cmp(other.getX()) === 0 &&
82756 this.getY().cmp(other.getY()) === 0;
82757 };
82758
82759 Point.prototype.eqXToP = function eqXToP(x) {
82760 var rx = x.toRed(this.curve.red).redMul(this.z);
82761 if (this.x.cmp(rx) === 0)
82762 return true;
82763
82764 var xc = x.clone();
82765 var t = this.curve.redN.redMul(this.z);
82766 for (;;) {
82767 xc.iadd(this.curve.n);
82768 if (xc.cmp(this.curve.p) >= 0)
82769 return false;
82770
82771 rx.redIAdd(t);
82772 if (this.x.cmp(rx) === 0)
82773 return true;
82774 }
82775 return false;
82776 };
82777
82778 // Compatibility with BaseCurve
82779 Point.prototype.toP = Point.prototype.normalize;
82780 Point.prototype.mixedAdd = Point.prototype.add;
82781
82782 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
82783 'use strict';
82784
82785 var curve = exports;
82786
82787 curve.base = require('./base');
82788 curve.short = require('./short');
82789 curve.mont = require('./mont');
82790 curve.edwards = require('./edwards');
82791
82792 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
82793 'use strict';
82794
82795 var curve = require('../curve');
82796 var BN = require('bn.js');
82797 var inherits = require('inherits');
82798 var Base = curve.base;
82799
82800 var elliptic = require('../../elliptic');
82801 var utils = elliptic.utils;
82802
82803 function MontCurve(conf) {
82804 Base.call(this, 'mont', conf);
82805
82806 this.a = new BN(conf.a, 16).toRed(this.red);
82807 this.b = new BN(conf.b, 16).toRed(this.red);
82808 this.i4 = new BN(4).toRed(this.red).redInvm();
82809 this.two = new BN(2).toRed(this.red);
82810 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
82811 }
82812 inherits(MontCurve, Base);
82813 module.exports = MontCurve;
82814
82815 MontCurve.prototype.validate = function validate(point) {
82816 var x = point.normalize().x;
82817 var x2 = x.redSqr();
82818 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
82819 var y = rhs.redSqrt();
82820
82821 return y.redSqr().cmp(rhs) === 0;
82822 };
82823
82824 function Point(curve, x, z) {
82825 Base.BasePoint.call(this, curve, 'projective');
82826 if (x === null && z === null) {
82827 this.x = this.curve.one;
82828 this.z = this.curve.zero;
82829 } else {
82830 this.x = new BN(x, 16);
82831 this.z = new BN(z, 16);
82832 if (!this.x.red)
82833 this.x = this.x.toRed(this.curve.red);
82834 if (!this.z.red)
82835 this.z = this.z.toRed(this.curve.red);
82836 }
82837 }
82838 inherits(Point, Base.BasePoint);
82839
82840 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
82841 return this.point(utils.toArray(bytes, enc), 1);
82842 };
82843
82844 MontCurve.prototype.point = function point(x, z) {
82845 return new Point(this, x, z);
82846 };
82847
82848 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
82849 return Point.fromJSON(this, obj);
82850 };
82851
82852 Point.prototype.precompute = function precompute() {
82853 // No-op
82854 };
82855
82856 Point.prototype._encode = function _encode() {
82857 return this.getX().toArray('be', this.curve.p.byteLength());
82858 };
82859
82860 Point.fromJSON = function fromJSON(curve, obj) {
82861 return new Point(curve, obj[0], obj[1] || curve.one);
82862 };
82863
82864 Point.prototype.inspect = function inspect() {
82865 if (this.isInfinity())
82866 return '<EC Point Infinity>';
82867 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
82868 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
82869 };
82870
82871 Point.prototype.isInfinity = function isInfinity() {
82872 // XXX This code assumes that zero is always zero in red
82873 return this.z.cmpn(0) === 0;
82874 };
82875
82876 Point.prototype.dbl = function dbl() {
82877 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
82878 // 2M + 2S + 4A
82879
82880 // A = X1 + Z1
82881 var a = this.x.redAdd(this.z);
82882 // AA = A^2
82883 var aa = a.redSqr();
82884 // B = X1 - Z1
82885 var b = this.x.redSub(this.z);
82886 // BB = B^2
82887 var bb = b.redSqr();
82888 // C = AA - BB
82889 var c = aa.redSub(bb);
82890 // X3 = AA * BB
82891 var nx = aa.redMul(bb);
82892 // Z3 = C * (BB + A24 * C)
82893 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
82894 return this.curve.point(nx, nz);
82895 };
82896
82897 Point.prototype.add = function add() {
82898 throw new Error('Not supported on Montgomery curve');
82899 };
82900
82901 Point.prototype.diffAdd = function diffAdd(p, diff) {
82902 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
82903 // 4M + 2S + 6A
82904
82905 // A = X2 + Z2
82906 var a = this.x.redAdd(this.z);
82907 // B = X2 - Z2
82908 var b = this.x.redSub(this.z);
82909 // C = X3 + Z3
82910 var c = p.x.redAdd(p.z);
82911 // D = X3 - Z3
82912 var d = p.x.redSub(p.z);
82913 // DA = D * A
82914 var da = d.redMul(a);
82915 // CB = C * B
82916 var cb = c.redMul(b);
82917 // X5 = Z1 * (DA + CB)^2
82918 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
82919 // Z5 = X1 * (DA - CB)^2
82920 var nz = diff.x.redMul(da.redISub(cb).redSqr());
82921 return this.curve.point(nx, nz);
82922 };
82923
82924 Point.prototype.mul = function mul(k) {
82925 var t = k.clone();
82926 var a = this; // (N / 2) * Q + Q
82927 var b = this.curve.point(null, null); // (N / 2) * Q
82928 var c = this; // Q
82929
82930 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
82931 bits.push(t.andln(1));
82932
82933 for (var i = bits.length - 1; i >= 0; i--) {
82934 if (bits[i] === 0) {
82935 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
82936 a = a.diffAdd(b, c);
82937 // N * Q = 2 * ((N / 2) * Q + Q))
82938 b = b.dbl();
82939 } else {
82940 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
82941 b = a.diffAdd(b, c);
82942 // N * Q + Q = 2 * ((N / 2) * Q + Q)
82943 a = a.dbl();
82944 }
82945 }
82946 return b;
82947 };
82948
82949 Point.prototype.mulAdd = function mulAdd() {
82950 throw new Error('Not supported on Montgomery curve');
82951 };
82952
82953 Point.prototype.jumlAdd = function jumlAdd() {
82954 throw new Error('Not supported on Montgomery curve');
82955 };
82956
82957 Point.prototype.eq = function eq(other) {
82958 return this.getX().cmp(other.getX()) === 0;
82959 };
82960
82961 Point.prototype.normalize = function normalize() {
82962 this.x = this.x.redMul(this.z.redInvm());
82963 this.z = this.curve.one;
82964 return this;
82965 };
82966
82967 Point.prototype.getX = function getX() {
82968 // Normalize coordinates
82969 this.normalize();
82970
82971 return this.x.fromRed();
82972 };
82973
82974 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
82975 'use strict';
82976
82977 var curve = require('../curve');
82978 var elliptic = require('../../elliptic');
82979 var BN = require('bn.js');
82980 var inherits = require('inherits');
82981 var Base = curve.base;
82982
82983 var assert = elliptic.utils.assert;
82984
82985 function ShortCurve(conf) {
82986 Base.call(this, 'short', conf);
82987
82988 this.a = new BN(conf.a, 16).toRed(this.red);
82989 this.b = new BN(conf.b, 16).toRed(this.red);
82990 this.tinv = this.two.redInvm();
82991
82992 this.zeroA = this.a.fromRed().cmpn(0) === 0;
82993 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
82994
82995 // If the curve is endomorphic, precalculate beta and lambda
82996 this.endo = this._getEndomorphism(conf);
82997 this._endoWnafT1 = new Array(4);
82998 this._endoWnafT2 = new Array(4);
82999 }
83000 inherits(ShortCurve, Base);
83001 module.exports = ShortCurve;
83002
83003 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
83004 // No efficient endomorphism
83005 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
83006 return;
83007
83008 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
83009 var beta;
83010 var lambda;
83011 if (conf.beta) {
83012 beta = new BN(conf.beta, 16).toRed(this.red);
83013 } else {
83014 var betas = this._getEndoRoots(this.p);
83015 // Choose the smallest beta
83016 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
83017 beta = beta.toRed(this.red);
83018 }
83019 if (conf.lambda) {
83020 lambda = new BN(conf.lambda, 16);
83021 } else {
83022 // Choose the lambda that is matching selected beta
83023 var lambdas = this._getEndoRoots(this.n);
83024 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
83025 lambda = lambdas[0];
83026 } else {
83027 lambda = lambdas[1];
83028 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
83029 }
83030 }
83031
83032 // Get basis vectors, used for balanced length-two representation
83033 var basis;
83034 if (conf.basis) {
83035 basis = conf.basis.map(function(vec) {
83036 return {
83037 a: new BN(vec.a, 16),
83038 b: new BN(vec.b, 16)
83039 };
83040 });
83041 } else {
83042 basis = this._getEndoBasis(lambda);
83043 }
83044
83045 return {
83046 beta: beta,
83047 lambda: lambda,
83048 basis: basis
83049 };
83050 };
83051
83052 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
83053 // Find roots of for x^2 + x + 1 in F
83054 // Root = (-1 +- Sqrt(-3)) / 2
83055 //
83056 var red = num === this.p ? this.red : BN.mont(num);
83057 var tinv = new BN(2).toRed(red).redInvm();
83058 var ntinv = tinv.redNeg();
83059
83060 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
83061
83062 var l1 = ntinv.redAdd(s).fromRed();
83063 var l2 = ntinv.redSub(s).fromRed();
83064 return [ l1, l2 ];
83065 };
83066
83067 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
83068 // aprxSqrt >= sqrt(this.n)
83069 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
83070
83071 // 3.74
83072 // Run EGCD, until r(L + 1) < aprxSqrt
83073 var u = lambda;
83074 var v = this.n.clone();
83075 var x1 = new BN(1);
83076 var y1 = new BN(0);
83077 var x2 = new BN(0);
83078 var y2 = new BN(1);
83079
83080 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
83081 var a0;
83082 var b0;
83083 // First vector
83084 var a1;
83085 var b1;
83086 // Second vector
83087 var a2;
83088 var b2;
83089
83090 var prevR;
83091 var i = 0;
83092 var r;
83093 var x;
83094 while (u.cmpn(0) !== 0) {
83095 var q = v.div(u);
83096 r = v.sub(q.mul(u));
83097 x = x2.sub(q.mul(x1));
83098 var y = y2.sub(q.mul(y1));
83099
83100 if (!a1 && r.cmp(aprxSqrt) < 0) {
83101 a0 = prevR.neg();
83102 b0 = x1;
83103 a1 = r.neg();
83104 b1 = x;
83105 } else if (a1 && ++i === 2) {
83106 break;
83107 }
83108 prevR = r;
83109
83110 v = u;
83111 u = r;
83112 x2 = x1;
83113 x1 = x;
83114 y2 = y1;
83115 y1 = y;
83116 }
83117 a2 = r.neg();
83118 b2 = x;
83119
83120 var len1 = a1.sqr().add(b1.sqr());
83121 var len2 = a2.sqr().add(b2.sqr());
83122 if (len2.cmp(len1) >= 0) {
83123 a2 = a0;
83124 b2 = b0;
83125 }
83126
83127 // Normalize signs
83128 if (a1.negative) {
83129 a1 = a1.neg();
83130 b1 = b1.neg();
83131 }
83132 if (a2.negative) {
83133 a2 = a2.neg();
83134 b2 = b2.neg();
83135 }
83136
83137 return [
83138 { a: a1, b: b1 },
83139 { a: a2, b: b2 }
83140 ];
83141 };
83142
83143 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
83144 var basis = this.endo.basis;
83145 var v1 = basis[0];
83146 var v2 = basis[1];
83147
83148 var c1 = v2.b.mul(k).divRound(this.n);
83149 var c2 = v1.b.neg().mul(k).divRound(this.n);
83150
83151 var p1 = c1.mul(v1.a);
83152 var p2 = c2.mul(v2.a);
83153 var q1 = c1.mul(v1.b);
83154 var q2 = c2.mul(v2.b);
83155
83156 // Calculate answer
83157 var k1 = k.sub(p1).sub(p2);
83158 var k2 = q1.add(q2).neg();
83159 return { k1: k1, k2: k2 };
83160 };
83161
83162 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
83163 x = new BN(x, 16);
83164 if (!x.red)
83165 x = x.toRed(this.red);
83166
83167 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
83168 var y = y2.redSqrt();
83169 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
83170 throw new Error('invalid point');
83171
83172 // XXX Is there any way to tell if the number is odd without converting it
83173 // to non-red form?
83174 var isOdd = y.fromRed().isOdd();
83175 if (odd && !isOdd || !odd && isOdd)
83176 y = y.redNeg();
83177
83178 return this.point(x, y);
83179 };
83180
83181 ShortCurve.prototype.validate = function validate(point) {
83182 if (point.inf)
83183 return true;
83184
83185 var x = point.x;
83186 var y = point.y;
83187
83188 var ax = this.a.redMul(x);
83189 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
83190 return y.redSqr().redISub(rhs).cmpn(0) === 0;
83191 };
83192
83193 ShortCurve.prototype._endoWnafMulAdd =
83194 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
83195 var npoints = this._endoWnafT1;
83196 var ncoeffs = this._endoWnafT2;
83197 for (var i = 0; i < points.length; i++) {
83198 var split = this._endoSplit(coeffs[i]);
83199 var p = points[i];
83200 var beta = p._getBeta();
83201
83202 if (split.k1.negative) {
83203 split.k1.ineg();
83204 p = p.neg(true);
83205 }
83206 if (split.k2.negative) {
83207 split.k2.ineg();
83208 beta = beta.neg(true);
83209 }
83210
83211 npoints[i * 2] = p;
83212 npoints[i * 2 + 1] = beta;
83213 ncoeffs[i * 2] = split.k1;
83214 ncoeffs[i * 2 + 1] = split.k2;
83215 }
83216 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
83217
83218 // Clean-up references to points and coefficients
83219 for (var j = 0; j < i * 2; j++) {
83220 npoints[j] = null;
83221 ncoeffs[j] = null;
83222 }
83223 return res;
83224 };
83225
83226 function Point(curve, x, y, isRed) {
83227 Base.BasePoint.call(this, curve, 'affine');
83228 if (x === null && y === null) {
83229 this.x = null;
83230 this.y = null;
83231 this.inf = true;
83232 } else {
83233 this.x = new BN(x, 16);
83234 this.y = new BN(y, 16);
83235 // Force redgomery representation when loading from JSON
83236 if (isRed) {
83237 this.x.forceRed(this.curve.red);
83238 this.y.forceRed(this.curve.red);
83239 }
83240 if (!this.x.red)
83241 this.x = this.x.toRed(this.curve.red);
83242 if (!this.y.red)
83243 this.y = this.y.toRed(this.curve.red);
83244 this.inf = false;
83245 }
83246 }
83247 inherits(Point, Base.BasePoint);
83248
83249 ShortCurve.prototype.point = function point(x, y, isRed) {
83250 return new Point(this, x, y, isRed);
83251 };
83252
83253 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
83254 return Point.fromJSON(this, obj, red);
83255 };
83256
83257 Point.prototype._getBeta = function _getBeta() {
83258 if (!this.curve.endo)
83259 return;
83260
83261 var pre = this.precomputed;
83262 if (pre && pre.beta)
83263 return pre.beta;
83264
83265 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
83266 if (pre) {
83267 var curve = this.curve;
83268 var endoMul = function(p) {
83269 return curve.point(p.x.redMul(curve.endo.beta), p.y);
83270 };
83271 pre.beta = beta;
83272 beta.precomputed = {
83273 beta: null,
83274 naf: pre.naf && {
83275 wnd: pre.naf.wnd,
83276 points: pre.naf.points.map(endoMul)
83277 },
83278 doubles: pre.doubles && {
83279 step: pre.doubles.step,
83280 points: pre.doubles.points.map(endoMul)
83281 }
83282 };
83283 }
83284 return beta;
83285 };
83286
83287 Point.prototype.toJSON = function toJSON() {
83288 if (!this.precomputed)
83289 return [ this.x, this.y ];
83290
83291 return [ this.x, this.y, this.precomputed && {
83292 doubles: this.precomputed.doubles && {
83293 step: this.precomputed.doubles.step,
83294 points: this.precomputed.doubles.points.slice(1)
83295 },
83296 naf: this.precomputed.naf && {
83297 wnd: this.precomputed.naf.wnd,
83298 points: this.precomputed.naf.points.slice(1)
83299 }
83300 } ];
83301 };
83302
83303 Point.fromJSON = function fromJSON(curve, obj, red) {
83304 if (typeof obj === 'string')
83305 obj = JSON.parse(obj);
83306 var res = curve.point(obj[0], obj[1], red);
83307 if (!obj[2])
83308 return res;
83309
83310 function obj2point(obj) {
83311 return curve.point(obj[0], obj[1], red);
83312 }
83313
83314 var pre = obj[2];
83315 res.precomputed = {
83316 beta: null,
83317 doubles: pre.doubles && {
83318 step: pre.doubles.step,
83319 points: [ res ].concat(pre.doubles.points.map(obj2point))
83320 },
83321 naf: pre.naf && {
83322 wnd: pre.naf.wnd,
83323 points: [ res ].concat(pre.naf.points.map(obj2point))
83324 }
83325 };
83326 return res;
83327 };
83328
83329 Point.prototype.inspect = function inspect() {
83330 if (this.isInfinity())
83331 return '<EC Point Infinity>';
83332 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
83333 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
83334 };
83335
83336 Point.prototype.isInfinity = function isInfinity() {
83337 return this.inf;
83338 };
83339
83340 Point.prototype.add = function add(p) {
83341 // O + P = P
83342 if (this.inf)
83343 return p;
83344
83345 // P + O = P
83346 if (p.inf)
83347 return this;
83348
83349 // P + P = 2P
83350 if (this.eq(p))
83351 return this.dbl();
83352
83353 // P + (-P) = O
83354 if (this.neg().eq(p))
83355 return this.curve.point(null, null);
83356
83357 // P + Q = O
83358 if (this.x.cmp(p.x) === 0)
83359 return this.curve.point(null, null);
83360
83361 var c = this.y.redSub(p.y);
83362 if (c.cmpn(0) !== 0)
83363 c = c.redMul(this.x.redSub(p.x).redInvm());
83364 var nx = c.redSqr().redISub(this.x).redISub(p.x);
83365 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
83366 return this.curve.point(nx, ny);
83367 };
83368
83369 Point.prototype.dbl = function dbl() {
83370 if (this.inf)
83371 return this;
83372
83373 // 2P = O
83374 var ys1 = this.y.redAdd(this.y);
83375 if (ys1.cmpn(0) === 0)
83376 return this.curve.point(null, null);
83377
83378 var a = this.curve.a;
83379
83380 var x2 = this.x.redSqr();
83381 var dyinv = ys1.redInvm();
83382 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
83383
83384 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
83385 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
83386 return this.curve.point(nx, ny);
83387 };
83388
83389 Point.prototype.getX = function getX() {
83390 return this.x.fromRed();
83391 };
83392
83393 Point.prototype.getY = function getY() {
83394 return this.y.fromRed();
83395 };
83396
83397 Point.prototype.mul = function mul(k) {
83398 k = new BN(k, 16);
83399
83400 if (this._hasDoubles(k))
83401 return this.curve._fixedNafMul(this, k);
83402 else if (this.curve.endo)
83403 return this.curve._endoWnafMulAdd([ this ], [ k ]);
83404 else
83405 return this.curve._wnafMul(this, k);
83406 };
83407
83408 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
83409 var points = [ this, p2 ];
83410 var coeffs = [ k1, k2 ];
83411 if (this.curve.endo)
83412 return this.curve._endoWnafMulAdd(points, coeffs);
83413 else
83414 return this.curve._wnafMulAdd(1, points, coeffs, 2);
83415 };
83416
83417 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
83418 var points = [ this, p2 ];
83419 var coeffs = [ k1, k2 ];
83420 if (this.curve.endo)
83421 return this.curve._endoWnafMulAdd(points, coeffs, true);
83422 else
83423 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
83424 };
83425
83426 Point.prototype.eq = function eq(p) {
83427 return this === p ||
83428 this.inf === p.inf &&
83429 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
83430 };
83431
83432 Point.prototype.neg = function neg(_precompute) {
83433 if (this.inf)
83434 return this;
83435
83436 var res = this.curve.point(this.x, this.y.redNeg());
83437 if (_precompute && this.precomputed) {
83438 var pre = this.precomputed;
83439 var negate = function(p) {
83440 return p.neg();
83441 };
83442 res.precomputed = {
83443 naf: pre.naf && {
83444 wnd: pre.naf.wnd,
83445 points: pre.naf.points.map(negate)
83446 },
83447 doubles: pre.doubles && {
83448 step: pre.doubles.step,
83449 points: pre.doubles.points.map(negate)
83450 }
83451 };
83452 }
83453 return res;
83454 };
83455
83456 Point.prototype.toJ = function toJ() {
83457 if (this.inf)
83458 return this.curve.jpoint(null, null, null);
83459
83460 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
83461 return res;
83462 };
83463
83464 function JPoint(curve, x, y, z) {
83465 Base.BasePoint.call(this, curve, 'jacobian');
83466 if (x === null && y === null && z === null) {
83467 this.x = this.curve.one;
83468 this.y = this.curve.one;
83469 this.z = new BN(0);
83470 } else {
83471 this.x = new BN(x, 16);
83472 this.y = new BN(y, 16);
83473 this.z = new BN(z, 16);
83474 }
83475 if (!this.x.red)
83476 this.x = this.x.toRed(this.curve.red);
83477 if (!this.y.red)
83478 this.y = this.y.toRed(this.curve.red);
83479 if (!this.z.red)
83480 this.z = this.z.toRed(this.curve.red);
83481
83482 this.zOne = this.z === this.curve.one;
83483 }
83484 inherits(JPoint, Base.BasePoint);
83485
83486 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
83487 return new JPoint(this, x, y, z);
83488 };
83489
83490 JPoint.prototype.toP = function toP() {
83491 if (this.isInfinity())
83492 return this.curve.point(null, null);
83493
83494 var zinv = this.z.redInvm();
83495 var zinv2 = zinv.redSqr();
83496 var ax = this.x.redMul(zinv2);
83497 var ay = this.y.redMul(zinv2).redMul(zinv);
83498
83499 return this.curve.point(ax, ay);
83500 };
83501
83502 JPoint.prototype.neg = function neg() {
83503 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
83504 };
83505
83506 JPoint.prototype.add = function add(p) {
83507 // O + P = P
83508 if (this.isInfinity())
83509 return p;
83510
83511 // P + O = P
83512 if (p.isInfinity())
83513 return this;
83514
83515 // 12M + 4S + 7A
83516 var pz2 = p.z.redSqr();
83517 var z2 = this.z.redSqr();
83518 var u1 = this.x.redMul(pz2);
83519 var u2 = p.x.redMul(z2);
83520 var s1 = this.y.redMul(pz2.redMul(p.z));
83521 var s2 = p.y.redMul(z2.redMul(this.z));
83522
83523 var h = u1.redSub(u2);
83524 var r = s1.redSub(s2);
83525 if (h.cmpn(0) === 0) {
83526 if (r.cmpn(0) !== 0)
83527 return this.curve.jpoint(null, null, null);
83528 else
83529 return this.dbl();
83530 }
83531
83532 var h2 = h.redSqr();
83533 var h3 = h2.redMul(h);
83534 var v = u1.redMul(h2);
83535
83536 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
83537 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
83538 var nz = this.z.redMul(p.z).redMul(h);
83539
83540 return this.curve.jpoint(nx, ny, nz);
83541 };
83542
83543 JPoint.prototype.mixedAdd = function mixedAdd(p) {
83544 // O + P = P
83545 if (this.isInfinity())
83546 return p.toJ();
83547
83548 // P + O = P
83549 if (p.isInfinity())
83550 return this;
83551
83552 // 8M + 3S + 7A
83553 var z2 = this.z.redSqr();
83554 var u1 = this.x;
83555 var u2 = p.x.redMul(z2);
83556 var s1 = this.y;
83557 var s2 = p.y.redMul(z2).redMul(this.z);
83558
83559 var h = u1.redSub(u2);
83560 var r = s1.redSub(s2);
83561 if (h.cmpn(0) === 0) {
83562 if (r.cmpn(0) !== 0)
83563 return this.curve.jpoint(null, null, null);
83564 else
83565 return this.dbl();
83566 }
83567
83568 var h2 = h.redSqr();
83569 var h3 = h2.redMul(h);
83570 var v = u1.redMul(h2);
83571
83572 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
83573 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
83574 var nz = this.z.redMul(h);
83575
83576 return this.curve.jpoint(nx, ny, nz);
83577 };
83578
83579 JPoint.prototype.dblp = function dblp(pow) {
83580 if (pow === 0)
83581 return this;
83582 if (this.isInfinity())
83583 return this;
83584 if (!pow)
83585 return this.dbl();
83586
83587 if (this.curve.zeroA || this.curve.threeA) {
83588 var r = this;
83589 for (var i = 0; i < pow; i++)
83590 r = r.dbl();
83591 return r;
83592 }
83593
83594 // 1M + 2S + 1A + N * (4S + 5M + 8A)
83595 // N = 1 => 6M + 6S + 9A
83596 var a = this.curve.a;
83597 var tinv = this.curve.tinv;
83598
83599 var jx = this.x;
83600 var jy = this.y;
83601 var jz = this.z;
83602 var jz4 = jz.redSqr().redSqr();
83603
83604 // Reuse results
83605 var jyd = jy.redAdd(jy);
83606 for (var i = 0; i < pow; i++) {
83607 var jx2 = jx.redSqr();
83608 var jyd2 = jyd.redSqr();
83609 var jyd4 = jyd2.redSqr();
83610 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
83611
83612 var t1 = jx.redMul(jyd2);
83613 var nx = c.redSqr().redISub(t1.redAdd(t1));
83614 var t2 = t1.redISub(nx);
83615 var dny = c.redMul(t2);
83616 dny = dny.redIAdd(dny).redISub(jyd4);
83617 var nz = jyd.redMul(jz);
83618 if (i + 1 < pow)
83619 jz4 = jz4.redMul(jyd4);
83620
83621 jx = nx;
83622 jz = nz;
83623 jyd = dny;
83624 }
83625
83626 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
83627 };
83628
83629 JPoint.prototype.dbl = function dbl() {
83630 if (this.isInfinity())
83631 return this;
83632
83633 if (this.curve.zeroA)
83634 return this._zeroDbl();
83635 else if (this.curve.threeA)
83636 return this._threeDbl();
83637 else
83638 return this._dbl();
83639 };
83640
83641 JPoint.prototype._zeroDbl = function _zeroDbl() {
83642 var nx;
83643 var ny;
83644 var nz;
83645 // Z = 1
83646 if (this.zOne) {
83647 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
83648 // #doubling-mdbl-2007-bl
83649 // 1M + 5S + 14A
83650
83651 // XX = X1^2
83652 var xx = this.x.redSqr();
83653 // YY = Y1^2
83654 var yy = this.y.redSqr();
83655 // YYYY = YY^2
83656 var yyyy = yy.redSqr();
83657 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
83658 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
83659 s = s.redIAdd(s);
83660 // M = 3 * XX + a; a = 0
83661 var m = xx.redAdd(xx).redIAdd(xx);
83662 // T = M ^ 2 - 2*S
83663 var t = m.redSqr().redISub(s).redISub(s);
83664
83665 // 8 * YYYY
83666 var yyyy8 = yyyy.redIAdd(yyyy);
83667 yyyy8 = yyyy8.redIAdd(yyyy8);
83668 yyyy8 = yyyy8.redIAdd(yyyy8);
83669
83670 // X3 = T
83671 nx = t;
83672 // Y3 = M * (S - T) - 8 * YYYY
83673 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
83674 // Z3 = 2*Y1
83675 nz = this.y.redAdd(this.y);
83676 } else {
83677 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
83678 // #doubling-dbl-2009-l
83679 // 2M + 5S + 13A
83680
83681 // A = X1^2
83682 var a = this.x.redSqr();
83683 // B = Y1^2
83684 var b = this.y.redSqr();
83685 // C = B^2
83686 var c = b.redSqr();
83687 // D = 2 * ((X1 + B)^2 - A - C)
83688 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
83689 d = d.redIAdd(d);
83690 // E = 3 * A
83691 var e = a.redAdd(a).redIAdd(a);
83692 // F = E^2
83693 var f = e.redSqr();
83694
83695 // 8 * C
83696 var c8 = c.redIAdd(c);
83697 c8 = c8.redIAdd(c8);
83698 c8 = c8.redIAdd(c8);
83699
83700 // X3 = F - 2 * D
83701 nx = f.redISub(d).redISub(d);
83702 // Y3 = E * (D - X3) - 8 * C
83703 ny = e.redMul(d.redISub(nx)).redISub(c8);
83704 // Z3 = 2 * Y1 * Z1
83705 nz = this.y.redMul(this.z);
83706 nz = nz.redIAdd(nz);
83707 }
83708
83709 return this.curve.jpoint(nx, ny, nz);
83710 };
83711
83712 JPoint.prototype._threeDbl = function _threeDbl() {
83713 var nx;
83714 var ny;
83715 var nz;
83716 // Z = 1
83717 if (this.zOne) {
83718 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
83719 // #doubling-mdbl-2007-bl
83720 // 1M + 5S + 15A
83721
83722 // XX = X1^2
83723 var xx = this.x.redSqr();
83724 // YY = Y1^2
83725 var yy = this.y.redSqr();
83726 // YYYY = YY^2
83727 var yyyy = yy.redSqr();
83728 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
83729 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
83730 s = s.redIAdd(s);
83731 // M = 3 * XX + a
83732 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
83733 // T = M^2 - 2 * S
83734 var t = m.redSqr().redISub(s).redISub(s);
83735 // X3 = T
83736 nx = t;
83737 // Y3 = M * (S - T) - 8 * YYYY
83738 var yyyy8 = yyyy.redIAdd(yyyy);
83739 yyyy8 = yyyy8.redIAdd(yyyy8);
83740 yyyy8 = yyyy8.redIAdd(yyyy8);
83741 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
83742 // Z3 = 2 * Y1
83743 nz = this.y.redAdd(this.y);
83744 } else {
83745 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
83746 // 3M + 5S
83747
83748 // delta = Z1^2
83749 var delta = this.z.redSqr();
83750 // gamma = Y1^2
83751 var gamma = this.y.redSqr();
83752 // beta = X1 * gamma
83753 var beta = this.x.redMul(gamma);
83754 // alpha = 3 * (X1 - delta) * (X1 + delta)
83755 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
83756 alpha = alpha.redAdd(alpha).redIAdd(alpha);
83757 // X3 = alpha^2 - 8 * beta
83758 var beta4 = beta.redIAdd(beta);
83759 beta4 = beta4.redIAdd(beta4);
83760 var beta8 = beta4.redAdd(beta4);
83761 nx = alpha.redSqr().redISub(beta8);
83762 // Z3 = (Y1 + Z1)^2 - gamma - delta
83763 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
83764 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
83765 var ggamma8 = gamma.redSqr();
83766 ggamma8 = ggamma8.redIAdd(ggamma8);
83767 ggamma8 = ggamma8.redIAdd(ggamma8);
83768 ggamma8 = ggamma8.redIAdd(ggamma8);
83769 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
83770 }
83771
83772 return this.curve.jpoint(nx, ny, nz);
83773 };
83774
83775 JPoint.prototype._dbl = function _dbl() {
83776 var a = this.curve.a;
83777
83778 // 4M + 6S + 10A
83779 var jx = this.x;
83780 var jy = this.y;
83781 var jz = this.z;
83782 var jz4 = jz.redSqr().redSqr();
83783
83784 var jx2 = jx.redSqr();
83785 var jy2 = jy.redSqr();
83786
83787 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
83788
83789 var jxd4 = jx.redAdd(jx);
83790 jxd4 = jxd4.redIAdd(jxd4);
83791 var t1 = jxd4.redMul(jy2);
83792 var nx = c.redSqr().redISub(t1.redAdd(t1));
83793 var t2 = t1.redISub(nx);
83794
83795 var jyd8 = jy2.redSqr();
83796 jyd8 = jyd8.redIAdd(jyd8);
83797 jyd8 = jyd8.redIAdd(jyd8);
83798 jyd8 = jyd8.redIAdd(jyd8);
83799 var ny = c.redMul(t2).redISub(jyd8);
83800 var nz = jy.redAdd(jy).redMul(jz);
83801
83802 return this.curve.jpoint(nx, ny, nz);
83803 };
83804
83805 JPoint.prototype.trpl = function trpl() {
83806 if (!this.curve.zeroA)
83807 return this.dbl().add(this);
83808
83809 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
83810 // 5M + 10S + ...
83811
83812 // XX = X1^2
83813 var xx = this.x.redSqr();
83814 // YY = Y1^2
83815 var yy = this.y.redSqr();
83816 // ZZ = Z1^2
83817 var zz = this.z.redSqr();
83818 // YYYY = YY^2
83819 var yyyy = yy.redSqr();
83820 // M = 3 * XX + a * ZZ2; a = 0
83821 var m = xx.redAdd(xx).redIAdd(xx);
83822 // MM = M^2
83823 var mm = m.redSqr();
83824 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
83825 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
83826 e = e.redIAdd(e);
83827 e = e.redAdd(e).redIAdd(e);
83828 e = e.redISub(mm);
83829 // EE = E^2
83830 var ee = e.redSqr();
83831 // T = 16*YYYY
83832 var t = yyyy.redIAdd(yyyy);
83833 t = t.redIAdd(t);
83834 t = t.redIAdd(t);
83835 t = t.redIAdd(t);
83836 // U = (M + E)^2 - MM - EE - T
83837 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
83838 // X3 = 4 * (X1 * EE - 4 * YY * U)
83839 var yyu4 = yy.redMul(u);
83840 yyu4 = yyu4.redIAdd(yyu4);
83841 yyu4 = yyu4.redIAdd(yyu4);
83842 var nx = this.x.redMul(ee).redISub(yyu4);
83843 nx = nx.redIAdd(nx);
83844 nx = nx.redIAdd(nx);
83845 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
83846 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
83847 ny = ny.redIAdd(ny);
83848 ny = ny.redIAdd(ny);
83849 ny = ny.redIAdd(ny);
83850 // Z3 = (Z1 + E)^2 - ZZ - EE
83851 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
83852
83853 return this.curve.jpoint(nx, ny, nz);
83854 };
83855
83856 JPoint.prototype.mul = function mul(k, kbase) {
83857 k = new BN(k, kbase);
83858
83859 return this.curve._wnafMul(this, k);
83860 };
83861
83862 JPoint.prototype.eq = function eq(p) {
83863 if (p.type === 'affine')
83864 return this.eq(p.toJ());
83865
83866 if (this === p)
83867 return true;
83868
83869 // x1 * z2^2 == x2 * z1^2
83870 var z2 = this.z.redSqr();
83871 var pz2 = p.z.redSqr();
83872 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
83873 return false;
83874
83875 // y1 * z2^3 == y2 * z1^3
83876 var z3 = z2.redMul(this.z);
83877 var pz3 = pz2.redMul(p.z);
83878 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
83879 };
83880
83881 JPoint.prototype.eqXToP = function eqXToP(x) {
83882 var zs = this.z.redSqr();
83883 var rx = x.toRed(this.curve.red).redMul(zs);
83884 if (this.x.cmp(rx) === 0)
83885 return true;
83886
83887 var xc = x.clone();
83888 var t = this.curve.redN.redMul(zs);
83889 for (;;) {
83890 xc.iadd(this.curve.n);
83891 if (xc.cmp(this.curve.p) >= 0)
83892 return false;
83893
83894 rx.redIAdd(t);
83895 if (this.x.cmp(rx) === 0)
83896 return true;
83897 }
83898 return false;
83899 };
83900
83901 JPoint.prototype.inspect = function inspect() {
83902 if (this.isInfinity())
83903 return '<EC JPoint Infinity>';
83904 return '<EC JPoint x: ' + this.x.toString(16, 2) +
83905 ' y: ' + this.y.toString(16, 2) +
83906 ' z: ' + this.z.toString(16, 2) + '>';
83907 };
83908
83909 JPoint.prototype.isInfinity = function isInfinity() {
83910 // XXX This code assumes that zero is always zero in red
83911 return this.z.cmpn(0) === 0;
83912 };
83913
83914 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
83915 'use strict';
83916
83917 var curves = exports;
83918
83919 var hash = require('hash.js');
83920 var elliptic = require('../elliptic');
83921
83922 var assert = elliptic.utils.assert;
83923
83924 function PresetCurve(options) {
83925 if (options.type === 'short')
83926 this.curve = new elliptic.curve.short(options);
83927 else if (options.type === 'edwards')
83928 this.curve = new elliptic.curve.edwards(options);
83929 else
83930 this.curve = new elliptic.curve.mont(options);
83931 this.g = this.curve.g;
83932 this.n = this.curve.n;
83933 this.hash = options.hash;
83934
83935 assert(this.g.validate(), 'Invalid curve');
83936 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
83937 }
83938 curves.PresetCurve = PresetCurve;
83939
83940 function defineCurve(name, options) {
83941 Object.defineProperty(curves, name, {
83942 configurable: true,
83943 enumerable: true,
83944 get: function() {
83945 var curve = new PresetCurve(options);
83946 Object.defineProperty(curves, name, {
83947 configurable: true,
83948 enumerable: true,
83949 value: curve
83950 });
83951 return curve;
83952 }
83953 });
83954 }
83955
83956 defineCurve('p192', {
83957 type: 'short',
83958 prime: 'p192',
83959 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
83960 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
83961 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
83962 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
83963 hash: hash.sha256,
83964 gRed: false,
83965 g: [
83966 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
83967 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
83968 ]
83969 });
83970
83971 defineCurve('p224', {
83972 type: 'short',
83973 prime: 'p224',
83974 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
83975 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
83976 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
83977 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
83978 hash: hash.sha256,
83979 gRed: false,
83980 g: [
83981 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
83982 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
83983 ]
83984 });
83985
83986 defineCurve('p256', {
83987 type: 'short',
83988 prime: null,
83989 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
83990 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
83991 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
83992 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
83993 hash: hash.sha256,
83994 gRed: false,
83995 g: [
83996 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
83997 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
83998 ]
83999 });
84000
84001 defineCurve('p384', {
84002 type: 'short',
84003 prime: null,
84004 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84005 'fffffffe ffffffff 00000000 00000000 ffffffff',
84006 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84007 'fffffffe ffffffff 00000000 00000000 fffffffc',
84008 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
84009 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
84010 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
84011 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
84012 hash: hash.sha384,
84013 gRed: false,
84014 g: [
84015 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
84016 '5502f25d bf55296c 3a545e38 72760ab7',
84017 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
84018 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
84019 ]
84020 });
84021
84022 defineCurve('p521', {
84023 type: 'short',
84024 prime: null,
84025 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84026 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84027 'ffffffff ffffffff ffffffff ffffffff ffffffff',
84028 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84029 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84030 'ffffffff ffffffff ffffffff ffffffff fffffffc',
84031 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
84032 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
84033 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
84034 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84035 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
84036 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
84037 hash: hash.sha512,
84038 gRed: false,
84039 g: [
84040 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
84041 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
84042 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
84043 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
84044 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
84045 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
84046 ]
84047 });
84048
84049 defineCurve('curve25519', {
84050 type: 'mont',
84051 prime: 'p25519',
84052 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
84053 a: '76d06',
84054 b: '1',
84055 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
84056 hash: hash.sha256,
84057 gRed: false,
84058 g: [
84059 '9'
84060 ]
84061 });
84062
84063 defineCurve('ed25519', {
84064 type: 'edwards',
84065 prime: 'p25519',
84066 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
84067 a: '-1',
84068 c: '1',
84069 // -121665 * (121666^(-1)) (mod P)
84070 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
84071 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
84072 hash: hash.sha256,
84073 gRed: false,
84074 g: [
84075 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
84076
84077 // 4/5
84078 '6666666666666666666666666666666666666666666666666666666666666658'
84079 ]
84080 });
84081
84082 var pre;
84083 try {
84084 pre = require('./precomputed/secp256k1');
84085 } catch (e) {
84086 pre = undefined;
84087 }
84088
84089 defineCurve('secp256k1', {
84090 type: 'short',
84091 prime: 'k256',
84092 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
84093 a: '0',
84094 b: '7',
84095 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
84096 h: '1',
84097 hash: hash.sha256,
84098
84099 // Precomputed endomorphism
84100 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
84101 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
84102 basis: [
84103 {
84104 a: '3086d221a7d46bcde86c90e49284eb15',
84105 b: '-e4437ed6010e88286f547fa90abfe4c3'
84106 },
84107 {
84108 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
84109 b: '3086d221a7d46bcde86c90e49284eb15'
84110 }
84111 ],
84112
84113 gRed: false,
84114 g: [
84115 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
84116 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
84117 pre
84118 ]
84119 });
84120
84121 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
84122 'use strict';
84123
84124 var BN = require('bn.js');
84125 var elliptic = require('../../elliptic');
84126 var utils = elliptic.utils;
84127 var assert = utils.assert;
84128
84129 var KeyPair = require('./key');
84130 var Signature = require('./signature');
84131
84132 function EC(options) {
84133 if (!(this instanceof EC))
84134 return new EC(options);
84135
84136 // Shortcut `elliptic.ec(curve-name)`
84137 if (typeof options === 'string') {
84138 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
84139
84140 options = elliptic.curves[options];
84141 }
84142
84143 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
84144 if (options instanceof elliptic.curves.PresetCurve)
84145 options = { curve: options };
84146
84147 this.curve = options.curve.curve;
84148 this.n = this.curve.n;
84149 this.nh = this.n.ushrn(1);
84150 this.g = this.curve.g;
84151
84152 // Point on curve
84153 this.g = options.curve.g;
84154 this.g.precompute(options.curve.n.bitLength() + 1);
84155
84156 // Hash for function for DRBG
84157 this.hash = options.hash || options.curve.hash;
84158 }
84159 module.exports = EC;
84160
84161 EC.prototype.keyPair = function keyPair(options) {
84162 return new KeyPair(this, options);
84163 };
84164
84165 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
84166 return KeyPair.fromPrivate(this, priv, enc);
84167 };
84168
84169 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
84170 return KeyPair.fromPublic(this, pub, enc);
84171 };
84172
84173 EC.prototype.genKeyPair = function genKeyPair(options) {
84174 if (!options)
84175 options = {};
84176
84177 // Instantiate Hmac_DRBG
84178 var drbg = new elliptic.hmacDRBG({
84179 hash: this.hash,
84180 pers: options.pers,
84181 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
84182 nonce: this.n.toArray()
84183 });
84184
84185 var bytes = this.n.byteLength();
84186 var ns2 = this.n.sub(new BN(2));
84187 do {
84188 var priv = new BN(drbg.generate(bytes));
84189 if (priv.cmp(ns2) > 0)
84190 continue;
84191
84192 priv.iaddn(1);
84193 return this.keyFromPrivate(priv);
84194 } while (true);
84195 };
84196
84197 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
84198 var delta = msg.byteLength() * 8 - this.n.bitLength();
84199 if (delta > 0)
84200 msg = msg.ushrn(delta);
84201 if (!truncOnly && msg.cmp(this.n) >= 0)
84202 return msg.sub(this.n);
84203 else
84204 return msg;
84205 };
84206
84207 EC.prototype.sign = function sign(msg, key, enc, options) {
84208 if (typeof enc === 'object') {
84209 options = enc;
84210 enc = null;
84211 }
84212 if (!options)
84213 options = {};
84214
84215 key = this.keyFromPrivate(key, enc);
84216 msg = this._truncateToN(new BN(msg, 16));
84217
84218 // Zero-extend key to provide enough entropy
84219 var bytes = this.n.byteLength();
84220 var bkey = key.getPrivate().toArray('be', bytes);
84221
84222 // Zero-extend nonce to have the same byte size as N
84223 var nonce = msg.toArray('be', bytes);
84224
84225 // Instantiate Hmac_DRBG
84226 var drbg = new elliptic.hmacDRBG({
84227 hash: this.hash,
84228 entropy: bkey,
84229 nonce: nonce,
84230 pers: options.pers,
84231 persEnc: options.persEnc
84232 });
84233
84234 // Number of bytes to generate
84235 var ns1 = this.n.sub(new BN(1));
84236
84237 for (var iter = 0; true; iter++) {
84238 var k = options.k ?
84239 options.k(iter) :
84240 new BN(drbg.generate(this.n.byteLength()));
84241 k = this._truncateToN(k, true);
84242 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
84243 continue;
84244
84245 var kp = this.g.mul(k);
84246 if (kp.isInfinity())
84247 continue;
84248
84249 var kpX = kp.getX();
84250 var r = kpX.umod(this.n);
84251 if (r.cmpn(0) === 0)
84252 continue;
84253
84254 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
84255 s = s.umod(this.n);
84256 if (s.cmpn(0) === 0)
84257 continue;
84258
84259 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
84260 (kpX.cmp(r) !== 0 ? 2 : 0);
84261
84262 // Use complement of `s`, if it is > `n / 2`
84263 if (options.canonical && s.cmp(this.nh) > 0) {
84264 s = this.n.sub(s);
84265 recoveryParam ^= 1;
84266 }
84267
84268 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
84269 }
84270 };
84271
84272 EC.prototype.verify = function verify(msg, signature, key, enc) {
84273 msg = this._truncateToN(new BN(msg, 16));
84274 key = this.keyFromPublic(key, enc);
84275 signature = new Signature(signature, 'hex');
84276
84277 // Perform primitive values validation
84278 var r = signature.r;
84279 var s = signature.s;
84280 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
84281 return false;
84282 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
84283 return false;
84284
84285 // Validate signature
84286 var sinv = s.invm(this.n);
84287 var u1 = sinv.mul(msg).umod(this.n);
84288 var u2 = sinv.mul(r).umod(this.n);
84289
84290 if (!this.curve._maxwellTrick) {
84291 var p = this.g.mulAdd(u1, key.getPublic(), u2);
84292 if (p.isInfinity())
84293 return false;
84294
84295 return p.getX().umod(this.n).cmp(r) === 0;
84296 }
84297
84298 // NOTE: Greg Maxwell's trick, inspired by:
84299 // https://git.io/vad3K
84300
84301 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
84302 if (p.isInfinity())
84303 return false;
84304
84305 // Compare `p.x` of Jacobian point with `r`,
84306 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
84307 // inverse of `p.z^2`
84308 return p.eqXToP(r);
84309 };
84310
84311 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
84312 assert((3 & j) === j, 'The recovery param is more than two bits');
84313 signature = new Signature(signature, enc);
84314
84315 var n = this.n;
84316 var e = new BN(msg);
84317 var r = signature.r;
84318 var s = signature.s;
84319
84320 // A set LSB signifies that the y-coordinate is odd
84321 var isYOdd = j & 1;
84322 var isSecondKey = j >> 1;
84323 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
84324 throw new Error('Unable to find sencond key candinate');
84325
84326 // 1.1. Let x = r + jn.
84327 if (isSecondKey)
84328 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
84329 else
84330 r = this.curve.pointFromX(r, isYOdd);
84331
84332 var rInv = signature.r.invm(n);
84333 var s1 = n.sub(e).mul(rInv).umod(n);
84334 var s2 = s.mul(rInv).umod(n);
84335
84336 // 1.6.1 Compute Q = r^-1 (sR - eG)
84337 // Q = r^-1 (sR + -eG)
84338 return this.g.mulAdd(s1, r, s2);
84339 };
84340
84341 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
84342 signature = new Signature(signature, enc);
84343 if (signature.recoveryParam !== null)
84344 return signature.recoveryParam;
84345
84346 for (var i = 0; i < 4; i++) {
84347 var Qprime;
84348 try {
84349 Qprime = this.recoverPubKey(e, signature, i);
84350 } catch (e) {
84351 continue;
84352 }
84353
84354 if (Qprime.eq(Q))
84355 return i;
84356 }
84357 throw new Error('Unable to find valid recovery factor');
84358 };
84359
84360 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
84361 'use strict';
84362
84363 var BN = require('bn.js');
84364 var elliptic = require('../../elliptic');
84365 var utils = elliptic.utils;
84366 var assert = utils.assert;
84367
84368 function KeyPair(ec, options) {
84369 this.ec = ec;
84370 this.priv = null;
84371 this.pub = null;
84372
84373 // KeyPair(ec, { priv: ..., pub: ... })
84374 if (options.priv)
84375 this._importPrivate(options.priv, options.privEnc);
84376 if (options.pub)
84377 this._importPublic(options.pub, options.pubEnc);
84378 }
84379 module.exports = KeyPair;
84380
84381 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
84382 if (pub instanceof KeyPair)
84383 return pub;
84384
84385 return new KeyPair(ec, {
84386 pub: pub,
84387 pubEnc: enc
84388 });
84389 };
84390
84391 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
84392 if (priv instanceof KeyPair)
84393 return priv;
84394
84395 return new KeyPair(ec, {
84396 priv: priv,
84397 privEnc: enc
84398 });
84399 };
84400
84401 KeyPair.prototype.validate = function validate() {
84402 var pub = this.getPublic();
84403
84404 if (pub.isInfinity())
84405 return { result: false, reason: 'Invalid public key' };
84406 if (!pub.validate())
84407 return { result: false, reason: 'Public key is not a point' };
84408 if (!pub.mul(this.ec.curve.n).isInfinity())
84409 return { result: false, reason: 'Public key * N != O' };
84410
84411 return { result: true, reason: null };
84412 };
84413
84414 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
84415 // compact is optional argument
84416 if (typeof compact === 'string') {
84417 enc = compact;
84418 compact = null;
84419 }
84420
84421 if (!this.pub)
84422 this.pub = this.ec.g.mul(this.priv);
84423
84424 if (!enc)
84425 return this.pub;
84426
84427 return this.pub.encode(enc, compact);
84428 };
84429
84430 KeyPair.prototype.getPrivate = function getPrivate(enc) {
84431 if (enc === 'hex')
84432 return this.priv.toString(16, 2);
84433 else
84434 return this.priv;
84435 };
84436
84437 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
84438 this.priv = new BN(key, enc || 16);
84439
84440 // Ensure that the priv won't be bigger than n, otherwise we may fail
84441 // in fixed multiplication method
84442 this.priv = this.priv.umod(this.ec.curve.n);
84443 };
84444
84445 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
84446 if (key.x || key.y) {
84447 // Montgomery points only have an `x` coordinate.
84448 // Weierstrass/Edwards points on the other hand have both `x` and
84449 // `y` coordinates.
84450 if (this.ec.curve.type === 'mont') {
84451 assert(key.x, 'Need x coordinate');
84452 } else if (this.ec.curve.type === 'short' ||
84453 this.ec.curve.type === 'edwards') {
84454 assert(key.x && key.y, 'Need both x and y coordinate');
84455 }
84456 this.pub = this.ec.curve.point(key.x, key.y);
84457 return;
84458 }
84459 this.pub = this.ec.curve.decodePoint(key, enc);
84460 };
84461
84462 // ECDH
84463 KeyPair.prototype.derive = function derive(pub) {
84464 return pub.mul(this.priv).getX();
84465 };
84466
84467 // ECDSA
84468 KeyPair.prototype.sign = function sign(msg, enc, options) {
84469 return this.ec.sign(msg, this, enc, options);
84470 };
84471
84472 KeyPair.prototype.verify = function verify(msg, signature) {
84473 return this.ec.verify(msg, signature, this);
84474 };
84475
84476 KeyPair.prototype.inspect = function inspect() {
84477 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
84478 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
84479 };
84480
84481 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
84482 'use strict';
84483
84484 var BN = require('bn.js');
84485
84486 var elliptic = require('../../elliptic');
84487 var utils = elliptic.utils;
84488 var assert = utils.assert;
84489
84490 function Signature(options, enc) {
84491 if (options instanceof Signature)
84492 return options;
84493
84494 if (this._importDER(options, enc))
84495 return;
84496
84497 assert(options.r && options.s, 'Signature without r or s');
84498 this.r = new BN(options.r, 16);
84499 this.s = new BN(options.s, 16);
84500 if (options.recoveryParam === undefined)
84501 this.recoveryParam = null;
84502 else
84503 this.recoveryParam = options.recoveryParam;
84504 }
84505 module.exports = Signature;
84506
84507 function Position() {
84508 this.place = 0;
84509 }
84510
84511 function getLength(buf, p) {
84512 var initial = buf[p.place++];
84513 if (!(initial & 0x80)) {
84514 return initial;
84515 }
84516 var octetLen = initial & 0xf;
84517 var val = 0;
84518 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
84519 val <<= 8;
84520 val |= buf[off];
84521 }
84522 p.place = off;
84523 return val;
84524 }
84525
84526 function rmPadding(buf) {
84527 var i = 0;
84528 var len = buf.length - 1;
84529 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
84530 i++;
84531 }
84532 if (i === 0) {
84533 return buf;
84534 }
84535 return buf.slice(i);
84536 }
84537
84538 Signature.prototype._importDER = function _importDER(data, enc) {
84539 data = utils.toArray(data, enc);
84540 var p = new Position();
84541 if (data[p.place++] !== 0x30) {
84542 return false;
84543 }
84544 var len = getLength(data, p);
84545 if ((len + p.place) !== data.length) {
84546 return false;
84547 }
84548 if (data[p.place++] !== 0x02) {
84549 return false;
84550 }
84551 var rlen = getLength(data, p);
84552 var r = data.slice(p.place, rlen + p.place);
84553 p.place += rlen;
84554 if (data[p.place++] !== 0x02) {
84555 return false;
84556 }
84557 var slen = getLength(data, p);
84558 if (data.length !== slen + p.place) {
84559 return false;
84560 }
84561 var s = data.slice(p.place, slen + p.place);
84562 if (r[0] === 0 && (r[1] & 0x80)) {
84563 r = r.slice(1);
84564 }
84565 if (s[0] === 0 && (s[1] & 0x80)) {
84566 s = s.slice(1);
84567 }
84568
84569 this.r = new BN(r);
84570 this.s = new BN(s);
84571 this.recoveryParam = null;
84572
84573 return true;
84574 };
84575
84576 function constructLength(arr, len) {
84577 if (len < 0x80) {
84578 arr.push(len);
84579 return;
84580 }
84581 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
84582 arr.push(octets | 0x80);
84583 while (--octets) {
84584 arr.push((len >>> (octets << 3)) & 0xff);
84585 }
84586 arr.push(len);
84587 }
84588
84589 Signature.prototype.toDER = function toDER(enc) {
84590 var r = this.r.toArray();
84591 var s = this.s.toArray();
84592
84593 // Pad values
84594 if (r[0] & 0x80)
84595 r = [ 0 ].concat(r);
84596 // Pad values
84597 if (s[0] & 0x80)
84598 s = [ 0 ].concat(s);
84599
84600 r = rmPadding(r);
84601 s = rmPadding(s);
84602
84603 while (!s[0] && !(s[1] & 0x80)) {
84604 s = s.slice(1);
84605 }
84606 var arr = [ 0x02 ];
84607 constructLength(arr, r.length);
84608 arr = arr.concat(r);
84609 arr.push(0x02);
84610 constructLength(arr, s.length);
84611 var backHalf = arr.concat(s);
84612 var res = [ 0x30 ];
84613 constructLength(res, backHalf.length);
84614 res = res.concat(backHalf);
84615 return utils.encode(res, enc);
84616 };
84617
84618 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
84619 'use strict';
84620
84621 var hash = require('hash.js');
84622 var elliptic = require('../../elliptic');
84623 var utils = elliptic.utils;
84624 var assert = utils.assert;
84625 var parseBytes = utils.parseBytes;
84626 var KeyPair = require('./key');
84627 var Signature = require('./signature');
84628
84629 function EDDSA(curve) {
84630 assert(curve === 'ed25519', 'only tested with ed25519 so far');
84631
84632 if (!(this instanceof EDDSA))
84633 return new EDDSA(curve);
84634
84635 var curve = elliptic.curves[curve].curve;
84636 this.curve = curve;
84637 this.g = curve.g;
84638 this.g.precompute(curve.n.bitLength() + 1);
84639
84640 this.pointClass = curve.point().constructor;
84641 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
84642 this.hash = hash.sha512;
84643 }
84644
84645 module.exports = EDDSA;
84646
84647 /**
84648 * @param {Array|String} message - message bytes
84649 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
84650 * @returns {Signature} - signature
84651 */
84652 EDDSA.prototype.sign = function sign(message, secret) {
84653 message = parseBytes(message);
84654 var key = this.keyFromSecret(secret);
84655 var r = this.hashInt(key.messagePrefix(), message);
84656 var R = this.g.mul(r);
84657 var Rencoded = this.encodePoint(R);
84658 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
84659 .mul(key.priv());
84660 var S = r.add(s_).umod(this.curve.n);
84661 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
84662 };
84663
84664 /**
84665 * @param {Array} message - message bytes
84666 * @param {Array|String|Signature} sig - sig bytes
84667 * @param {Array|String|Point|KeyPair} pub - public key
84668 * @returns {Boolean} - true if public key matches sig of message
84669 */
84670 EDDSA.prototype.verify = function verify(message, sig, pub) {
84671 message = parseBytes(message);
84672 sig = this.makeSignature(sig);
84673 var key = this.keyFromPublic(pub);
84674 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
84675 var SG = this.g.mul(sig.S());
84676 var RplusAh = sig.R().add(key.pub().mul(h));
84677 return RplusAh.eq(SG);
84678 };
84679
84680 EDDSA.prototype.hashInt = function hashInt() {
84681 var hash = this.hash();
84682 for (var i = 0; i < arguments.length; i++)
84683 hash.update(arguments[i]);
84684 return utils.intFromLE(hash.digest()).umod(this.curve.n);
84685 };
84686
84687 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
84688 return KeyPair.fromPublic(this, pub);
84689 };
84690
84691 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
84692 return KeyPair.fromSecret(this, secret);
84693 };
84694
84695 EDDSA.prototype.makeSignature = function makeSignature(sig) {
84696 if (sig instanceof Signature)
84697 return sig;
84698 return new Signature(this, sig);
84699 };
84700
84701 /**
84702 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
84703 *
84704 * EDDSA defines methods for encoding and decoding points and integers. These are
84705 * helper convenience methods, that pass along to utility functions implied
84706 * parameters.
84707 *
84708 */
84709 EDDSA.prototype.encodePoint = function encodePoint(point) {
84710 var enc = point.getY().toArray('le', this.encodingLength);
84711 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
84712 return enc;
84713 };
84714
84715 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
84716 bytes = utils.parseBytes(bytes);
84717
84718 var lastIx = bytes.length - 1;
84719 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
84720 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
84721
84722 var y = utils.intFromLE(normed);
84723 return this.curve.pointFromY(y, xIsOdd);
84724 };
84725
84726 EDDSA.prototype.encodeInt = function encodeInt(num) {
84727 return num.toArray('le', this.encodingLength);
84728 };
84729
84730 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
84731 return utils.intFromLE(bytes);
84732 };
84733
84734 EDDSA.prototype.isPoint = function isPoint(val) {
84735 return val instanceof this.pointClass;
84736 };
84737
84738 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
84739 'use strict';
84740
84741 var elliptic = require('../../elliptic');
84742 var utils = elliptic.utils;
84743 var assert = utils.assert;
84744 var parseBytes = utils.parseBytes;
84745 var cachedProperty = utils.cachedProperty;
84746
84747 /**
84748 * @param {EDDSA} eddsa - instance
84749 * @param {Object} params - public/private key parameters
84750 *
84751 * @param {Array<Byte>} [params.secret] - secret seed bytes
84752 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
84753 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
84754 *
84755 */
84756 function KeyPair(eddsa, params) {
84757 this.eddsa = eddsa;
84758 this._secret = parseBytes(params.secret);
84759 if (eddsa.isPoint(params.pub))
84760 this._pub = params.pub;
84761 else
84762 this._pubBytes = parseBytes(params.pub);
84763 }
84764
84765 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
84766 if (pub instanceof KeyPair)
84767 return pub;
84768 return new KeyPair(eddsa, { pub: pub });
84769 };
84770
84771 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
84772 if (secret instanceof KeyPair)
84773 return secret;
84774 return new KeyPair(eddsa, { secret: secret });
84775 };
84776
84777 KeyPair.prototype.secret = function secret() {
84778 return this._secret;
84779 };
84780
84781 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
84782 return this.eddsa.encodePoint(this.pub());
84783 });
84784
84785 cachedProperty(KeyPair, 'pub', function pub() {
84786 if (this._pubBytes)
84787 return this.eddsa.decodePoint(this._pubBytes);
84788 return this.eddsa.g.mul(this.priv());
84789 });
84790
84791 cachedProperty(KeyPair, 'privBytes', function privBytes() {
84792 var eddsa = this.eddsa;
84793 var hash = this.hash();
84794 var lastIx = eddsa.encodingLength - 1;
84795
84796 var a = hash.slice(0, eddsa.encodingLength);
84797 a[0] &= 248;
84798 a[lastIx] &= 127;
84799 a[lastIx] |= 64;
84800
84801 return a;
84802 });
84803
84804 cachedProperty(KeyPair, 'priv', function priv() {
84805 return this.eddsa.decodeInt(this.privBytes());
84806 });
84807
84808 cachedProperty(KeyPair, 'hash', function hash() {
84809 return this.eddsa.hash().update(this.secret()).digest();
84810 });
84811
84812 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
84813 return this.hash().slice(this.eddsa.encodingLength);
84814 });
84815
84816 KeyPair.prototype.sign = function sign(message) {
84817 assert(this._secret, 'KeyPair can only verify');
84818 return this.eddsa.sign(message, this);
84819 };
84820
84821 KeyPair.prototype.verify = function verify(message, sig) {
84822 return this.eddsa.verify(message, sig, this);
84823 };
84824
84825 KeyPair.prototype.getSecret = function getSecret(enc) {
84826 assert(this._secret, 'KeyPair is public only');
84827 return utils.encode(this.secret(), enc);
84828 };
84829
84830 KeyPair.prototype.getPublic = function getPublic(enc) {
84831 return utils.encode(this.pubBytes(), enc);
84832 };
84833
84834 module.exports = KeyPair;
84835
84836 },{"../../elliptic":39}],51:[function(require,module,exports){
84837 'use strict';
84838
84839 var BN = require('bn.js');
84840 var elliptic = require('../../elliptic');
84841 var utils = elliptic.utils;
84842 var assert = utils.assert;
84843 var cachedProperty = utils.cachedProperty;
84844 var parseBytes = utils.parseBytes;
84845
84846 /**
84847 * @param {EDDSA} eddsa - eddsa instance
84848 * @param {Array<Bytes>|Object} sig -
84849 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
84850 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
84851 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
84852 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
84853 */
84854 function Signature(eddsa, sig) {
84855 this.eddsa = eddsa;
84856
84857 if (typeof sig !== 'object')
84858 sig = parseBytes(sig);
84859
84860 if (Array.isArray(sig)) {
84861 sig = {
84862 R: sig.slice(0, eddsa.encodingLength),
84863 S: sig.slice(eddsa.encodingLength)
84864 };
84865 }
84866
84867 assert(sig.R && sig.S, 'Signature without R or S');
84868
84869 if (eddsa.isPoint(sig.R))
84870 this._R = sig.R;
84871 if (sig.S instanceof BN)
84872 this._S = sig.S;
84873
84874 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
84875 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
84876 }
84877
84878 cachedProperty(Signature, 'S', function S() {
84879 return this.eddsa.decodeInt(this.Sencoded());
84880 });
84881
84882 cachedProperty(Signature, 'R', function R() {
84883 return this.eddsa.decodePoint(this.Rencoded());
84884 });
84885
84886 cachedProperty(Signature, 'Rencoded', function Rencoded() {
84887 return this.eddsa.encodePoint(this.R());
84888 });
84889
84890 cachedProperty(Signature, 'Sencoded', function Sencoded() {
84891 return this.eddsa.encodeInt(this.S());
84892 });
84893
84894 Signature.prototype.toBytes = function toBytes() {
84895 return this.Rencoded().concat(this.Sencoded());
84896 };
84897
84898 Signature.prototype.toHex = function toHex() {
84899 return utils.encode(this.toBytes(), 'hex').toUpperCase();
84900 };
84901
84902 module.exports = Signature;
84903
84904 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
84905 'use strict';
84906
84907 var hash = require('hash.js');
84908 var elliptic = require('../elliptic');
84909 var utils = elliptic.utils;
84910 var assert = utils.assert;
84911
84912 function HmacDRBG(options) {
84913 if (!(this instanceof HmacDRBG))
84914 return new HmacDRBG(options);
84915 this.hash = options.hash;
84916 this.predResist = !!options.predResist;
84917
84918 this.outLen = this.hash.outSize;
84919 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
84920
84921 this.reseed = null;
84922 this.reseedInterval = null;
84923 this.K = null;
84924 this.V = null;
84925
84926 var entropy = utils.toArray(options.entropy, options.entropyEnc);
84927 var nonce = utils.toArray(options.nonce, options.nonceEnc);
84928 var pers = utils.toArray(options.pers, options.persEnc);
84929 assert(entropy.length >= (this.minEntropy / 8),
84930 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
84931 this._init(entropy, nonce, pers);
84932 }
84933 module.exports = HmacDRBG;
84934
84935 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
84936 var seed = entropy.concat(nonce).concat(pers);
84937
84938 this.K = new Array(this.outLen / 8);
84939 this.V = new Array(this.outLen / 8);
84940 for (var i = 0; i < this.V.length; i++) {
84941 this.K[i] = 0x00;
84942 this.V[i] = 0x01;
84943 }
84944
84945 this._update(seed);
84946 this.reseed = 1;
84947 this.reseedInterval = 0x1000000000000; // 2^48
84948 };
84949
84950 HmacDRBG.prototype._hmac = function hmac() {
84951 return new hash.hmac(this.hash, this.K);
84952 };
84953
84954 HmacDRBG.prototype._update = function update(seed) {
84955 var kmac = this._hmac()
84956 .update(this.V)
84957 .update([ 0x00 ]);
84958 if (seed)
84959 kmac = kmac.update(seed);
84960 this.K = kmac.digest();
84961 this.V = this._hmac().update(this.V).digest();
84962 if (!seed)
84963 return;
84964
84965 this.K = this._hmac()
84966 .update(this.V)
84967 .update([ 0x01 ])
84968 .update(seed)
84969 .digest();
84970 this.V = this._hmac().update(this.V).digest();
84971 };
84972
84973 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
84974 // Optional entropy enc
84975 if (typeof entropyEnc !== 'string') {
84976 addEnc = add;
84977 add = entropyEnc;
84978 entropyEnc = null;
84979 }
84980
84981 entropy = utils.toBuffer(entropy, entropyEnc);
84982 add = utils.toBuffer(add, addEnc);
84983
84984 assert(entropy.length >= (this.minEntropy / 8),
84985 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
84986
84987 this._update(entropy.concat(add || []));
84988 this.reseed = 1;
84989 };
84990
84991 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
84992 if (this.reseed > this.reseedInterval)
84993 throw new Error('Reseed is required');
84994
84995 // Optional encoding
84996 if (typeof enc !== 'string') {
84997 addEnc = add;
84998 add = enc;
84999 enc = null;
85000 }
85001
85002 // Optional additional data
85003 if (add) {
85004 add = utils.toArray(add, addEnc);
85005 this._update(add);
85006 }
85007
85008 var temp = [];
85009 while (temp.length < len) {
85010 this.V = this._hmac().update(this.V).digest();
85011 temp = temp.concat(this.V);
85012 }
85013
85014 var res = temp.slice(0, len);
85015 this._update(add);
85016 this.reseed++;
85017 return utils.encode(res, enc);
85018 };
85019
85020 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
85021 module.exports = {
85022 doubles: {
85023 step: 4,
85024 points: [
85025 [
85026 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
85027 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
85028 ],
85029 [
85030 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
85031 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
85032 ],
85033 [
85034 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
85035 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
85036 ],
85037 [
85038 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
85039 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
85040 ],
85041 [
85042 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
85043 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
85044 ],
85045 [
85046 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
85047 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
85048 ],
85049 [
85050 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
85051 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
85052 ],
85053 [
85054 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
85055 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
85056 ],
85057 [
85058 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
85059 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
85060 ],
85061 [
85062 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
85063 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
85064 ],
85065 [
85066 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
85067 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
85068 ],
85069 [
85070 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
85071 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
85072 ],
85073 [
85074 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
85075 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
85076 ],
85077 [
85078 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
85079 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
85080 ],
85081 [
85082 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
85083 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
85084 ],
85085 [
85086 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
85087 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
85088 ],
85089 [
85090 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
85091 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
85092 ],
85093 [
85094 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
85095 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
85096 ],
85097 [
85098 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
85099 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
85100 ],
85101 [
85102 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
85103 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
85104 ],
85105 [
85106 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
85107 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
85108 ],
85109 [
85110 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
85111 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
85112 ],
85113 [
85114 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
85115 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
85116 ],
85117 [
85118 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
85119 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
85120 ],
85121 [
85122 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
85123 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
85124 ],
85125 [
85126 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
85127 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
85128 ],
85129 [
85130 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
85131 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
85132 ],
85133 [
85134 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
85135 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
85136 ],
85137 [
85138 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
85139 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
85140 ],
85141 [
85142 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
85143 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
85144 ],
85145 [
85146 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
85147 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
85148 ],
85149 [
85150 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
85151 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
85152 ],
85153 [
85154 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
85155 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
85156 ],
85157 [
85158 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
85159 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
85160 ],
85161 [
85162 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
85163 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
85164 ],
85165 [
85166 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
85167 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
85168 ],
85169 [
85170 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
85171 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
85172 ],
85173 [
85174 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
85175 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
85176 ],
85177 [
85178 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
85179 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
85180 ],
85181 [
85182 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
85183 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
85184 ],
85185 [
85186 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
85187 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
85188 ],
85189 [
85190 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
85191 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
85192 ],
85193 [
85194 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
85195 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
85196 ],
85197 [
85198 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
85199 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
85200 ],
85201 [
85202 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
85203 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
85204 ],
85205 [
85206 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
85207 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
85208 ],
85209 [
85210 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
85211 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
85212 ],
85213 [
85214 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
85215 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
85216 ],
85217 [
85218 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
85219 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
85220 ],
85221 [
85222 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
85223 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
85224 ],
85225 [
85226 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
85227 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
85228 ],
85229 [
85230 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
85231 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
85232 ],
85233 [
85234 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
85235 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
85236 ],
85237 [
85238 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
85239 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
85240 ],
85241 [
85242 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
85243 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
85244 ],
85245 [
85246 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
85247 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
85248 ],
85249 [
85250 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
85251 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
85252 ],
85253 [
85254 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
85255 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
85256 ],
85257 [
85258 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
85259 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
85260 ],
85261 [
85262 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
85263 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
85264 ],
85265 [
85266 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
85267 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
85268 ],
85269 [
85270 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
85271 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
85272 ],
85273 [
85274 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
85275 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
85276 ],
85277 [
85278 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
85279 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
85280 ],
85281 [
85282 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
85283 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
85284 ]
85285 ]
85286 },
85287 naf: {
85288 wnd: 7,
85289 points: [
85290 [
85291 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
85292 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
85293 ],
85294 [
85295 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
85296 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
85297 ],
85298 [
85299 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
85300 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
85301 ],
85302 [
85303 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
85304 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
85305 ],
85306 [
85307 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
85308 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
85309 ],
85310 [
85311 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
85312 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
85313 ],
85314 [
85315 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
85316 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
85317 ],
85318 [
85319 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
85320 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
85321 ],
85322 [
85323 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
85324 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
85325 ],
85326 [
85327 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
85328 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
85329 ],
85330 [
85331 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
85332 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
85333 ],
85334 [
85335 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
85336 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
85337 ],
85338 [
85339 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
85340 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
85341 ],
85342 [
85343 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
85344 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
85345 ],
85346 [
85347 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
85348 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
85349 ],
85350 [
85351 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
85352 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
85353 ],
85354 [
85355 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
85356 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
85357 ],
85358 [
85359 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
85360 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
85361 ],
85362 [
85363 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
85364 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
85365 ],
85366 [
85367 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
85368 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
85369 ],
85370 [
85371 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
85372 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
85373 ],
85374 [
85375 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
85376 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
85377 ],
85378 [
85379 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
85380 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
85381 ],
85382 [
85383 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
85384 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
85385 ],
85386 [
85387 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
85388 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
85389 ],
85390 [
85391 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
85392 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
85393 ],
85394 [
85395 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
85396 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
85397 ],
85398 [
85399 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
85400 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
85401 ],
85402 [
85403 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
85404 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
85405 ],
85406 [
85407 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
85408 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
85409 ],
85410 [
85411 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
85412 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
85413 ],
85414 [
85415 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
85416 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
85417 ],
85418 [
85419 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
85420 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
85421 ],
85422 [
85423 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
85424 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
85425 ],
85426 [
85427 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
85428 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
85429 ],
85430 [
85431 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
85432 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
85433 ],
85434 [
85435 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
85436 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
85437 ],
85438 [
85439 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
85440 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
85441 ],
85442 [
85443 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
85444 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
85445 ],
85446 [
85447 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
85448 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
85449 ],
85450 [
85451 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
85452 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
85453 ],
85454 [
85455 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
85456 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
85457 ],
85458 [
85459 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
85460 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
85461 ],
85462 [
85463 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
85464 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
85465 ],
85466 [
85467 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
85468 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
85469 ],
85470 [
85471 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
85472 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
85473 ],
85474 [
85475 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
85476 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
85477 ],
85478 [
85479 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
85480 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
85481 ],
85482 [
85483 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
85484 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
85485 ],
85486 [
85487 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
85488 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
85489 ],
85490 [
85491 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
85492 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
85493 ],
85494 [
85495 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
85496 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
85497 ],
85498 [
85499 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
85500 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
85501 ],
85502 [
85503 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
85504 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
85505 ],
85506 [
85507 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
85508 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
85509 ],
85510 [
85511 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
85512 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
85513 ],
85514 [
85515 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
85516 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
85517 ],
85518 [
85519 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
85520 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
85521 ],
85522 [
85523 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
85524 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
85525 ],
85526 [
85527 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
85528 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
85529 ],
85530 [
85531 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
85532 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
85533 ],
85534 [
85535 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
85536 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
85537 ],
85538 [
85539 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
85540 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
85541 ],
85542 [
85543 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
85544 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
85545 ],
85546 [
85547 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
85548 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
85549 ],
85550 [
85551 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
85552 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
85553 ],
85554 [
85555 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
85556 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
85557 ],
85558 [
85559 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
85560 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
85561 ],
85562 [
85563 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
85564 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
85565 ],
85566 [
85567 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
85568 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
85569 ],
85570 [
85571 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
85572 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
85573 ],
85574 [
85575 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
85576 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
85577 ],
85578 [
85579 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
85580 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
85581 ],
85582 [
85583 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
85584 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
85585 ],
85586 [
85587 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
85588 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
85589 ],
85590 [
85591 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
85592 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
85593 ],
85594 [
85595 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
85596 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
85597 ],
85598 [
85599 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
85600 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
85601 ],
85602 [
85603 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
85604 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
85605 ],
85606 [
85607 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
85608 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
85609 ],
85610 [
85611 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
85612 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
85613 ],
85614 [
85615 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
85616 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
85617 ],
85618 [
85619 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
85620 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
85621 ],
85622 [
85623 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
85624 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
85625 ],
85626 [
85627 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
85628 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
85629 ],
85630 [
85631 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
85632 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
85633 ],
85634 [
85635 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
85636 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
85637 ],
85638 [
85639 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
85640 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
85641 ],
85642 [
85643 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
85644 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
85645 ],
85646 [
85647 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
85648 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
85649 ],
85650 [
85651 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
85652 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
85653 ],
85654 [
85655 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
85656 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
85657 ],
85658 [
85659 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
85660 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
85661 ],
85662 [
85663 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
85664 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
85665 ],
85666 [
85667 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
85668 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
85669 ],
85670 [
85671 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
85672 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
85673 ],
85674 [
85675 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
85676 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
85677 ],
85678 [
85679 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
85680 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
85681 ],
85682 [
85683 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
85684 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
85685 ],
85686 [
85687 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
85688 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
85689 ],
85690 [
85691 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
85692 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
85693 ],
85694 [
85695 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
85696 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
85697 ],
85698 [
85699 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
85700 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
85701 ],
85702 [
85703 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
85704 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
85705 ],
85706 [
85707 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
85708 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
85709 ],
85710 [
85711 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
85712 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
85713 ],
85714 [
85715 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
85716 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
85717 ],
85718 [
85719 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
85720 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
85721 ],
85722 [
85723 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
85724 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
85725 ],
85726 [
85727 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
85728 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
85729 ],
85730 [
85731 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
85732 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
85733 ],
85734 [
85735 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
85736 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
85737 ],
85738 [
85739 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
85740 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
85741 ],
85742 [
85743 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
85744 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
85745 ],
85746 [
85747 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
85748 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
85749 ],
85750 [
85751 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
85752 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
85753 ],
85754 [
85755 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
85756 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
85757 ],
85758 [
85759 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
85760 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
85761 ],
85762 [
85763 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
85764 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
85765 ],
85766 [
85767 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
85768 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
85769 ],
85770 [
85771 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
85772 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
85773 ],
85774 [
85775 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
85776 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
85777 ],
85778 [
85779 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
85780 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
85781 ],
85782 [
85783 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
85784 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
85785 ],
85786 [
85787 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
85788 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
85789 ],
85790 [
85791 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
85792 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
85793 ],
85794 [
85795 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
85796 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
85797 ]
85798 ]
85799 }
85800 };
85801
85802 },{}],54:[function(require,module,exports){
85803 'use strict';
85804
85805 var utils = exports;
85806 var BN = require('bn.js');
85807
85808 utils.assert = function assert(val, msg) {
85809 if (!val)
85810 throw new Error(msg || 'Assertion failed');
85811 };
85812
85813 function toArray(msg, enc) {
85814 if (Array.isArray(msg))
85815 return msg.slice();
85816 if (!msg)
85817 return [];
85818 var res = [];
85819 if (typeof msg !== 'string') {
85820 for (var i = 0; i < msg.length; i++)
85821 res[i] = msg[i] | 0;
85822 return res;
85823 }
85824 if (!enc) {
85825 for (var i = 0; i < msg.length; i++) {
85826 var c = msg.charCodeAt(i);
85827 var hi = c >> 8;
85828 var lo = c & 0xff;
85829 if (hi)
85830 res.push(hi, lo);
85831 else
85832 res.push(lo);
85833 }
85834 } else if (enc === 'hex') {
85835 msg = msg.replace(/[^a-z0-9]+/ig, '');
85836 if (msg.length % 2 !== 0)
85837 msg = '0' + msg;
85838 for (var i = 0; i < msg.length; i += 2)
85839 res.push(parseInt(msg[i] + msg[i + 1], 16));
85840 }
85841 return res;
85842 }
85843 utils.toArray = toArray;
85844
85845 function zero2(word) {
85846 if (word.length === 1)
85847 return '0' + word;
85848 else
85849 return word;
85850 }
85851 utils.zero2 = zero2;
85852
85853 function toHex(msg) {
85854 var res = '';
85855 for (var i = 0; i < msg.length; i++)
85856 res += zero2(msg[i].toString(16));
85857 return res;
85858 }
85859 utils.toHex = toHex;
85860
85861 utils.encode = function encode(arr, enc) {
85862 if (enc === 'hex')
85863 return toHex(arr);
85864 else
85865 return arr;
85866 };
85867
85868 // Represent num in a w-NAF form
85869 function getNAF(num, w) {
85870 var naf = [];
85871 var ws = 1 << (w + 1);
85872 var k = num.clone();
85873 while (k.cmpn(1) >= 0) {
85874 var z;
85875 if (k.isOdd()) {
85876 var mod = k.andln(ws - 1);
85877 if (mod > (ws >> 1) - 1)
85878 z = (ws >> 1) - mod;
85879 else
85880 z = mod;
85881 k.isubn(z);
85882 } else {
85883 z = 0;
85884 }
85885 naf.push(z);
85886
85887 // Optimization, shift by word if possible
85888 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
85889 for (var i = 1; i < shift; i++)
85890 naf.push(0);
85891 k.iushrn(shift);
85892 }
85893
85894 return naf;
85895 }
85896 utils.getNAF = getNAF;
85897
85898 // Represent k1, k2 in a Joint Sparse Form
85899 function getJSF(k1, k2) {
85900 var jsf = [
85901 [],
85902 []
85903 ];
85904
85905 k1 = k1.clone();
85906 k2 = k2.clone();
85907 var d1 = 0;
85908 var d2 = 0;
85909 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
85910
85911 // First phase
85912 var m14 = (k1.andln(3) + d1) & 3;
85913 var m24 = (k2.andln(3) + d2) & 3;
85914 if (m14 === 3)
85915 m14 = -1;
85916 if (m24 === 3)
85917 m24 = -1;
85918 var u1;
85919 if ((m14 & 1) === 0) {
85920 u1 = 0;
85921 } else {
85922 var m8 = (k1.andln(7) + d1) & 7;
85923 if ((m8 === 3 || m8 === 5) && m24 === 2)
85924 u1 = -m14;
85925 else
85926 u1 = m14;
85927 }
85928 jsf[0].push(u1);
85929
85930 var u2;
85931 if ((m24 & 1) === 0) {
85932 u2 = 0;
85933 } else {
85934 var m8 = (k2.andln(7) + d2) & 7;
85935 if ((m8 === 3 || m8 === 5) && m14 === 2)
85936 u2 = -m24;
85937 else
85938 u2 = m24;
85939 }
85940 jsf[1].push(u2);
85941
85942 // Second phase
85943 if (2 * d1 === u1 + 1)
85944 d1 = 1 - d1;
85945 if (2 * d2 === u2 + 1)
85946 d2 = 1 - d2;
85947 k1.iushrn(1);
85948 k2.iushrn(1);
85949 }
85950
85951 return jsf;
85952 }
85953 utils.getJSF = getJSF;
85954
85955 function cachedProperty(obj, name, computer) {
85956 var key = '_' + name;
85957 obj.prototype[name] = function cachedProperty() {
85958 return this[key] !== undefined ? this[key] :
85959 this[key] = computer.call(this);
85960 };
85961 }
85962 utils.cachedProperty = cachedProperty;
85963
85964 function parseBytes(bytes) {
85965 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
85966 bytes;
85967 }
85968 utils.parseBytes = parseBytes;
85969
85970 function intFromLE(bytes) {
85971 return new BN(bytes, 'hex', 'le');
85972 }
85973 utils.intFromLE = intFromLE;
85974
85975
85976 },{"bn.js":33}],55:[function(require,module,exports){
85977 module.exports={
85978 "_args": [
85979 [
85980 {
85981 "raw": "elliptic@^6.2.3",
85982 "scope": null,
85983 "escapedName": "elliptic",
85984 "name": "elliptic",
85985 "rawSpec": "^6.2.3",
85986 "spec": ">=6.2.3 <7.0.0",
85987 "type": "range"
85988 },
85989 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
85990 ]
85991 ],
85992 "_from": "elliptic@>=6.2.3 <7.0.0",
85993 "_id": "elliptic@6.3.3",
85994 "_inCache": true,
85995 "_location": "/elliptic",
85996 "_nodeVersion": "7.0.0",
85997 "_npmOperationalInternal": {
85998 "host": "packages-18-east.internal.npmjs.com",
85999 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
86000 },
86001 "_npmUser": {
86002 "name": "indutny",
86003 "email": "fedor@indutny.com"
86004 },
86005 "_npmVersion": "3.10.8",
86006 "_phantomChildren": {},
86007 "_requested": {
86008 "raw": "elliptic@^6.2.3",
86009 "scope": null,
86010 "escapedName": "elliptic",
86011 "name": "elliptic",
86012 "rawSpec": "^6.2.3",
86013 "spec": ">=6.2.3 <7.0.0",
86014 "type": "range"
86015 },
86016 "_requiredBy": [
86017 "/browserify-sign",
86018 "/create-ecdh",
86019 "/secp256k1"
86020 ],
86021 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
86022 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
86023 "_shrinkwrap": null,
86024 "_spec": "elliptic@^6.2.3",
86025 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
86026 "author": {
86027 "name": "Fedor Indutny",
86028 "email": "fedor@indutny.com"
86029 },
86030 "bugs": {
86031 "url": "https://github.com/indutny/elliptic/issues"
86032 },
86033 "dependencies": {
86034 "bn.js": "^4.4.0",
86035 "brorand": "^1.0.1",
86036 "hash.js": "^1.0.0",
86037 "inherits": "^2.0.1"
86038 },
86039 "description": "EC cryptography",
86040 "devDependencies": {
86041 "brfs": "^1.4.3",
86042 "coveralls": "^2.11.3",
86043 "grunt": "^0.4.5",
86044 "grunt-browserify": "^5.0.0",
86045 "grunt-cli": "^1.2.0",
86046 "grunt-contrib-connect": "^1.0.0",
86047 "grunt-contrib-copy": "^1.0.0",
86048 "grunt-contrib-uglify": "^1.0.1",
86049 "grunt-mocha-istanbul": "^3.0.1",
86050 "grunt-saucelabs": "^8.6.2",
86051 "istanbul": "^0.4.2",
86052 "jscs": "^2.9.0",
86053 "jshint": "^2.6.0",
86054 "mocha": "^2.1.0"
86055 },
86056 "directories": {},
86057 "dist": {
86058 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
86059 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
86060 },
86061 "files": [
86062 "lib"
86063 ],
86064 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
86065 "homepage": "https://github.com/indutny/elliptic",
86066 "keywords": [
86067 "EC",
86068 "Elliptic",
86069 "curve",
86070 "Cryptography"
86071 ],
86072 "license": "MIT",
86073 "main": "lib/elliptic.js",
86074 "maintainers": [
86075 {
86076 "name": "indutny",
86077 "email": "fedor@indutny.com"
86078 }
86079 ],
86080 "name": "elliptic",
86081 "optionalDependencies": {},
86082 "readme": "ERROR: No README data found!",
86083 "repository": {
86084 "type": "git",
86085 "url": "git+ssh://git@github.com/indutny/elliptic.git"
86086 },
86087 "scripts": {
86088 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
86089 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
86090 "lint": "npm run jscs && npm run jshint",
86091 "test": "npm run lint && npm run unit",
86092 "unit": "istanbul test _mocha --reporter=spec test/index.js",
86093 "version": "grunt dist && git add dist/"
86094 },
86095 "version": "6.3.3"
86096 }
86097
86098 },{}],56:[function(require,module,exports){
86099 (function (Buffer){
86100 'use strict';
86101
86102 var isHexPrefixed = require('is-hex-prefixed');
86103 var stripHexPrefix = require('strip-hex-prefix');
86104
86105 /**
86106 * Pads a `String` to have an even length
86107 * @param {String} value
86108 * @return {String} output
86109 */
86110 function padToEven(value) {
86111 var a = value; // eslint-disable-line
86112
86113 if (typeof a !== 'string') {
86114 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
86115 }
86116
86117 if (a.length % 2) {
86118 a = '0' + a;
86119 }
86120
86121 return a;
86122 }
86123
86124 /**
86125 * Converts a `Number` into a hex `String`
86126 * @param {Number} i
86127 * @return {String}
86128 */
86129 function intToHex(i) {
86130 var hex = i.toString(16); // eslint-disable-line
86131
86132 return '0x' + padToEven(hex);
86133 }
86134
86135 /**
86136 * Converts an `Number` to a `Buffer`
86137 * @param {Number} i
86138 * @return {Buffer}
86139 */
86140 function intToBuffer(i) {
86141 var hex = intToHex(i);
86142
86143 return new Buffer(hex.slice(2), 'hex');
86144 }
86145
86146 /**
86147 * Get the binary size of a string
86148 * @param {String} str
86149 * @return {Number}
86150 */
86151 function getBinarySize(str) {
86152 if (typeof str !== 'string') {
86153 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
86154 }
86155
86156 return Buffer.byteLength(str, 'utf8');
86157 }
86158
86159 /**
86160 * Returns TRUE if the first specified array contains all elements
86161 * from the second one. FALSE otherwise.
86162 *
86163 * @param {array} superset
86164 * @param {array} subset
86165 *
86166 * @returns {boolean}
86167 */
86168 function arrayContainsArray(superset, subset, some) {
86169 if (Array.isArray(superset) !== true) {
86170 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
86171 }
86172 if (Array.isArray(subset) !== true) {
86173 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
86174 }
86175
86176 return subset[Boolean(some) && 'some' || 'every'](function (value) {
86177 return superset.indexOf(value) >= 0;
86178 });
86179 }
86180
86181 /**
86182 * Should be called to get utf8 from it's hex representation
86183 *
86184 * @method toUtf8
86185 * @param {String} string in hex
86186 * @returns {String} ascii string representation of hex value
86187 */
86188 function toUtf8(hex) {
86189 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
86190
86191 return bufferValue.toString('utf8');
86192 }
86193
86194 /**
86195 * Should be called to get ascii from it's hex representation
86196 *
86197 * @method toAscii
86198 * @param {String} string in hex
86199 * @returns {String} ascii string representation of hex value
86200 */
86201 function toAscii(hex) {
86202 var str = ''; // eslint-disable-line
86203 var i = 0,
86204 l = hex.length; // eslint-disable-line
86205
86206 if (hex.substring(0, 2) === '0x') {
86207 i = 2;
86208 }
86209
86210 for (; i < l; i += 2) {
86211 var code = parseInt(hex.substr(i, 2), 16);
86212 str += String.fromCharCode(code);
86213 }
86214
86215 return str;
86216 }
86217
86218 /**
86219 * Should be called to get hex representation (prefixed by 0x) of utf8 string
86220 *
86221 * @method fromUtf8
86222 * @param {String} string
86223 * @param {Number} optional padding
86224 * @returns {String} hex representation of input string
86225 */
86226 function fromUtf8(stringValue) {
86227 var str = new Buffer(stringValue, 'utf8');
86228
86229 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
86230 }
86231
86232 /**
86233 * Should be called to get hex representation (prefixed by 0x) of ascii string
86234 *
86235 * @method fromAscii
86236 * @param {String} string
86237 * @param {Number} optional padding
86238 * @returns {String} hex representation of input string
86239 */
86240 function fromAscii(stringValue) {
86241 var hex = ''; // eslint-disable-line
86242 for (var i = 0; i < stringValue.length; i++) {
86243 // eslint-disable-line
86244 var code = stringValue.charCodeAt(i);
86245 var n = code.toString(16);
86246 hex += n.length < 2 ? '0' + n : n;
86247 }
86248
86249 return '0x' + hex;
86250 }
86251
86252 /**
86253 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
86254 *
86255 * @method getKeys get specific key from inner object array of objects
86256 * @param {String} params
86257 * @param {String} key
86258 * @param {Boolean} allowEmpty
86259 * @returns {Array} output just a simple array of output keys
86260 */
86261 function getKeys(params, key, allowEmpty) {
86262 if (!Array.isArray(params)) {
86263 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
86264 }
86265 if (typeof key !== 'string') {
86266 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
86267 }
86268
86269 var result = []; // eslint-disable-line
86270
86271 for (var i = 0; i < params.length; i++) {
86272 // eslint-disable-line
86273 var value = params[i][key]; // eslint-disable-line
86274 if (allowEmpty && !value) {
86275 value = '';
86276 } else if (typeof value !== 'string') {
86277 throw new Error('invalid abi');
86278 }
86279 result.push(value);
86280 }
86281
86282 return result;
86283 }
86284
86285 /**
86286 * Is the string a hex string.
86287 *
86288 * @method check if string is hex string of specific length
86289 * @param {String} value
86290 * @param {Number} length
86291 * @returns {Boolean} output the string is a hex string
86292 */
86293 function isHexString(value, length) {
86294 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
86295 return false;
86296 }
86297
86298 if (length && value.length !== 2 + 2 * length) {
86299 return false;
86300 }
86301
86302 return true;
86303 }
86304
86305 module.exports = {
86306 arrayContainsArray: arrayContainsArray,
86307 intToBuffer: intToBuffer,
86308 getBinarySize: getBinarySize,
86309 isHexPrefixed: isHexPrefixed,
86310 stripHexPrefix: stripHexPrefix,
86311 padToEven: padToEven,
86312 intToHex: intToHex,
86313 fromAscii: fromAscii,
86314 fromUtf8: fromUtf8,
86315 toAscii: toAscii,
86316 toUtf8: toUtf8,
86317 getKeys: getKeys,
86318 isHexString: isHexString
86319 };
86320 }).call(this,require("buffer").Buffer)
86321 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
86322 var hash = exports;
86323
86324 hash.utils = require('./hash/utils');
86325 hash.common = require('./hash/common');
86326 hash.sha = require('./hash/sha');
86327 hash.ripemd = require('./hash/ripemd');
86328 hash.hmac = require('./hash/hmac');
86329
86330 // Proxy hash functions to the main object
86331 hash.sha1 = hash.sha.sha1;
86332 hash.sha256 = hash.sha.sha256;
86333 hash.sha224 = hash.sha.sha224;
86334 hash.sha384 = hash.sha.sha384;
86335 hash.sha512 = hash.sha.sha512;
86336 hash.ripemd160 = hash.ripemd.ripemd160;
86337
86338 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
86339 var hash = require('../hash');
86340 var utils = hash.utils;
86341 var assert = utils.assert;
86342
86343 function BlockHash() {
86344 this.pending = null;
86345 this.pendingTotal = 0;
86346 this.blockSize = this.constructor.blockSize;
86347 this.outSize = this.constructor.outSize;
86348 this.hmacStrength = this.constructor.hmacStrength;
86349 this.padLength = this.constructor.padLength / 8;
86350 this.endian = 'big';
86351
86352 this._delta8 = this.blockSize / 8;
86353 this._delta32 = this.blockSize / 32;
86354 }
86355 exports.BlockHash = BlockHash;
86356
86357 BlockHash.prototype.update = function update(msg, enc) {
86358 // Convert message to array, pad it, and join into 32bit blocks
86359 msg = utils.toArray(msg, enc);
86360 if (!this.pending)
86361 this.pending = msg;
86362 else
86363 this.pending = this.pending.concat(msg);
86364 this.pendingTotal += msg.length;
86365
86366 // Enough data, try updating
86367 if (this.pending.length >= this._delta8) {
86368 msg = this.pending;
86369
86370 // Process pending data in blocks
86371 var r = msg.length % this._delta8;
86372 this.pending = msg.slice(msg.length - r, msg.length);
86373 if (this.pending.length === 0)
86374 this.pending = null;
86375
86376 msg = utils.join32(msg, 0, msg.length - r, this.endian);
86377 for (var i = 0; i < msg.length; i += this._delta32)
86378 this._update(msg, i, i + this._delta32);
86379 }
86380
86381 return this;
86382 };
86383
86384 BlockHash.prototype.digest = function digest(enc) {
86385 this.update(this._pad());
86386 assert(this.pending === null);
86387
86388 return this._digest(enc);
86389 };
86390
86391 BlockHash.prototype._pad = function pad() {
86392 var len = this.pendingTotal;
86393 var bytes = this._delta8;
86394 var k = bytes - ((len + this.padLength) % bytes);
86395 var res = new Array(k + this.padLength);
86396 res[0] = 0x80;
86397 for (var i = 1; i < k; i++)
86398 res[i] = 0;
86399
86400 // Append length
86401 len <<= 3;
86402 if (this.endian === 'big') {
86403 for (var t = 8; t < this.padLength; t++)
86404 res[i++] = 0;
86405
86406 res[i++] = 0;
86407 res[i++] = 0;
86408 res[i++] = 0;
86409 res[i++] = 0;
86410 res[i++] = (len >>> 24) & 0xff;
86411 res[i++] = (len >>> 16) & 0xff;
86412 res[i++] = (len >>> 8) & 0xff;
86413 res[i++] = len & 0xff;
86414 } else {
86415 res[i++] = len & 0xff;
86416 res[i++] = (len >>> 8) & 0xff;
86417 res[i++] = (len >>> 16) & 0xff;
86418 res[i++] = (len >>> 24) & 0xff;
86419 res[i++] = 0;
86420 res[i++] = 0;
86421 res[i++] = 0;
86422 res[i++] = 0;
86423
86424 for (var t = 8; t < this.padLength; t++)
86425 res[i++] = 0;
86426 }
86427
86428 return res;
86429 };
86430
86431 },{"../hash":57}],59:[function(require,module,exports){
86432 var hmac = exports;
86433
86434 var hash = require('../hash');
86435 var utils = hash.utils;
86436 var assert = utils.assert;
86437
86438 function Hmac(hash, key, enc) {
86439 if (!(this instanceof Hmac))
86440 return new Hmac(hash, key, enc);
86441 this.Hash = hash;
86442 this.blockSize = hash.blockSize / 8;
86443 this.outSize = hash.outSize / 8;
86444 this.inner = null;
86445 this.outer = null;
86446
86447 this._init(utils.toArray(key, enc));
86448 }
86449 module.exports = Hmac;
86450
86451 Hmac.prototype._init = function init(key) {
86452 // Shorten key, if needed
86453 if (key.length > this.blockSize)
86454 key = new this.Hash().update(key).digest();
86455 assert(key.length <= this.blockSize);
86456
86457 // Add padding to key
86458 for (var i = key.length; i < this.blockSize; i++)
86459 key.push(0);
86460
86461 for (var i = 0; i < key.length; i++)
86462 key[i] ^= 0x36;
86463 this.inner = new this.Hash().update(key);
86464
86465 // 0x36 ^ 0x5c = 0x6a
86466 for (var i = 0; i < key.length; i++)
86467 key[i] ^= 0x6a;
86468 this.outer = new this.Hash().update(key);
86469 };
86470
86471 Hmac.prototype.update = function update(msg, enc) {
86472 this.inner.update(msg, enc);
86473 return this;
86474 };
86475
86476 Hmac.prototype.digest = function digest(enc) {
86477 this.outer.update(this.inner.digest());
86478 return this.outer.digest(enc);
86479 };
86480
86481 },{"../hash":57}],60:[function(require,module,exports){
86482 var hash = require('../hash');
86483 var utils = hash.utils;
86484
86485 var rotl32 = utils.rotl32;
86486 var sum32 = utils.sum32;
86487 var sum32_3 = utils.sum32_3;
86488 var sum32_4 = utils.sum32_4;
86489 var BlockHash = hash.common.BlockHash;
86490
86491 function RIPEMD160() {
86492 if (!(this instanceof RIPEMD160))
86493 return new RIPEMD160();
86494
86495 BlockHash.call(this);
86496
86497 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
86498 this.endian = 'little';
86499 }
86500 utils.inherits(RIPEMD160, BlockHash);
86501 exports.ripemd160 = RIPEMD160;
86502
86503 RIPEMD160.blockSize = 512;
86504 RIPEMD160.outSize = 160;
86505 RIPEMD160.hmacStrength = 192;
86506 RIPEMD160.padLength = 64;
86507
86508 RIPEMD160.prototype._update = function update(msg, start) {
86509 var A = this.h[0];
86510 var B = this.h[1];
86511 var C = this.h[2];
86512 var D = this.h[3];
86513 var E = this.h[4];
86514 var Ah = A;
86515 var Bh = B;
86516 var Ch = C;
86517 var Dh = D;
86518 var Eh = E;
86519 for (var j = 0; j < 80; j++) {
86520 var T = sum32(
86521 rotl32(
86522 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
86523 s[j]),
86524 E);
86525 A = E;
86526 E = D;
86527 D = rotl32(C, 10);
86528 C = B;
86529 B = T;
86530 T = sum32(
86531 rotl32(
86532 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
86533 sh[j]),
86534 Eh);
86535 Ah = Eh;
86536 Eh = Dh;
86537 Dh = rotl32(Ch, 10);
86538 Ch = Bh;
86539 Bh = T;
86540 }
86541 T = sum32_3(this.h[1], C, Dh);
86542 this.h[1] = sum32_3(this.h[2], D, Eh);
86543 this.h[2] = sum32_3(this.h[3], E, Ah);
86544 this.h[3] = sum32_3(this.h[4], A, Bh);
86545 this.h[4] = sum32_3(this.h[0], B, Ch);
86546 this.h[0] = T;
86547 };
86548
86549 RIPEMD160.prototype._digest = function digest(enc) {
86550 if (enc === 'hex')
86551 return utils.toHex32(this.h, 'little');
86552 else
86553 return utils.split32(this.h, 'little');
86554 };
86555
86556 function f(j, x, y, z) {
86557 if (j <= 15)
86558 return x ^ y ^ z;
86559 else if (j <= 31)
86560 return (x & y) | ((~x) & z);
86561 else if (j <= 47)
86562 return (x | (~y)) ^ z;
86563 else if (j <= 63)
86564 return (x & z) | (y & (~z));
86565 else
86566 return x ^ (y | (~z));
86567 }
86568
86569 function K(j) {
86570 if (j <= 15)
86571 return 0x00000000;
86572 else if (j <= 31)
86573 return 0x5a827999;
86574 else if (j <= 47)
86575 return 0x6ed9eba1;
86576 else if (j <= 63)
86577 return 0x8f1bbcdc;
86578 else
86579 return 0xa953fd4e;
86580 }
86581
86582 function Kh(j) {
86583 if (j <= 15)
86584 return 0x50a28be6;
86585 else if (j <= 31)
86586 return 0x5c4dd124;
86587 else if (j <= 47)
86588 return 0x6d703ef3;
86589 else if (j <= 63)
86590 return 0x7a6d76e9;
86591 else
86592 return 0x00000000;
86593 }
86594
86595 var r = [
86596 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
86597 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
86598 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
86599 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
86600 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
86601 ];
86602
86603 var rh = [
86604 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
86605 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
86606 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
86607 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
86608 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
86609 ];
86610
86611 var s = [
86612 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
86613 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
86614 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
86615 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
86616 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
86617 ];
86618
86619 var sh = [
86620 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
86621 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
86622 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
86623 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
86624 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
86625 ];
86626
86627 },{"../hash":57}],61:[function(require,module,exports){
86628 var hash = require('../hash');
86629 var utils = hash.utils;
86630 var assert = utils.assert;
86631
86632 var rotr32 = utils.rotr32;
86633 var rotl32 = utils.rotl32;
86634 var sum32 = utils.sum32;
86635 var sum32_4 = utils.sum32_4;
86636 var sum32_5 = utils.sum32_5;
86637 var rotr64_hi = utils.rotr64_hi;
86638 var rotr64_lo = utils.rotr64_lo;
86639 var shr64_hi = utils.shr64_hi;
86640 var shr64_lo = utils.shr64_lo;
86641 var sum64 = utils.sum64;
86642 var sum64_hi = utils.sum64_hi;
86643 var sum64_lo = utils.sum64_lo;
86644 var sum64_4_hi = utils.sum64_4_hi;
86645 var sum64_4_lo = utils.sum64_4_lo;
86646 var sum64_5_hi = utils.sum64_5_hi;
86647 var sum64_5_lo = utils.sum64_5_lo;
86648 var BlockHash = hash.common.BlockHash;
86649
86650 var sha256_K = [
86651 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
86652 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
86653 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
86654 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
86655 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
86656 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
86657 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
86658 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
86659 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
86660 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
86661 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
86662 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
86663 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
86664 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
86665 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
86666 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
86667 ];
86668
86669 var sha512_K = [
86670 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
86671 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
86672 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
86673 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
86674 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
86675 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
86676 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
86677 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
86678 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
86679 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
86680 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
86681 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
86682 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
86683 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
86684 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
86685 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
86686 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
86687 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
86688 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
86689 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
86690 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
86691 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
86692 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
86693 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
86694 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
86695 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
86696 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
86697 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
86698 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
86699 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
86700 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
86701 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
86702 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
86703 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
86704 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
86705 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
86706 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
86707 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
86708 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
86709 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
86710 ];
86711
86712 var sha1_K = [
86713 0x5A827999, 0x6ED9EBA1,
86714 0x8F1BBCDC, 0xCA62C1D6
86715 ];
86716
86717 function SHA256() {
86718 if (!(this instanceof SHA256))
86719 return new SHA256();
86720
86721 BlockHash.call(this);
86722 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
86723 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
86724 this.k = sha256_K;
86725 this.W = new Array(64);
86726 }
86727 utils.inherits(SHA256, BlockHash);
86728 exports.sha256 = SHA256;
86729
86730 SHA256.blockSize = 512;
86731 SHA256.outSize = 256;
86732 SHA256.hmacStrength = 192;
86733 SHA256.padLength = 64;
86734
86735 SHA256.prototype._update = function _update(msg, start) {
86736 var W = this.W;
86737
86738 for (var i = 0; i < 16; i++)
86739 W[i] = msg[start + i];
86740 for (; i < W.length; i++)
86741 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
86742
86743 var a = this.h[0];
86744 var b = this.h[1];
86745 var c = this.h[2];
86746 var d = this.h[3];
86747 var e = this.h[4];
86748 var f = this.h[5];
86749 var g = this.h[6];
86750 var h = this.h[7];
86751
86752 assert(this.k.length === W.length);
86753 for (var i = 0; i < W.length; i++) {
86754 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
86755 var T2 = sum32(s0_256(a), maj32(a, b, c));
86756 h = g;
86757 g = f;
86758 f = e;
86759 e = sum32(d, T1);
86760 d = c;
86761 c = b;
86762 b = a;
86763 a = sum32(T1, T2);
86764 }
86765
86766 this.h[0] = sum32(this.h[0], a);
86767 this.h[1] = sum32(this.h[1], b);
86768 this.h[2] = sum32(this.h[2], c);
86769 this.h[3] = sum32(this.h[3], d);
86770 this.h[4] = sum32(this.h[4], e);
86771 this.h[5] = sum32(this.h[5], f);
86772 this.h[6] = sum32(this.h[6], g);
86773 this.h[7] = sum32(this.h[7], h);
86774 };
86775
86776 SHA256.prototype._digest = function digest(enc) {
86777 if (enc === 'hex')
86778 return utils.toHex32(this.h, 'big');
86779 else
86780 return utils.split32(this.h, 'big');
86781 };
86782
86783 function SHA224() {
86784 if (!(this instanceof SHA224))
86785 return new SHA224();
86786
86787 SHA256.call(this);
86788 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
86789 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
86790 }
86791 utils.inherits(SHA224, SHA256);
86792 exports.sha224 = SHA224;
86793
86794 SHA224.blockSize = 512;
86795 SHA224.outSize = 224;
86796 SHA224.hmacStrength = 192;
86797 SHA224.padLength = 64;
86798
86799 SHA224.prototype._digest = function digest(enc) {
86800 // Just truncate output
86801 if (enc === 'hex')
86802 return utils.toHex32(this.h.slice(0, 7), 'big');
86803 else
86804 return utils.split32(this.h.slice(0, 7), 'big');
86805 };
86806
86807 function SHA512() {
86808 if (!(this instanceof SHA512))
86809 return new SHA512();
86810
86811 BlockHash.call(this);
86812 this.h = [ 0x6a09e667, 0xf3bcc908,
86813 0xbb67ae85, 0x84caa73b,
86814 0x3c6ef372, 0xfe94f82b,
86815 0xa54ff53a, 0x5f1d36f1,
86816 0x510e527f, 0xade682d1,
86817 0x9b05688c, 0x2b3e6c1f,
86818 0x1f83d9ab, 0xfb41bd6b,
86819 0x5be0cd19, 0x137e2179 ];
86820 this.k = sha512_K;
86821 this.W = new Array(160);
86822 }
86823 utils.inherits(SHA512, BlockHash);
86824 exports.sha512 = SHA512;
86825
86826 SHA512.blockSize = 1024;
86827 SHA512.outSize = 512;
86828 SHA512.hmacStrength = 192;
86829 SHA512.padLength = 128;
86830
86831 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
86832 var W = this.W;
86833
86834 // 32 x 32bit words
86835 for (var i = 0; i < 32; i++)
86836 W[i] = msg[start + i];
86837 for (; i < W.length; i += 2) {
86838 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
86839 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
86840 var c1_hi = W[i - 14]; // i - 7
86841 var c1_lo = W[i - 13];
86842 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
86843 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
86844 var c3_hi = W[i - 32]; // i - 16
86845 var c3_lo = W[i - 31];
86846
86847 W[i] = sum64_4_hi(c0_hi, c0_lo,
86848 c1_hi, c1_lo,
86849 c2_hi, c2_lo,
86850 c3_hi, c3_lo);
86851 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
86852 c1_hi, c1_lo,
86853 c2_hi, c2_lo,
86854 c3_hi, c3_lo);
86855 }
86856 };
86857
86858 SHA512.prototype._update = function _update(msg, start) {
86859 this._prepareBlock(msg, start);
86860
86861 var W = this.W;
86862
86863 var ah = this.h[0];
86864 var al = this.h[1];
86865 var bh = this.h[2];
86866 var bl = this.h[3];
86867 var ch = this.h[4];
86868 var cl = this.h[5];
86869 var dh = this.h[6];
86870 var dl = this.h[7];
86871 var eh = this.h[8];
86872 var el = this.h[9];
86873 var fh = this.h[10];
86874 var fl = this.h[11];
86875 var gh = this.h[12];
86876 var gl = this.h[13];
86877 var hh = this.h[14];
86878 var hl = this.h[15];
86879
86880 assert(this.k.length === W.length);
86881 for (var i = 0; i < W.length; i += 2) {
86882 var c0_hi = hh;
86883 var c0_lo = hl;
86884 var c1_hi = s1_512_hi(eh, el);
86885 var c1_lo = s1_512_lo(eh, el);
86886 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
86887 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
86888 var c3_hi = this.k[i];
86889 var c3_lo = this.k[i + 1];
86890 var c4_hi = W[i];
86891 var c4_lo = W[i + 1];
86892
86893 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
86894 c1_hi, c1_lo,
86895 c2_hi, c2_lo,
86896 c3_hi, c3_lo,
86897 c4_hi, c4_lo);
86898 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
86899 c1_hi, c1_lo,
86900 c2_hi, c2_lo,
86901 c3_hi, c3_lo,
86902 c4_hi, c4_lo);
86903
86904 var c0_hi = s0_512_hi(ah, al);
86905 var c0_lo = s0_512_lo(ah, al);
86906 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
86907 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
86908
86909 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
86910 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
86911
86912 hh = gh;
86913 hl = gl;
86914
86915 gh = fh;
86916 gl = fl;
86917
86918 fh = eh;
86919 fl = el;
86920
86921 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
86922 el = sum64_lo(dl, dl, T1_hi, T1_lo);
86923
86924 dh = ch;
86925 dl = cl;
86926
86927 ch = bh;
86928 cl = bl;
86929
86930 bh = ah;
86931 bl = al;
86932
86933 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
86934 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
86935 }
86936
86937 sum64(this.h, 0, ah, al);
86938 sum64(this.h, 2, bh, bl);
86939 sum64(this.h, 4, ch, cl);
86940 sum64(this.h, 6, dh, dl);
86941 sum64(this.h, 8, eh, el);
86942 sum64(this.h, 10, fh, fl);
86943 sum64(this.h, 12, gh, gl);
86944 sum64(this.h, 14, hh, hl);
86945 };
86946
86947 SHA512.prototype._digest = function digest(enc) {
86948 if (enc === 'hex')
86949 return utils.toHex32(this.h, 'big');
86950 else
86951 return utils.split32(this.h, 'big');
86952 };
86953
86954 function SHA384() {
86955 if (!(this instanceof SHA384))
86956 return new SHA384();
86957
86958 SHA512.call(this);
86959 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
86960 0x629a292a, 0x367cd507,
86961 0x9159015a, 0x3070dd17,
86962 0x152fecd8, 0xf70e5939,
86963 0x67332667, 0xffc00b31,
86964 0x8eb44a87, 0x68581511,
86965 0xdb0c2e0d, 0x64f98fa7,
86966 0x47b5481d, 0xbefa4fa4 ];
86967 }
86968 utils.inherits(SHA384, SHA512);
86969 exports.sha384 = SHA384;
86970
86971 SHA384.blockSize = 1024;
86972 SHA384.outSize = 384;
86973 SHA384.hmacStrength = 192;
86974 SHA384.padLength = 128;
86975
86976 SHA384.prototype._digest = function digest(enc) {
86977 if (enc === 'hex')
86978 return utils.toHex32(this.h.slice(0, 12), 'big');
86979 else
86980 return utils.split32(this.h.slice(0, 12), 'big');
86981 };
86982
86983 function SHA1() {
86984 if (!(this instanceof SHA1))
86985 return new SHA1();
86986
86987 BlockHash.call(this);
86988 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
86989 0x10325476, 0xc3d2e1f0 ];
86990 this.W = new Array(80);
86991 }
86992
86993 utils.inherits(SHA1, BlockHash);
86994 exports.sha1 = SHA1;
86995
86996 SHA1.blockSize = 512;
86997 SHA1.outSize = 160;
86998 SHA1.hmacStrength = 80;
86999 SHA1.padLength = 64;
87000
87001 SHA1.prototype._update = function _update(msg, start) {
87002 var W = this.W;
87003
87004 for (var i = 0; i < 16; i++)
87005 W[i] = msg[start + i];
87006
87007 for(; i < W.length; i++)
87008 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
87009
87010 var a = this.h[0];
87011 var b = this.h[1];
87012 var c = this.h[2];
87013 var d = this.h[3];
87014 var e = this.h[4];
87015
87016 for (var i = 0; i < W.length; i++) {
87017 var s = ~~(i / 20);
87018 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
87019 e = d;
87020 d = c;
87021 c = rotl32(b, 30);
87022 b = a;
87023 a = t;
87024 }
87025
87026 this.h[0] = sum32(this.h[0], a);
87027 this.h[1] = sum32(this.h[1], b);
87028 this.h[2] = sum32(this.h[2], c);
87029 this.h[3] = sum32(this.h[3], d);
87030 this.h[4] = sum32(this.h[4], e);
87031 };
87032
87033 SHA1.prototype._digest = function digest(enc) {
87034 if (enc === 'hex')
87035 return utils.toHex32(this.h, 'big');
87036 else
87037 return utils.split32(this.h, 'big');
87038 };
87039
87040 function ch32(x, y, z) {
87041 return (x & y) ^ ((~x) & z);
87042 }
87043
87044 function maj32(x, y, z) {
87045 return (x & y) ^ (x & z) ^ (y & z);
87046 }
87047
87048 function p32(x, y, z) {
87049 return x ^ y ^ z;
87050 }
87051
87052 function s0_256(x) {
87053 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
87054 }
87055
87056 function s1_256(x) {
87057 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
87058 }
87059
87060 function g0_256(x) {
87061 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
87062 }
87063
87064 function g1_256(x) {
87065 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
87066 }
87067
87068 function ft_1(s, x, y, z) {
87069 if (s === 0)
87070 return ch32(x, y, z);
87071 if (s === 1 || s === 3)
87072 return p32(x, y, z);
87073 if (s === 2)
87074 return maj32(x, y, z);
87075 }
87076
87077 function ch64_hi(xh, xl, yh, yl, zh, zl) {
87078 var r = (xh & yh) ^ ((~xh) & zh);
87079 if (r < 0)
87080 r += 0x100000000;
87081 return r;
87082 }
87083
87084 function ch64_lo(xh, xl, yh, yl, zh, zl) {
87085 var r = (xl & yl) ^ ((~xl) & zl);
87086 if (r < 0)
87087 r += 0x100000000;
87088 return r;
87089 }
87090
87091 function maj64_hi(xh, xl, yh, yl, zh, zl) {
87092 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
87093 if (r < 0)
87094 r += 0x100000000;
87095 return r;
87096 }
87097
87098 function maj64_lo(xh, xl, yh, yl, zh, zl) {
87099 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
87100 if (r < 0)
87101 r += 0x100000000;
87102 return r;
87103 }
87104
87105 function s0_512_hi(xh, xl) {
87106 var c0_hi = rotr64_hi(xh, xl, 28);
87107 var c1_hi = rotr64_hi(xl, xh, 2); // 34
87108 var c2_hi = rotr64_hi(xl, xh, 7); // 39
87109
87110 var r = c0_hi ^ c1_hi ^ c2_hi;
87111 if (r < 0)
87112 r += 0x100000000;
87113 return r;
87114 }
87115
87116 function s0_512_lo(xh, xl) {
87117 var c0_lo = rotr64_lo(xh, xl, 28);
87118 var c1_lo = rotr64_lo(xl, xh, 2); // 34
87119 var c2_lo = rotr64_lo(xl, xh, 7); // 39
87120
87121 var r = c0_lo ^ c1_lo ^ c2_lo;
87122 if (r < 0)
87123 r += 0x100000000;
87124 return r;
87125 }
87126
87127 function s1_512_hi(xh, xl) {
87128 var c0_hi = rotr64_hi(xh, xl, 14);
87129 var c1_hi = rotr64_hi(xh, xl, 18);
87130 var c2_hi = rotr64_hi(xl, xh, 9); // 41
87131
87132 var r = c0_hi ^ c1_hi ^ c2_hi;
87133 if (r < 0)
87134 r += 0x100000000;
87135 return r;
87136 }
87137
87138 function s1_512_lo(xh, xl) {
87139 var c0_lo = rotr64_lo(xh, xl, 14);
87140 var c1_lo = rotr64_lo(xh, xl, 18);
87141 var c2_lo = rotr64_lo(xl, xh, 9); // 41
87142
87143 var r = c0_lo ^ c1_lo ^ c2_lo;
87144 if (r < 0)
87145 r += 0x100000000;
87146 return r;
87147 }
87148
87149 function g0_512_hi(xh, xl) {
87150 var c0_hi = rotr64_hi(xh, xl, 1);
87151 var c1_hi = rotr64_hi(xh, xl, 8);
87152 var c2_hi = shr64_hi(xh, xl, 7);
87153
87154 var r = c0_hi ^ c1_hi ^ c2_hi;
87155 if (r < 0)
87156 r += 0x100000000;
87157 return r;
87158 }
87159
87160 function g0_512_lo(xh, xl) {
87161 var c0_lo = rotr64_lo(xh, xl, 1);
87162 var c1_lo = rotr64_lo(xh, xl, 8);
87163 var c2_lo = shr64_lo(xh, xl, 7);
87164
87165 var r = c0_lo ^ c1_lo ^ c2_lo;
87166 if (r < 0)
87167 r += 0x100000000;
87168 return r;
87169 }
87170
87171 function g1_512_hi(xh, xl) {
87172 var c0_hi = rotr64_hi(xh, xl, 19);
87173 var c1_hi = rotr64_hi(xl, xh, 29); // 61
87174 var c2_hi = shr64_hi(xh, xl, 6);
87175
87176 var r = c0_hi ^ c1_hi ^ c2_hi;
87177 if (r < 0)
87178 r += 0x100000000;
87179 return r;
87180 }
87181
87182 function g1_512_lo(xh, xl) {
87183 var c0_lo = rotr64_lo(xh, xl, 19);
87184 var c1_lo = rotr64_lo(xl, xh, 29); // 61
87185 var c2_lo = shr64_lo(xh, xl, 6);
87186
87187 var r = c0_lo ^ c1_lo ^ c2_lo;
87188 if (r < 0)
87189 r += 0x100000000;
87190 return r;
87191 }
87192
87193 },{"../hash":57}],62:[function(require,module,exports){
87194 var utils = exports;
87195 var inherits = require('inherits');
87196
87197 function toArray(msg, enc) {
87198 if (Array.isArray(msg))
87199 return msg.slice();
87200 if (!msg)
87201 return [];
87202 var res = [];
87203 if (typeof msg === 'string') {
87204 if (!enc) {
87205 for (var i = 0; i < msg.length; i++) {
87206 var c = msg.charCodeAt(i);
87207 var hi = c >> 8;
87208 var lo = c & 0xff;
87209 if (hi)
87210 res.push(hi, lo);
87211 else
87212 res.push(lo);
87213 }
87214 } else if (enc === 'hex') {
87215 msg = msg.replace(/[^a-z0-9]+/ig, '');
87216 if (msg.length % 2 !== 0)
87217 msg = '0' + msg;
87218 for (var i = 0; i < msg.length; i += 2)
87219 res.push(parseInt(msg[i] + msg[i + 1], 16));
87220 }
87221 } else {
87222 for (var i = 0; i < msg.length; i++)
87223 res[i] = msg[i] | 0;
87224 }
87225 return res;
87226 }
87227 utils.toArray = toArray;
87228
87229 function toHex(msg) {
87230 var res = '';
87231 for (var i = 0; i < msg.length; i++)
87232 res += zero2(msg[i].toString(16));
87233 return res;
87234 }
87235 utils.toHex = toHex;
87236
87237 function htonl(w) {
87238 var res = (w >>> 24) |
87239 ((w >>> 8) & 0xff00) |
87240 ((w << 8) & 0xff0000) |
87241 ((w & 0xff) << 24);
87242 return res >>> 0;
87243 }
87244 utils.htonl = htonl;
87245
87246 function toHex32(msg, endian) {
87247 var res = '';
87248 for (var i = 0; i < msg.length; i++) {
87249 var w = msg[i];
87250 if (endian === 'little')
87251 w = htonl(w);
87252 res += zero8(w.toString(16));
87253 }
87254 return res;
87255 }
87256 utils.toHex32 = toHex32;
87257
87258 function zero2(word) {
87259 if (word.length === 1)
87260 return '0' + word;
87261 else
87262 return word;
87263 }
87264 utils.zero2 = zero2;
87265
87266 function zero8(word) {
87267 if (word.length === 7)
87268 return '0' + word;
87269 else if (word.length === 6)
87270 return '00' + word;
87271 else if (word.length === 5)
87272 return '000' + word;
87273 else if (word.length === 4)
87274 return '0000' + word;
87275 else if (word.length === 3)
87276 return '00000' + word;
87277 else if (word.length === 2)
87278 return '000000' + word;
87279 else if (word.length === 1)
87280 return '0000000' + word;
87281 else
87282 return word;
87283 }
87284 utils.zero8 = zero8;
87285
87286 function join32(msg, start, end, endian) {
87287 var len = end - start;
87288 assert(len % 4 === 0);
87289 var res = new Array(len / 4);
87290 for (var i = 0, k = start; i < res.length; i++, k += 4) {
87291 var w;
87292 if (endian === 'big')
87293 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
87294 else
87295 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
87296 res[i] = w >>> 0;
87297 }
87298 return res;
87299 }
87300 utils.join32 = join32;
87301
87302 function split32(msg, endian) {
87303 var res = new Array(msg.length * 4);
87304 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
87305 var m = msg[i];
87306 if (endian === 'big') {
87307 res[k] = m >>> 24;
87308 res[k + 1] = (m >>> 16) & 0xff;
87309 res[k + 2] = (m >>> 8) & 0xff;
87310 res[k + 3] = m & 0xff;
87311 } else {
87312 res[k + 3] = m >>> 24;
87313 res[k + 2] = (m >>> 16) & 0xff;
87314 res[k + 1] = (m >>> 8) & 0xff;
87315 res[k] = m & 0xff;
87316 }
87317 }
87318 return res;
87319 }
87320 utils.split32 = split32;
87321
87322 function rotr32(w, b) {
87323 return (w >>> b) | (w << (32 - b));
87324 }
87325 utils.rotr32 = rotr32;
87326
87327 function rotl32(w, b) {
87328 return (w << b) | (w >>> (32 - b));
87329 }
87330 utils.rotl32 = rotl32;
87331
87332 function sum32(a, b) {
87333 return (a + b) >>> 0;
87334 }
87335 utils.sum32 = sum32;
87336
87337 function sum32_3(a, b, c) {
87338 return (a + b + c) >>> 0;
87339 }
87340 utils.sum32_3 = sum32_3;
87341
87342 function sum32_4(a, b, c, d) {
87343 return (a + b + c + d) >>> 0;
87344 }
87345 utils.sum32_4 = sum32_4;
87346
87347 function sum32_5(a, b, c, d, e) {
87348 return (a + b + c + d + e) >>> 0;
87349 }
87350 utils.sum32_5 = sum32_5;
87351
87352 function assert(cond, msg) {
87353 if (!cond)
87354 throw new Error(msg || 'Assertion failed');
87355 }
87356 utils.assert = assert;
87357
87358 utils.inherits = inherits;
87359
87360 function sum64(buf, pos, ah, al) {
87361 var bh = buf[pos];
87362 var bl = buf[pos + 1];
87363
87364 var lo = (al + bl) >>> 0;
87365 var hi = (lo < al ? 1 : 0) + ah + bh;
87366 buf[pos] = hi >>> 0;
87367 buf[pos + 1] = lo;
87368 }
87369 exports.sum64 = sum64;
87370
87371 function sum64_hi(ah, al, bh, bl) {
87372 var lo = (al + bl) >>> 0;
87373 var hi = (lo < al ? 1 : 0) + ah + bh;
87374 return hi >>> 0;
87375 };
87376 exports.sum64_hi = sum64_hi;
87377
87378 function sum64_lo(ah, al, bh, bl) {
87379 var lo = al + bl;
87380 return lo >>> 0;
87381 };
87382 exports.sum64_lo = sum64_lo;
87383
87384 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
87385 var carry = 0;
87386 var lo = al;
87387 lo = (lo + bl) >>> 0;
87388 carry += lo < al ? 1 : 0;
87389 lo = (lo + cl) >>> 0;
87390 carry += lo < cl ? 1 : 0;
87391 lo = (lo + dl) >>> 0;
87392 carry += lo < dl ? 1 : 0;
87393
87394 var hi = ah + bh + ch + dh + carry;
87395 return hi >>> 0;
87396 };
87397 exports.sum64_4_hi = sum64_4_hi;
87398
87399 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
87400 var lo = al + bl + cl + dl;
87401 return lo >>> 0;
87402 };
87403 exports.sum64_4_lo = sum64_4_lo;
87404
87405 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
87406 var carry = 0;
87407 var lo = al;
87408 lo = (lo + bl) >>> 0;
87409 carry += lo < al ? 1 : 0;
87410 lo = (lo + cl) >>> 0;
87411 carry += lo < cl ? 1 : 0;
87412 lo = (lo + dl) >>> 0;
87413 carry += lo < dl ? 1 : 0;
87414 lo = (lo + el) >>> 0;
87415 carry += lo < el ? 1 : 0;
87416
87417 var hi = ah + bh + ch + dh + eh + carry;
87418 return hi >>> 0;
87419 };
87420 exports.sum64_5_hi = sum64_5_hi;
87421
87422 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
87423 var lo = al + bl + cl + dl + el;
87424
87425 return lo >>> 0;
87426 };
87427 exports.sum64_5_lo = sum64_5_lo;
87428
87429 function rotr64_hi(ah, al, num) {
87430 var r = (al << (32 - num)) | (ah >>> num);
87431 return r >>> 0;
87432 };
87433 exports.rotr64_hi = rotr64_hi;
87434
87435 function rotr64_lo(ah, al, num) {
87436 var r = (ah << (32 - num)) | (al >>> num);
87437 return r >>> 0;
87438 };
87439 exports.rotr64_lo = rotr64_lo;
87440
87441 function shr64_hi(ah, al, num) {
87442 return ah >>> num;
87443 };
87444 exports.shr64_hi = shr64_hi;
87445
87446 function shr64_lo(ah, al, num) {
87447 var r = (ah << (32 - num)) | (al >>> num);
87448 return r >>> 0;
87449 };
87450 exports.shr64_lo = shr64_lo;
87451
87452 },{"inherits":63}],63:[function(require,module,exports){
87453 arguments[4][9][0].apply(exports,arguments)
87454 },{"dup":9}],64:[function(require,module,exports){
87455 /**
87456 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
87457 * @param {String} str the string input value
87458 * @return {Boolean} a boolean if it is or is not hex prefixed
87459 * @throws if the str input is not a string
87460 */
87461 module.exports = function isHexPrefixed(str) {
87462 if (typeof str !== 'string') {
87463 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
87464 }
87465
87466 return str.slice(0, 2) === '0x';
87467 }
87468
87469 },{}],65:[function(require,module,exports){
87470 'use strict'
87471 module.exports = require('./lib/api')(require('./lib/keccak'))
87472
87473 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
87474 'use strict'
87475 var createKeccak = require('./keccak')
87476 var createShake = require('./shake')
87477
87478 module.exports = function (KeccakState) {
87479 var Keccak = createKeccak(KeccakState)
87480 var Shake = createShake(KeccakState)
87481
87482 return function (algorithm, options) {
87483 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
87484 switch (hash) {
87485 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
87486 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
87487 case 'keccak384': return new Keccak(832, 768, null, 384, options)
87488 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
87489
87490 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
87491 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
87492 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
87493 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
87494
87495 case 'shake128': return new Shake(1344, 256, 0x1f, options)
87496 case 'shake256': return new Shake(1088, 512, 0x1f, options)
87497
87498 default: throw new Error('Invald algorithm: ' + algorithm)
87499 }
87500 }
87501 }
87502
87503 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
87504 (function (Buffer){
87505 'use strict'
87506 var Transform = require('stream').Transform
87507 var inherits = require('inherits')
87508
87509 module.exports = function (KeccakState) {
87510 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
87511 Transform.call(this, options)
87512
87513 this._rate = rate
87514 this._capacity = capacity
87515 this._delimitedSuffix = delimitedSuffix
87516 this._hashBitLength = hashBitLength
87517 this._options = options
87518
87519 this._state = new KeccakState()
87520 this._state.initialize(rate, capacity)
87521 this._finalized = false
87522 }
87523
87524 inherits(Keccak, Transform)
87525
87526 Keccak.prototype._transform = function (chunk, encoding, callback) {
87527 var error = null
87528 try {
87529 this.update(chunk, encoding)
87530 } catch (err) {
87531 error = err
87532 }
87533
87534 callback(error)
87535 }
87536
87537 Keccak.prototype._flush = function (callback) {
87538 var error = null
87539 try {
87540 this.push(this.digest())
87541 } catch (err) {
87542 error = err
87543 }
87544
87545 callback(error)
87546 }
87547
87548 Keccak.prototype.update = function (data, encoding) {
87549 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
87550 if (this._finalized) throw new Error('Digest already called')
87551 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
87552
87553 this._state.absorb(data)
87554
87555 return this
87556 }
87557
87558 Keccak.prototype.digest = function (encoding) {
87559 if (this._finalized) throw new Error('Digest already called')
87560 this._finalized = true
87561
87562 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
87563 var digest = this._state.squeeze(this._hashBitLength / 8)
87564 if (encoding !== undefined) digest = digest.toString(encoding)
87565
87566 this._resetState()
87567
87568 return digest
87569 }
87570
87571 // remove result from memory
87572 Keccak.prototype._resetState = function () {
87573 this._state.initialize(this._rate, this._capacity)
87574 return this
87575 }
87576
87577 // because sometimes we need hash right now and little later
87578 Keccak.prototype._clone = function () {
87579 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
87580 this._state.copy(clone._state)
87581 clone._finalized = this._finalized
87582
87583 return clone
87584 }
87585
87586 return Keccak
87587 }
87588
87589 }).call(this,require("buffer").Buffer)
87590 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
87591 (function (Buffer){
87592 'use strict'
87593 var Transform = require('stream').Transform
87594 var inherits = require('inherits')
87595
87596 module.exports = function (KeccakState) {
87597 function Shake (rate, capacity, delimitedSuffix, options) {
87598 Transform.call(this, options)
87599
87600 this._rate = rate
87601 this._capacity = capacity
87602 this._delimitedSuffix = delimitedSuffix
87603 this._options = options
87604
87605 this._state = new KeccakState()
87606 this._state.initialize(rate, capacity)
87607 this._finalized = false
87608 }
87609
87610 inherits(Shake, Transform)
87611
87612 Shake.prototype._transform = function (chunk, encoding, callback) {
87613 var error = null
87614 try {
87615 this.update(chunk, encoding)
87616 } catch (err) {
87617 error = err
87618 }
87619
87620 callback(error)
87621 }
87622
87623 Shake.prototype._flush = function () {}
87624
87625 Shake.prototype._read = function (size) {
87626 this.push(this.squeeze(size))
87627 }
87628
87629 Shake.prototype.update = function (data, encoding) {
87630 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
87631 if (this._finalized) throw new Error('Squeeze already called')
87632 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
87633
87634 this._state.absorb(data)
87635
87636 return this
87637 }
87638
87639 Shake.prototype.squeeze = function (dataByteLength, encoding) {
87640 if (!this._finalized) {
87641 this._finalized = true
87642 this._state.absorbLastFewBits(this._delimitedSuffix)
87643 }
87644
87645 var data = this._state.squeeze(dataByteLength)
87646 if (encoding !== undefined) data = data.toString(encoding)
87647
87648 return data
87649 }
87650
87651 Shake.prototype._resetState = function () {
87652 this._state.initialize(this._rate, this._capacity)
87653 return this
87654 }
87655
87656 Shake.prototype._clone = function () {
87657 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
87658 this._state.copy(clone._state)
87659 clone._finalized = this._finalized
87660
87661 return clone
87662 }
87663
87664 return Shake
87665 }
87666
87667 }).call(this,require("buffer").Buffer)
87668 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
87669 'use strict'
87670 var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
87671
87672 exports.p1600 = function (s) {
87673 for (var round = 0; round < 24; ++round) {
87674 // theta
87675 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
87676 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
87677 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
87678 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
87679 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
87680 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
87681 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
87682 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
87683 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
87684 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
87685
87686 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
87687 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
87688 var t1slo0 = s[0] ^ lo
87689 var t1shi0 = s[1] ^ hi
87690 var t1slo5 = s[10] ^ lo
87691 var t1shi5 = s[11] ^ hi
87692 var t1slo10 = s[20] ^ lo
87693 var t1shi10 = s[21] ^ hi
87694 var t1slo15 = s[30] ^ lo
87695 var t1shi15 = s[31] ^ hi
87696 var t1slo20 = s[40] ^ lo
87697 var t1shi20 = s[41] ^ hi
87698 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
87699 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
87700 var t1slo1 = s[2] ^ lo
87701 var t1shi1 = s[3] ^ hi
87702 var t1slo6 = s[12] ^ lo
87703 var t1shi6 = s[13] ^ hi
87704 var t1slo11 = s[22] ^ lo
87705 var t1shi11 = s[23] ^ hi
87706 var t1slo16 = s[32] ^ lo
87707 var t1shi16 = s[33] ^ hi
87708 var t1slo21 = s[42] ^ lo
87709 var t1shi21 = s[43] ^ hi
87710 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
87711 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
87712 var t1slo2 = s[4] ^ lo
87713 var t1shi2 = s[5] ^ hi
87714 var t1slo7 = s[14] ^ lo
87715 var t1shi7 = s[15] ^ hi
87716 var t1slo12 = s[24] ^ lo
87717 var t1shi12 = s[25] ^ hi
87718 var t1slo17 = s[34] ^ lo
87719 var t1shi17 = s[35] ^ hi
87720 var t1slo22 = s[44] ^ lo
87721 var t1shi22 = s[45] ^ hi
87722 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
87723 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
87724 var t1slo3 = s[6] ^ lo
87725 var t1shi3 = s[7] ^ hi
87726 var t1slo8 = s[16] ^ lo
87727 var t1shi8 = s[17] ^ hi
87728 var t1slo13 = s[26] ^ lo
87729 var t1shi13 = s[27] ^ hi
87730 var t1slo18 = s[36] ^ lo
87731 var t1shi18 = s[37] ^ hi
87732 var t1slo23 = s[46] ^ lo
87733 var t1shi23 = s[47] ^ hi
87734 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
87735 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
87736 var t1slo4 = s[8] ^ lo
87737 var t1shi4 = s[9] ^ hi
87738 var t1slo9 = s[18] ^ lo
87739 var t1shi9 = s[19] ^ hi
87740 var t1slo14 = s[28] ^ lo
87741 var t1shi14 = s[29] ^ hi
87742 var t1slo19 = s[38] ^ lo
87743 var t1shi19 = s[39] ^ hi
87744 var t1slo24 = s[48] ^ lo
87745 var t1shi24 = s[49] ^ hi
87746
87747 // rho & pi
87748 var t2slo0 = t1slo0
87749 var t2shi0 = t1shi0
87750 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
87751 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
87752 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
87753 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
87754 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
87755 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
87756 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
87757 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
87758 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
87759 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
87760 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
87761 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
87762 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
87763 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
87764 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
87765 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
87766 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
87767 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
87768 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
87769 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
87770 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
87771 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
87772 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
87773 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
87774 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
87775 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
87776 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
87777 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
87778 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
87779 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
87780 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
87781 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
87782 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
87783 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
87784 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
87785 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
87786 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
87787 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
87788 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
87789 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
87790 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
87791 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
87792 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
87793 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
87794 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
87795 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
87796 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
87797 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
87798
87799 // chi
87800 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
87801 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
87802 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
87803 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
87804 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
87805 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
87806 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
87807 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
87808 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
87809 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
87810 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
87811 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
87812 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
87813 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
87814 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
87815 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
87816 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
87817 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
87818 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
87819 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
87820 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
87821 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
87822 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
87823 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
87824 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
87825 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
87826 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
87827 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
87828 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
87829 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
87830 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
87831 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
87832 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
87833 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
87834 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
87835 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
87836 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
87837 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
87838 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
87839 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
87840 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
87841 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
87842 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
87843 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
87844 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
87845 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
87846 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
87847 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
87848 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
87849 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
87850
87851 // iota
87852 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
87853 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
87854 }
87855 }
87856
87857 },{}],70:[function(require,module,exports){
87858 (function (Buffer){
87859 'use strict'
87860 var keccakState = require('./keccak-state-unroll')
87861
87862 function Keccak () {
87863 // much faster than `new Array(50)`
87864 this.state = [
87865 0, 0, 0, 0, 0,
87866 0, 0, 0, 0, 0,
87867 0, 0, 0, 0, 0,
87868 0, 0, 0, 0, 0,
87869 0, 0, 0, 0, 0
87870 ]
87871
87872 this.blockSize = null
87873 this.count = 0
87874 this.squeezing = false
87875 }
87876
87877 Keccak.prototype.initialize = function (rate, capacity) {
87878 for (var i = 0; i < 50; ++i) this.state[i] = 0
87879 this.blockSize = rate / 8
87880 this.count = 0
87881 this.squeezing = false
87882 }
87883
87884 Keccak.prototype.absorb = function (data) {
87885 for (var i = 0; i < data.length; ++i) {
87886 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
87887 this.count += 1
87888 if (this.count === this.blockSize) {
87889 keccakState.p1600(this.state)
87890 this.count = 0
87891 }
87892 }
87893 }
87894
87895 Keccak.prototype.absorbLastFewBits = function (bits) {
87896 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
87897 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
87898 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
87899 keccakState.p1600(this.state)
87900 this.count = 0
87901 this.squeezing = true
87902 }
87903
87904 Keccak.prototype.squeeze = function (length) {
87905 if (!this.squeezing) this.absorbLastFewBits(0x01)
87906
87907 var output = Buffer.allocUnsafe(length)
87908 for (var i = 0; i < length; ++i) {
87909 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
87910 this.count += 1
87911 if (this.count === this.blockSize) {
87912 keccakState.p1600(this.state)
87913 this.count = 0
87914 }
87915 }
87916
87917 return output
87918 }
87919
87920 Keccak.prototype.copy = function (dest) {
87921 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
87922 dest.blockSize = this.blockSize
87923 dest.count = this.count
87924 dest.squeezing = this.squeezing
87925 }
87926
87927 module.exports = Keccak
87928
87929 }).call(this,require("buffer").Buffer)
87930 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
87931 (function (Buffer){
87932 /*
87933 CryptoJS v3.1.2
87934 code.google.com/p/crypto-js
87935 (c) 2009-2013 by Jeff Mott. All rights reserved.
87936 code.google.com/p/crypto-js/wiki/License
87937 */
87938 /** @preserve
87939 (c) 2012 by Cédric Mesnil. All rights reserved.
87940
87941 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
87942
87943 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
87944 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
87945
87946 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
87947 */
87948
87949 // constants table
87950 var zl = [
87951 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
87952 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
87953 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
87954 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
87955 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
87956 ]
87957
87958 var zr = [
87959 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
87960 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
87961 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
87962 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
87963 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
87964 ]
87965
87966 var sl = [
87967 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
87968 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
87969 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
87970 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
87971 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
87972 ]
87973
87974 var sr = [
87975 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
87976 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
87977 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
87978 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
87979 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
87980 ]
87981
87982 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
87983 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
87984
87985 function bytesToWords (bytes) {
87986 var words = []
87987 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
87988 words[b >>> 5] |= bytes[i] << (24 - b % 32)
87989 }
87990 return words
87991 }
87992
87993 function wordsToBytes (words) {
87994 var bytes = []
87995 for (var b = 0; b < words.length * 32; b += 8) {
87996 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
87997 }
87998 return bytes
87999 }
88000
88001 function processBlock (H, M, offset) {
88002 // swap endian
88003 for (var i = 0; i < 16; i++) {
88004 var offset_i = offset + i
88005 var M_offset_i = M[offset_i]
88006
88007 // Swap
88008 M[offset_i] = (
88009 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
88010 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
88011 )
88012 }
88013
88014 // Working variables
88015 var al, bl, cl, dl, el
88016 var ar, br, cr, dr, er
88017
88018 ar = al = H[0]
88019 br = bl = H[1]
88020 cr = cl = H[2]
88021 dr = dl = H[3]
88022 er = el = H[4]
88023
88024 // computation
88025 var t
88026 for (i = 0; i < 80; i += 1) {
88027 t = (al + M[offset + zl[i]]) | 0
88028 if (i < 16) {
88029 t += f1(bl, cl, dl) + hl[0]
88030 } else if (i < 32) {
88031 t += f2(bl, cl, dl) + hl[1]
88032 } else if (i < 48) {
88033 t += f3(bl, cl, dl) + hl[2]
88034 } else if (i < 64) {
88035 t += f4(bl, cl, dl) + hl[3]
88036 } else {// if (i<80) {
88037 t += f5(bl, cl, dl) + hl[4]
88038 }
88039 t = t | 0
88040 t = rotl(t, sl[i])
88041 t = (t + el) | 0
88042 al = el
88043 el = dl
88044 dl = rotl(cl, 10)
88045 cl = bl
88046 bl = t
88047
88048 t = (ar + M[offset + zr[i]]) | 0
88049 if (i < 16) {
88050 t += f5(br, cr, dr) + hr[0]
88051 } else if (i < 32) {
88052 t += f4(br, cr, dr) + hr[1]
88053 } else if (i < 48) {
88054 t += f3(br, cr, dr) + hr[2]
88055 } else if (i < 64) {
88056 t += f2(br, cr, dr) + hr[3]
88057 } else {// if (i<80) {
88058 t += f1(br, cr, dr) + hr[4]
88059 }
88060
88061 t = t | 0
88062 t = rotl(t, sr[i])
88063 t = (t + er) | 0
88064 ar = er
88065 er = dr
88066 dr = rotl(cr, 10)
88067 cr = br
88068 br = t
88069 }
88070
88071 // intermediate hash value
88072 t = (H[1] + cl + dr) | 0
88073 H[1] = (H[2] + dl + er) | 0
88074 H[2] = (H[3] + el + ar) | 0
88075 H[3] = (H[4] + al + br) | 0
88076 H[4] = (H[0] + bl + cr) | 0
88077 H[0] = t
88078 }
88079
88080 function f1 (x, y, z) {
88081 return ((x) ^ (y) ^ (z))
88082 }
88083
88084 function f2 (x, y, z) {
88085 return (((x) & (y)) | ((~x) & (z)))
88086 }
88087
88088 function f3 (x, y, z) {
88089 return (((x) | (~(y))) ^ (z))
88090 }
88091
88092 function f4 (x, y, z) {
88093 return (((x) & (z)) | ((y) & (~(z))))
88094 }
88095
88096 function f5 (x, y, z) {
88097 return ((x) ^ ((y) | (~(z))))
88098 }
88099
88100 function rotl (x, n) {
88101 return (x << n) | (x >>> (32 - n))
88102 }
88103
88104 function ripemd160 (message) {
88105 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
88106
88107 if (typeof message === 'string') {
88108 message = new Buffer(message, 'utf8')
88109 }
88110
88111 var m = bytesToWords(message)
88112
88113 var nBitsLeft = message.length * 8
88114 var nBitsTotal = message.length * 8
88115
88116 // Add padding
88117 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
88118 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
88119 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
88120 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
88121 )
88122
88123 for (var i = 0; i < m.length; i += 16) {
88124 processBlock(H, m, i)
88125 }
88126
88127 // swap endian
88128 for (i = 0; i < 5; i++) {
88129 // shortcut
88130 var H_i = H[i]
88131
88132 // Swap
88133 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
88134 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
88135 }
88136
88137 var digestbytes = wordsToBytes(H)
88138 return new Buffer(digestbytes)
88139 }
88140
88141 module.exports = ripemd160
88142
88143 }).call(this,require("buffer").Buffer)
88144 },{"buffer":5}],72:[function(require,module,exports){
88145 (function (Buffer){
88146 const assert = require('assert')
88147 /**
88148 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
88149 * This function takes in a data, convert it to buffer if not, and a length for recursion
88150 *
88151 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
88152 * @returns {Buffer} - returns buffer of encoded data
88153 **/
88154 exports.encode = function (input) {
88155 if (input instanceof Array) {
88156 var output = []
88157 for (var i = 0; i < input.length; i++) {
88158 output.push(exports.encode(input[i]))
88159 }
88160 var buf = Buffer.concat(output)
88161 return Buffer.concat([encodeLength(buf.length, 192), buf])
88162 } else {
88163 input = toBuffer(input)
88164 if (input.length === 1 && input[0] < 128) {
88165 return input
88166 } else {
88167 return Buffer.concat([encodeLength(input.length, 128), input])
88168 }
88169 }
88170 }
88171
88172 function safeParseInt (v, base) {
88173 if (v.slice(0, 2) === '00') {
88174 throw (new Error('invalid RLP: extra zeros'))
88175 }
88176
88177 return parseInt(v, base)
88178 }
88179
88180 function encodeLength (len, offset) {
88181 if (len < 56) {
88182 return new Buffer([len + offset])
88183 } else {
88184 var hexLength = intToHex(len)
88185 var lLength = hexLength.length / 2
88186 var firstByte = intToHex(offset + 55 + lLength)
88187 return new Buffer(firstByte + hexLength, 'hex')
88188 }
88189 }
88190
88191 /**
88192 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
88193 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
88194 * @returns {Array} - returns decode Array of Buffers containg the original message
88195 **/
88196 exports.decode = function (input, stream) {
88197 if (!input || input.length === 0) {
88198 return new Buffer([])
88199 }
88200
88201 input = toBuffer(input)
88202 var decoded = _decode(input)
88203
88204 if (stream) {
88205 return decoded
88206 }
88207
88208 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
88209 return decoded.data
88210 }
88211
88212 exports.getLength = function (input) {
88213 if (!input || input.length === 0) {
88214 return new Buffer([])
88215 }
88216
88217 input = toBuffer(input)
88218 var firstByte = input[0]
88219 if (firstByte <= 0x7f) {
88220 return input.length
88221 } else if (firstByte <= 0xb7) {
88222 return firstByte - 0x7f
88223 } else if (firstByte <= 0xbf) {
88224 return firstByte - 0xb6
88225 } else if (firstByte <= 0xf7) {
88226 // a list between 0-55 bytes long
88227 return firstByte - 0xbf
88228 } else {
88229 // a list over 55 bytes long
88230 var llength = firstByte - 0xf6
88231 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
88232 return llength + length
88233 }
88234 }
88235
88236 function _decode (input) {
88237 var length, llength, data, innerRemainder, d
88238 var decoded = []
88239 var firstByte = input[0]
88240
88241 if (firstByte <= 0x7f) {
88242 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
88243 return {
88244 data: input.slice(0, 1),
88245 remainder: input.slice(1)
88246 }
88247 } else if (firstByte <= 0xb7) {
88248 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
88249 // The range of the first byte is [0x80, 0xb7]
88250 length = firstByte - 0x7f
88251
88252 // set 0x80 null to 0
88253 if (firstByte === 0x80) {
88254 data = new Buffer([])
88255 } else {
88256 data = input.slice(1, length)
88257 }
88258
88259 if (length === 2 && data[0] < 0x80) {
88260 throw new Error('invalid rlp encoding: byte must be less 0x80')
88261 }
88262
88263 return {
88264 data: data,
88265 remainder: input.slice(length)
88266 }
88267 } else if (firstByte <= 0xbf) {
88268 llength = firstByte - 0xb6
88269 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
88270 data = input.slice(llength, length + llength)
88271 if (data.length < length) {
88272 throw (new Error('invalid RLP'))
88273 }
88274
88275 return {
88276 data: data,
88277 remainder: input.slice(length + llength)
88278 }
88279 } else if (firstByte <= 0xf7) {
88280 // a list between 0-55 bytes long
88281 length = firstByte - 0xbf
88282 innerRemainder = input.slice(1, length)
88283 while (innerRemainder.length) {
88284 d = _decode(innerRemainder)
88285 decoded.push(d.data)
88286 innerRemainder = d.remainder
88287 }
88288
88289 return {
88290 data: decoded,
88291 remainder: input.slice(length)
88292 }
88293 } else {
88294 // a list over 55 bytes long
88295 llength = firstByte - 0xf6
88296 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
88297 var totalLength = llength + length
88298 if (totalLength > input.length) {
88299 throw new Error('invalid rlp: total length is larger than the data')
88300 }
88301
88302 innerRemainder = input.slice(llength, totalLength)
88303 if (innerRemainder.length === 0) {
88304 throw new Error('invalid rlp, List has a invalid length')
88305 }
88306
88307 while (innerRemainder.length) {
88308 d = _decode(innerRemainder)
88309 decoded.push(d.data)
88310 innerRemainder = d.remainder
88311 }
88312 return {
88313 data: decoded,
88314 remainder: input.slice(totalLength)
88315 }
88316 }
88317 }
88318
88319 function isHexPrefixed (str) {
88320 return str.slice(0, 2) === '0x'
88321 }
88322
88323 // Removes 0x from a given String
88324 function stripHexPrefix (str) {
88325 if (typeof str !== 'string') {
88326 return str
88327 }
88328 return isHexPrefixed(str) ? str.slice(2) : str
88329 }
88330
88331 function intToHex (i) {
88332 var hex = i.toString(16)
88333 if (hex.length % 2) {
88334 hex = '0' + hex
88335 }
88336
88337 return hex
88338 }
88339
88340 function padToEven (a) {
88341 if (a.length % 2) a = '0' + a
88342 return a
88343 }
88344
88345 function intToBuffer (i) {
88346 var hex = intToHex(i)
88347 return new Buffer(hex, 'hex')
88348 }
88349
88350 function toBuffer (v) {
88351 if (!Buffer.isBuffer(v)) {
88352 if (typeof v === 'string') {
88353 if (isHexPrefixed(v)) {
88354 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
88355 } else {
88356 v = new Buffer(v)
88357 }
88358 } else if (typeof v === 'number') {
88359 if (!v) {
88360 v = new Buffer([])
88361 } else {
88362 v = intToBuffer(v)
88363 }
88364 } else if (v === null || v === undefined) {
88365 v = new Buffer([])
88366 } else if (v.toArray) {
88367 // converts a BN to a Buffer
88368 v = new Buffer(v.toArray())
88369 } else {
88370 throw new Error('invalid type')
88371 }
88372 }
88373 return v
88374 }
88375
88376 }).call(this,require("buffer").Buffer)
88377 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
88378 'use strict'
88379 module.exports = require('./lib')(require('./lib/elliptic'))
88380
88381 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
88382 (function (Buffer){
88383 'use strict'
88384 var toString = Object.prototype.toString
88385
88386 // TypeError
88387 exports.isArray = function (value, message) {
88388 if (!Array.isArray(value)) throw TypeError(message)
88389 }
88390
88391 exports.isBoolean = function (value, message) {
88392 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
88393 }
88394
88395 exports.isBuffer = function (value, message) {
88396 if (!Buffer.isBuffer(value)) throw TypeError(message)
88397 }
88398
88399 exports.isFunction = function (value, message) {
88400 if (toString.call(value) !== '[object Function]') throw TypeError(message)
88401 }
88402
88403 exports.isNumber = function (value, message) {
88404 if (toString.call(value) !== '[object Number]') throw TypeError(message)
88405 }
88406
88407 exports.isObject = function (value, message) {
88408 if (toString.call(value) !== '[object Object]') throw TypeError(message)
88409 }
88410
88411 // RangeError
88412 exports.isBufferLength = function (buffer, length, message) {
88413 if (buffer.length !== length) throw RangeError(message)
88414 }
88415
88416 exports.isBufferLength2 = function (buffer, length1, length2, message) {
88417 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
88418 }
88419
88420 exports.isLengthGTZero = function (value, message) {
88421 if (value.length === 0) throw RangeError(message)
88422 }
88423
88424 exports.isNumberInInterval = function (number, x, y, message) {
88425 if (number <= x || number >= y) throw RangeError(message)
88426 }
88427
88428 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
88429 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
88430 (function (Buffer){
88431 'use strict'
88432 var bip66 = require('bip66')
88433
88434 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
88435 // begin
88436 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
88437 // private key
88438 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88439 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88440 // middle
88441 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
88442 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88443 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88444 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
88445 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
88446 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
88447 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88448 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
88449 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
88450 // public key
88451 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88452 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88453 0x00
88454 ])
88455
88456 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
88457 // begin
88458 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
88459 // private key
88460 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88461 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88462 // middle
88463 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
88464 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88465 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88466 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
88467 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
88468 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
88469 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
88470 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
88471 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88472 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
88473 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
88474 // public key
88475 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88477 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88478 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88479 0x00
88480 ])
88481
88482 var ZERO_BUFFER_32 = new Buffer([
88483 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88484 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
88485 ])
88486
88487 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
88488 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
88489 privateKey.copy(result, compressed ? 8 : 9)
88490 publicKey.copy(result, compressed ? 181 : 214)
88491 return result
88492 }
88493
88494 exports.privateKeyImport = function (privateKey) {
88495 var length = privateKey.length
88496
88497 // sequence header
88498 var index = 0
88499 if (length < index + 1 || privateKey[index] !== 0x30) return
88500 index += 1
88501
88502 // sequence length constructor
88503 if (length < index + 1 || !(privateKey[index] & 0x80)) return
88504
88505 var lenb = privateKey[index] & 0x7f
88506 index += 1
88507 if (lenb < 1 || lenb > 2) return
88508 if (length < index + lenb) return
88509
88510 // sequence length
88511 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
88512 index += lenb
88513 if (length < index + len) return
88514
88515 // sequence element 0: version number (=1)
88516 if (length < index + 3 ||
88517 privateKey[index] !== 0x02 ||
88518 privateKey[index + 1] !== 0x01 ||
88519 privateKey[index + 2] !== 0x01) {
88520 return
88521 }
88522 index += 3
88523
88524 // sequence element 1: octet string, up to 32 bytes
88525 if (length < index + 2 ||
88526 privateKey[index] !== 0x04 ||
88527 privateKey[index + 1] > 0x20 ||
88528 length < index + 2 + privateKey[index + 1]) {
88529 return
88530 }
88531
88532 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
88533 }
88534
88535 exports.signatureExport = function (sigObj) {
88536 var r = Buffer.concat([new Buffer([0]), sigObj.r])
88537 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
88538
88539 var s = Buffer.concat([new Buffer([0]), sigObj.s])
88540 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
88541
88542 return bip66.encode(r.slice(posR), s.slice(posS))
88543 }
88544
88545 exports.signatureImport = function (sig) {
88546 var r = new Buffer(ZERO_BUFFER_32)
88547 var s = new Buffer(ZERO_BUFFER_32)
88548
88549 try {
88550 var sigObj = bip66.decode(sig)
88551 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
88552 if (sigObj.r.length > 32) throw new Error('R length is too long')
88553 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
88554 if (sigObj.s.length > 32) throw new Error('S length is too long')
88555 } catch (err) {
88556 return
88557 }
88558
88559 sigObj.r.copy(r, 32 - sigObj.r.length)
88560 sigObj.s.copy(s, 32 - sigObj.s.length)
88561
88562 return { r: r, s: s }
88563 }
88564
88565 exports.signatureImportLax = function (sig) {
88566 var r = new Buffer(ZERO_BUFFER_32)
88567 var s = new Buffer(ZERO_BUFFER_32)
88568
88569 var length = sig.length
88570 var index = 0
88571
88572 // sequence tag byte
88573 if (sig[index++] !== 0x30) return
88574
88575 // sequence length byte
88576 var lenbyte = sig[index++]
88577 if (lenbyte & 0x80) {
88578 index += lenbyte - 0x80
88579 if (index > length) return
88580 }
88581
88582 // sequence tag byte for r
88583 if (sig[index++] !== 0x02) return
88584
88585 // length for r
88586 var rlen = sig[index++]
88587 if (rlen & 0x80) {
88588 lenbyte = rlen - 0x80
88589 if (index + lenbyte > length) return
88590 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
88591 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
88592 }
88593 if (rlen > length - index) return
88594 var rindex = index
88595 index += rlen
88596
88597 // sequence tag byte for s
88598 if (sig[index++] !== 0x02) return
88599
88600 // length for s
88601 var slen = sig[index++]
88602 if (slen & 0x80) {
88603 lenbyte = slen - 0x80
88604 if (index + lenbyte > length) return
88605 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
88606 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
88607 }
88608 if (slen > length - index) return
88609 var sindex = index
88610 index += slen
88611
88612 // ignore leading zeros in r
88613 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
88614 // copy r value
88615 if (rlen > 32) return
88616 var rvalue = sig.slice(rindex, rindex + rlen)
88617 rvalue.copy(r, 32 - rvalue.length)
88618
88619 // ignore leading zeros in s
88620 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
88621 // copy s value
88622 if (slen > 32) return
88623 var svalue = sig.slice(sindex, sindex + slen)
88624 svalue.copy(s, 32 - svalue.length)
88625
88626 return { r: r, s: s }
88627 }
88628
88629 }).call(this,require("buffer").Buffer)
88630 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
88631 (function (Buffer){
88632 'use strict'
88633 var createHash = require('create-hash')
88634 var BN = require('bn.js')
88635 var EC = require('elliptic').ec
88636
88637 var messages = require('../messages.json')
88638
88639 var ec = new EC('secp256k1')
88640 var ecparams = ec.curve
88641
88642 function loadCompressedPublicKey (first, xBuffer) {
88643 var x = new BN(xBuffer)
88644
88645 // overflow
88646 if (x.cmp(ecparams.p) >= 0) return null
88647 x = x.toRed(ecparams.red)
88648
88649 // compute corresponding Y
88650 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
88651 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
88652
88653 return ec.keyPair({ pub: { x: x, y: y } })
88654 }
88655
88656 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
88657 var x = new BN(xBuffer)
88658 var y = new BN(yBuffer)
88659
88660 // overflow
88661 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
88662
88663 x = x.toRed(ecparams.red)
88664 y = y.toRed(ecparams.red)
88665
88666 // is odd flag
88667 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
88668
88669 // x*x*x + b = y*y
88670 var x3 = x.redSqr().redIMul(x)
88671 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
88672
88673 return ec.keyPair({ pub: { x: x, y: y } })
88674 }
88675
88676 function loadPublicKey (publicKey) {
88677 var first = publicKey[0]
88678 switch (first) {
88679 case 0x02:
88680 case 0x03:
88681 if (publicKey.length !== 33) return null
88682 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
88683 case 0x04:
88684 case 0x06:
88685 case 0x07:
88686 if (publicKey.length !== 65) return null
88687 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
88688 default:
88689 return null
88690 }
88691 }
88692
88693 exports.privateKeyVerify = function (privateKey) {
88694 var bn = new BN(privateKey)
88695 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
88696 }
88697
88698 exports.privateKeyExport = function (privateKey, compressed) {
88699 var d = new BN(privateKey)
88700 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
88701
88702 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
88703 }
88704
88705 exports.privateKeyTweakAdd = function (privateKey, tweak) {
88706 var bn = new BN(tweak)
88707 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
88708
88709 bn.iadd(new BN(privateKey))
88710 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
88711 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
88712
88713 return bn.toArrayLike(Buffer, 'be', 32)
88714 }
88715
88716 exports.privateKeyTweakMul = function (privateKey, tweak) {
88717 var bn = new BN(tweak)
88718 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
88719
88720 bn.imul(new BN(privateKey))
88721 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
88722
88723 return bn.toArrayLike(Buffer, 'be', 32)
88724 }
88725
88726 exports.publicKeyCreate = function (privateKey, compressed) {
88727 var d = new BN(privateKey)
88728 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
88729
88730 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
88731 }
88732
88733 exports.publicKeyConvert = function (publicKey, compressed) {
88734 var pair = loadPublicKey(publicKey)
88735 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88736
88737 return new Buffer(pair.getPublic(compressed, true))
88738 }
88739
88740 exports.publicKeyVerify = function (publicKey) {
88741 return loadPublicKey(publicKey) !== null
88742 }
88743
88744 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
88745 var pair = loadPublicKey(publicKey)
88746 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88747
88748 tweak = new BN(tweak)
88749 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
88750
88751 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
88752 }
88753
88754 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
88755 var pair = loadPublicKey(publicKey)
88756 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88757
88758 tweak = new BN(tweak)
88759 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
88760
88761 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
88762 }
88763
88764 exports.publicKeyCombine = function (publicKeys, compressed) {
88765 var pairs = new Array(publicKeys.length)
88766 for (var i = 0; i < publicKeys.length; ++i) {
88767 pairs[i] = loadPublicKey(publicKeys[i])
88768 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88769 }
88770
88771 var point = pairs[0].pub
88772 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
88773 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
88774
88775 return new Buffer(point.encode(true, compressed))
88776 }
88777
88778 exports.signatureNormalize = function (signature) {
88779 var r = new BN(signature.slice(0, 32))
88780 var s = new BN(signature.slice(32, 64))
88781 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88782
88783 var result = new Buffer(signature)
88784 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
88785
88786 return result
88787 }
88788
88789 exports.signatureExport = function (signature) {
88790 var r = signature.slice(0, 32)
88791 var s = signature.slice(32, 64)
88792 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88793
88794 return { r: r, s: s }
88795 }
88796
88797 exports.signatureImport = function (sigObj) {
88798 var r = new BN(sigObj.r)
88799 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
88800
88801 var s = new BN(sigObj.s)
88802 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
88803
88804 return Buffer.concat([
88805 r.toArrayLike(Buffer, 'be', 32),
88806 s.toArrayLike(Buffer, 'be', 32)
88807 ])
88808 }
88809
88810 exports.sign = function (message, privateKey, noncefn, data) {
88811 if (typeof noncefn === 'function') {
88812 var getNonce = noncefn
88813 noncefn = function (counter) {
88814 var nonce = getNonce(message, privateKey, null, data, counter)
88815 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
88816
88817 return new BN(nonce)
88818 }
88819 }
88820
88821 var d = new BN(privateKey)
88822 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
88823
88824 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
88825 return {
88826 signature: Buffer.concat([
88827 result.r.toArrayLike(Buffer, 'be', 32),
88828 result.s.toArrayLike(Buffer, 'be', 32)
88829 ]),
88830 recovery: result.recoveryParam
88831 }
88832 }
88833
88834 exports.verify = function (message, signature, publicKey) {
88835 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
88836
88837 var sigr = new BN(sigObj.r)
88838 var sigs = new BN(sigObj.s)
88839 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88840 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
88841
88842 var pair = loadPublicKey(publicKey)
88843 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88844
88845 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
88846 }
88847
88848 exports.recover = function (message, signature, recovery, compressed) {
88849 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
88850
88851 var sigr = new BN(sigObj.r)
88852 var sigs = new BN(sigObj.s)
88853 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88854
88855 try {
88856 if (sigr.isZero() || sigs.isZero()) throw new Error()
88857
88858 var point = ec.recoverPubKey(message, sigObj, recovery)
88859 return new Buffer(point.encode(true, compressed))
88860 } catch (err) {
88861 throw new Error(messages.ECDSA_RECOVER_FAIL)
88862 }
88863 }
88864
88865 exports.ecdh = function (publicKey, privateKey) {
88866 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
88867 return createHash('sha256').update(shared).digest()
88868 }
88869
88870 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
88871 var pair = loadPublicKey(publicKey)
88872 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88873
88874 var scalar = new BN(privateKey)
88875 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
88876
88877 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
88878 }
88879
88880 }).call(this,require("buffer").Buffer)
88881 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
88882 'use strict'
88883 var assert = require('./assert')
88884 var der = require('./der')
88885 var messages = require('./messages.json')
88886
88887 function initCompressedValue (value, defaultValue) {
88888 if (value === undefined) return defaultValue
88889
88890 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
88891 return value
88892 }
88893
88894 module.exports = function (secp256k1) {
88895 return {
88896 privateKeyVerify: function (privateKey) {
88897 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88898 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
88899 },
88900
88901 privateKeyExport: function (privateKey, compressed) {
88902 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88903 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
88904
88905 compressed = initCompressedValue(compressed, true)
88906 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
88907
88908 return der.privateKeyExport(privateKey, publicKey, compressed)
88909 },
88910
88911 privateKeyImport: function (privateKey) {
88912 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88913
88914 privateKey = der.privateKeyImport(privateKey)
88915 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
88916
88917 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
88918 },
88919
88920 privateKeyTweakAdd: function (privateKey, tweak) {
88921 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88922 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
88923
88924 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
88925 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
88926
88927 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
88928 },
88929
88930 privateKeyTweakMul: function (privateKey, tweak) {
88931 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88932 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
88933
88934 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
88935 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
88936
88937 return secp256k1.privateKeyTweakMul(privateKey, tweak)
88938 },
88939
88940 publicKeyCreate: function (privateKey, compressed) {
88941 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88942 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
88943
88944 compressed = initCompressedValue(compressed, true)
88945
88946 return secp256k1.publicKeyCreate(privateKey, compressed)
88947 },
88948
88949 publicKeyConvert: function (publicKey, compressed) {
88950 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
88951 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
88952
88953 compressed = initCompressedValue(compressed, true)
88954
88955 return secp256k1.publicKeyConvert(publicKey, compressed)
88956 },
88957
88958 publicKeyVerify: function (publicKey) {
88959 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
88960 return secp256k1.publicKeyVerify(publicKey)
88961 },
88962
88963 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
88964 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
88965 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
88966
88967 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
88968 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
88969
88970 compressed = initCompressedValue(compressed, true)
88971
88972 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
88973 },
88974
88975 publicKeyTweakMul: function (publicKey, tweak, compressed) {
88976 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
88977 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
88978
88979 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
88980 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
88981
88982 compressed = initCompressedValue(compressed, true)
88983
88984 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
88985 },
88986
88987 publicKeyCombine: function (publicKeys, compressed) {
88988 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
88989 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
88990 for (var i = 0; i < publicKeys.length; ++i) {
88991 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
88992 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
88993 }
88994
88995 compressed = initCompressedValue(compressed, true)
88996
88997 return secp256k1.publicKeyCombine(publicKeys, compressed)
88998 },
88999
89000 signatureNormalize: function (signature) {
89001 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89002 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89003
89004 return secp256k1.signatureNormalize(signature)
89005 },
89006
89007 signatureExport: function (signature) {
89008 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89009 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89010
89011 var sigObj = secp256k1.signatureExport(signature)
89012 return der.signatureExport(sigObj)
89013 },
89014
89015 signatureImport: function (sig) {
89016 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89017 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89018
89019 var sigObj = der.signatureImport(sig)
89020 if (sigObj) return secp256k1.signatureImport(sigObj)
89021
89022 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
89023 },
89024
89025 signatureImportLax: function (sig) {
89026 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89027 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89028
89029 var sigObj = der.signatureImportLax(sig)
89030 if (sigObj) return secp256k1.signatureImport(sigObj)
89031
89032 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
89033 },
89034
89035 sign: function (message, privateKey, options) {
89036 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
89037 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
89038
89039 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89040 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89041
89042 var data = null
89043 var noncefn = null
89044 if (options !== undefined) {
89045 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
89046
89047 if (options.data !== undefined) {
89048 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
89049 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
89050 data = options.data
89051 }
89052
89053 if (options.noncefn !== undefined) {
89054 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
89055 noncefn = options.noncefn
89056 }
89057 }
89058
89059 return secp256k1.sign(message, privateKey, noncefn, data)
89060 },
89061
89062 verify: function (message, signature, publicKey) {
89063 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
89064 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
89065
89066 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89067 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89068
89069 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89070 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89071
89072 return secp256k1.verify(message, signature, publicKey)
89073 },
89074
89075 recover: function (message, signature, recovery, compressed) {
89076 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
89077 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
89078
89079 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89080 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89081
89082 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
89083 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
89084
89085 compressed = initCompressedValue(compressed, true)
89086
89087 return secp256k1.recover(message, signature, recovery, compressed)
89088 },
89089
89090 ecdh: function (publicKey, privateKey) {
89091 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89092 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89093
89094 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89095 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89096
89097 return secp256k1.ecdh(publicKey, privateKey)
89098 },
89099
89100 ecdhUnsafe: function (publicKey, privateKey, compressed) {
89101 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89102 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89103
89104 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89105 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89106
89107 compressed = initCompressedValue(compressed, true)
89108
89109 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
89110 }
89111 }
89112 }
89113
89114 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
89115 module.exports={
89116 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
89117 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
89118 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
89119 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
89120 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
89121 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
89122 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
89123 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
89124 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
89125 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
89126 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
89127 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
89128 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
89129 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
89130 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
89131 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
89132 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
89133 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
89134 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
89135 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
89136 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
89137 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
89138 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
89139 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
89140 "MSG32_TYPE_INVALID": "message should be a Buffer",
89141 "MSG32_LENGTH_INVALID": "message length is invalid",
89142 "OPTIONS_TYPE_INVALID": "options should be an Object",
89143 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
89144 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
89145 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
89146 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
89147 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
89148 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
89149 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
89150 }
89151
89152 },{}],79:[function(require,module,exports){
89153 (function (Buffer){
89154 // prototype class for hash functions
89155 function Hash (blockSize, finalSize) {
89156 this._block = new Buffer(blockSize)
89157 this._finalSize = finalSize
89158 this._blockSize = blockSize
89159 this._len = 0
89160 this._s = 0
89161 }
89162
89163 Hash.prototype.update = function (data, enc) {
89164 if (typeof data === 'string') {
89165 enc = enc || 'utf8'
89166 data = new Buffer(data, enc)
89167 }
89168
89169 var l = this._len += data.length
89170 var s = this._s || 0
89171 var f = 0
89172 var buffer = this._block
89173
89174 while (s < l) {
89175 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
89176 var ch = (t - f)
89177
89178 for (var i = 0; i < ch; i++) {
89179 buffer[(s % this._blockSize) + i] = data[i + f]
89180 }
89181
89182 s += ch
89183 f += ch
89184
89185 if ((s % this._blockSize) === 0) {
89186 this._update(buffer)
89187 }
89188 }
89189 this._s = s
89190
89191 return this
89192 }
89193
89194 Hash.prototype.digest = function (enc) {
89195 // Suppose the length of the message M, in bits, is l
89196 var l = this._len * 8
89197
89198 // Append the bit 1 to the end of the message
89199 this._block[this._len % this._blockSize] = 0x80
89200
89201 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
89202 this._block.fill(0, this._len % this._blockSize + 1)
89203
89204 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
89205 this._update(this._block)
89206 this._block.fill(0)
89207 }
89208
89209 // to this append the block which is equal to the number l written in binary
89210 // TODO: handle case where l is > Math.pow(2, 29)
89211 this._block.writeInt32BE(l, this._blockSize - 4)
89212
89213 var hash = this._update(this._block) || this._hash()
89214
89215 return enc ? hash.toString(enc) : hash
89216 }
89217
89218 Hash.prototype._update = function () {
89219 throw new Error('_update must be implemented by subclass')
89220 }
89221
89222 module.exports = Hash
89223
89224 }).call(this,require("buffer").Buffer)
89225 },{"buffer":5}],80:[function(require,module,exports){
89226 var exports = module.exports = function SHA (algorithm) {
89227 algorithm = algorithm.toLowerCase()
89228
89229 var Algorithm = exports[algorithm]
89230 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
89231
89232 return new Algorithm()
89233 }
89234
89235 exports.sha = require('./sha')
89236 exports.sha1 = require('./sha1')
89237 exports.sha224 = require('./sha224')
89238 exports.sha256 = require('./sha256')
89239 exports.sha384 = require('./sha384')
89240 exports.sha512 = require('./sha512')
89241
89242 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
89243 (function (Buffer){
89244 /*
89245 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
89246 * in FIPS PUB 180-1
89247 * This source code is derived from sha1.js of the same repository.
89248 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
89249 * operation was added.
89250 */
89251
89252 var inherits = require('inherits')
89253 var Hash = require('./hash')
89254
89255 var K = [
89256 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
89257 ]
89258
89259 var W = new Array(80)
89260
89261 function Sha () {
89262 this.init()
89263 this._w = W
89264
89265 Hash.call(this, 64, 56)
89266 }
89267
89268 inherits(Sha, Hash)
89269
89270 Sha.prototype.init = function () {
89271 this._a = 0x67452301
89272 this._b = 0xefcdab89
89273 this._c = 0x98badcfe
89274 this._d = 0x10325476
89275 this._e = 0xc3d2e1f0
89276
89277 return this
89278 }
89279
89280 function rotl5 (num) {
89281 return (num << 5) | (num >>> 27)
89282 }
89283
89284 function rotl30 (num) {
89285 return (num << 30) | (num >>> 2)
89286 }
89287
89288 function ft (s, b, c, d) {
89289 if (s === 0) return (b & c) | ((~b) & d)
89290 if (s === 2) return (b & c) | (b & d) | (c & d)
89291 return b ^ c ^ d
89292 }
89293
89294 Sha.prototype._update = function (M) {
89295 var W = this._w
89296
89297 var a = this._a | 0
89298 var b = this._b | 0
89299 var c = this._c | 0
89300 var d = this._d | 0
89301 var e = this._e | 0
89302
89303 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
89304 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
89305
89306 for (var j = 0; j < 80; ++j) {
89307 var s = ~~(j / 20)
89308 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
89309
89310 e = d
89311 d = c
89312 c = rotl30(b)
89313 b = a
89314 a = t
89315 }
89316
89317 this._a = (a + this._a) | 0
89318 this._b = (b + this._b) | 0
89319 this._c = (c + this._c) | 0
89320 this._d = (d + this._d) | 0
89321 this._e = (e + this._e) | 0
89322 }
89323
89324 Sha.prototype._hash = function () {
89325 var H = new Buffer(20)
89326
89327 H.writeInt32BE(this._a | 0, 0)
89328 H.writeInt32BE(this._b | 0, 4)
89329 H.writeInt32BE(this._c | 0, 8)
89330 H.writeInt32BE(this._d | 0, 12)
89331 H.writeInt32BE(this._e | 0, 16)
89332
89333 return H
89334 }
89335
89336 module.exports = Sha
89337
89338 }).call(this,require("buffer").Buffer)
89339 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
89340 (function (Buffer){
89341 /*
89342 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
89343 * in FIPS PUB 180-1
89344 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
89345 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89346 * Distributed under the BSD License
89347 * See http://pajhome.org.uk/crypt/md5 for details.
89348 */
89349
89350 var inherits = require('inherits')
89351 var Hash = require('./hash')
89352
89353 var K = [
89354 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
89355 ]
89356
89357 var W = new Array(80)
89358
89359 function Sha1 () {
89360 this.init()
89361 this._w = W
89362
89363 Hash.call(this, 64, 56)
89364 }
89365
89366 inherits(Sha1, Hash)
89367
89368 Sha1.prototype.init = function () {
89369 this._a = 0x67452301
89370 this._b = 0xefcdab89
89371 this._c = 0x98badcfe
89372 this._d = 0x10325476
89373 this._e = 0xc3d2e1f0
89374
89375 return this
89376 }
89377
89378 function rotl1 (num) {
89379 return (num << 1) | (num >>> 31)
89380 }
89381
89382 function rotl5 (num) {
89383 return (num << 5) | (num >>> 27)
89384 }
89385
89386 function rotl30 (num) {
89387 return (num << 30) | (num >>> 2)
89388 }
89389
89390 function ft (s, b, c, d) {
89391 if (s === 0) return (b & c) | ((~b) & d)
89392 if (s === 2) return (b & c) | (b & d) | (c & d)
89393 return b ^ c ^ d
89394 }
89395
89396 Sha1.prototype._update = function (M) {
89397 var W = this._w
89398
89399 var a = this._a | 0
89400 var b = this._b | 0
89401 var c = this._c | 0
89402 var d = this._d | 0
89403 var e = this._e | 0
89404
89405 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
89406 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
89407
89408 for (var j = 0; j < 80; ++j) {
89409 var s = ~~(j / 20)
89410 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
89411
89412 e = d
89413 d = c
89414 c = rotl30(b)
89415 b = a
89416 a = t
89417 }
89418
89419 this._a = (a + this._a) | 0
89420 this._b = (b + this._b) | 0
89421 this._c = (c + this._c) | 0
89422 this._d = (d + this._d) | 0
89423 this._e = (e + this._e) | 0
89424 }
89425
89426 Sha1.prototype._hash = function () {
89427 var H = new Buffer(20)
89428
89429 H.writeInt32BE(this._a | 0, 0)
89430 H.writeInt32BE(this._b | 0, 4)
89431 H.writeInt32BE(this._c | 0, 8)
89432 H.writeInt32BE(this._d | 0, 12)
89433 H.writeInt32BE(this._e | 0, 16)
89434
89435 return H
89436 }
89437
89438 module.exports = Sha1
89439
89440 }).call(this,require("buffer").Buffer)
89441 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
89442 (function (Buffer){
89443 /**
89444 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
89445 * in FIPS 180-2
89446 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
89447 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89448 *
89449 */
89450
89451 var inherits = require('inherits')
89452 var Sha256 = require('./sha256')
89453 var Hash = require('./hash')
89454
89455 var W = new Array(64)
89456
89457 function Sha224 () {
89458 this.init()
89459
89460 this._w = W // new Array(64)
89461
89462 Hash.call(this, 64, 56)
89463 }
89464
89465 inherits(Sha224, Sha256)
89466
89467 Sha224.prototype.init = function () {
89468 this._a = 0xc1059ed8
89469 this._b = 0x367cd507
89470 this._c = 0x3070dd17
89471 this._d = 0xf70e5939
89472 this._e = 0xffc00b31
89473 this._f = 0x68581511
89474 this._g = 0x64f98fa7
89475 this._h = 0xbefa4fa4
89476
89477 return this
89478 }
89479
89480 Sha224.prototype._hash = function () {
89481 var H = new Buffer(28)
89482
89483 H.writeInt32BE(this._a, 0)
89484 H.writeInt32BE(this._b, 4)
89485 H.writeInt32BE(this._c, 8)
89486 H.writeInt32BE(this._d, 12)
89487 H.writeInt32BE(this._e, 16)
89488 H.writeInt32BE(this._f, 20)
89489 H.writeInt32BE(this._g, 24)
89490
89491 return H
89492 }
89493
89494 module.exports = Sha224
89495
89496 }).call(this,require("buffer").Buffer)
89497 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
89498 (function (Buffer){
89499 /**
89500 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
89501 * in FIPS 180-2
89502 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
89503 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89504 *
89505 */
89506
89507 var inherits = require('inherits')
89508 var Hash = require('./hash')
89509
89510 var K = [
89511 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
89512 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
89513 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
89514 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
89515 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
89516 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
89517 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
89518 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
89519 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
89520 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
89521 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
89522 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
89523 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
89524 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
89525 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
89526 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
89527 ]
89528
89529 var W = new Array(64)
89530
89531 function Sha256 () {
89532 this.init()
89533
89534 this._w = W // new Array(64)
89535
89536 Hash.call(this, 64, 56)
89537 }
89538
89539 inherits(Sha256, Hash)
89540
89541 Sha256.prototype.init = function () {
89542 this._a = 0x6a09e667
89543 this._b = 0xbb67ae85
89544 this._c = 0x3c6ef372
89545 this._d = 0xa54ff53a
89546 this._e = 0x510e527f
89547 this._f = 0x9b05688c
89548 this._g = 0x1f83d9ab
89549 this._h = 0x5be0cd19
89550
89551 return this
89552 }
89553
89554 function ch (x, y, z) {
89555 return z ^ (x & (y ^ z))
89556 }
89557
89558 function maj (x, y, z) {
89559 return (x & y) | (z & (x | y))
89560 }
89561
89562 function sigma0 (x) {
89563 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
89564 }
89565
89566 function sigma1 (x) {
89567 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
89568 }
89569
89570 function gamma0 (x) {
89571 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
89572 }
89573
89574 function gamma1 (x) {
89575 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
89576 }
89577
89578 Sha256.prototype._update = function (M) {
89579 var W = this._w
89580
89581 var a = this._a | 0
89582 var b = this._b | 0
89583 var c = this._c | 0
89584 var d = this._d | 0
89585 var e = this._e | 0
89586 var f = this._f | 0
89587 var g = this._g | 0
89588 var h = this._h | 0
89589
89590 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
89591 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
89592
89593 for (var j = 0; j < 64; ++j) {
89594 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
89595 var T2 = (sigma0(a) + maj(a, b, c)) | 0
89596
89597 h = g
89598 g = f
89599 f = e
89600 e = (d + T1) | 0
89601 d = c
89602 c = b
89603 b = a
89604 a = (T1 + T2) | 0
89605 }
89606
89607 this._a = (a + this._a) | 0
89608 this._b = (b + this._b) | 0
89609 this._c = (c + this._c) | 0
89610 this._d = (d + this._d) | 0
89611 this._e = (e + this._e) | 0
89612 this._f = (f + this._f) | 0
89613 this._g = (g + this._g) | 0
89614 this._h = (h + this._h) | 0
89615 }
89616
89617 Sha256.prototype._hash = function () {
89618 var H = new Buffer(32)
89619
89620 H.writeInt32BE(this._a, 0)
89621 H.writeInt32BE(this._b, 4)
89622 H.writeInt32BE(this._c, 8)
89623 H.writeInt32BE(this._d, 12)
89624 H.writeInt32BE(this._e, 16)
89625 H.writeInt32BE(this._f, 20)
89626 H.writeInt32BE(this._g, 24)
89627 H.writeInt32BE(this._h, 28)
89628
89629 return H
89630 }
89631
89632 module.exports = Sha256
89633
89634 }).call(this,require("buffer").Buffer)
89635 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
89636 (function (Buffer){
89637 var inherits = require('inherits')
89638 var SHA512 = require('./sha512')
89639 var Hash = require('./hash')
89640
89641 var W = new Array(160)
89642
89643 function Sha384 () {
89644 this.init()
89645 this._w = W
89646
89647 Hash.call(this, 128, 112)
89648 }
89649
89650 inherits(Sha384, SHA512)
89651
89652 Sha384.prototype.init = function () {
89653 this._ah = 0xcbbb9d5d
89654 this._bh = 0x629a292a
89655 this._ch = 0x9159015a
89656 this._dh = 0x152fecd8
89657 this._eh = 0x67332667
89658 this._fh = 0x8eb44a87
89659 this._gh = 0xdb0c2e0d
89660 this._hh = 0x47b5481d
89661
89662 this._al = 0xc1059ed8
89663 this._bl = 0x367cd507
89664 this._cl = 0x3070dd17
89665 this._dl = 0xf70e5939
89666 this._el = 0xffc00b31
89667 this._fl = 0x68581511
89668 this._gl = 0x64f98fa7
89669 this._hl = 0xbefa4fa4
89670
89671 return this
89672 }
89673
89674 Sha384.prototype._hash = function () {
89675 var H = new Buffer(48)
89676
89677 function writeInt64BE (h, l, offset) {
89678 H.writeInt32BE(h, offset)
89679 H.writeInt32BE(l, offset + 4)
89680 }
89681
89682 writeInt64BE(this._ah, this._al, 0)
89683 writeInt64BE(this._bh, this._bl, 8)
89684 writeInt64BE(this._ch, this._cl, 16)
89685 writeInt64BE(this._dh, this._dl, 24)
89686 writeInt64BE(this._eh, this._el, 32)
89687 writeInt64BE(this._fh, this._fl, 40)
89688
89689 return H
89690 }
89691
89692 module.exports = Sha384
89693
89694 }).call(this,require("buffer").Buffer)
89695 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
89696 (function (Buffer){
89697 var inherits = require('inherits')
89698 var Hash = require('./hash')
89699
89700 var K = [
89701 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
89702 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
89703 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
89704 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
89705 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
89706 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
89707 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
89708 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
89709 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
89710 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
89711 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
89712 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
89713 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
89714 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
89715 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
89716 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
89717 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
89718 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
89719 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
89720 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
89721 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
89722 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
89723 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
89724 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
89725 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
89726 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
89727 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
89728 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
89729 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
89730 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
89731 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
89732 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
89733 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
89734 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
89735 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
89736 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
89737 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
89738 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
89739 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
89740 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
89741 ]
89742
89743 var W = new Array(160)
89744
89745 function Sha512 () {
89746 this.init()
89747 this._w = W
89748
89749 Hash.call(this, 128, 112)
89750 }
89751
89752 inherits(Sha512, Hash)
89753
89754 Sha512.prototype.init = function () {
89755 this._ah = 0x6a09e667
89756 this._bh = 0xbb67ae85
89757 this._ch = 0x3c6ef372
89758 this._dh = 0xa54ff53a
89759 this._eh = 0x510e527f
89760 this._fh = 0x9b05688c
89761 this._gh = 0x1f83d9ab
89762 this._hh = 0x5be0cd19
89763
89764 this._al = 0xf3bcc908
89765 this._bl = 0x84caa73b
89766 this._cl = 0xfe94f82b
89767 this._dl = 0x5f1d36f1
89768 this._el = 0xade682d1
89769 this._fl = 0x2b3e6c1f
89770 this._gl = 0xfb41bd6b
89771 this._hl = 0x137e2179
89772
89773 return this
89774 }
89775
89776 function Ch (x, y, z) {
89777 return z ^ (x & (y ^ z))
89778 }
89779
89780 function maj (x, y, z) {
89781 return (x & y) | (z & (x | y))
89782 }
89783
89784 function sigma0 (x, xl) {
89785 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
89786 }
89787
89788 function sigma1 (x, xl) {
89789 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
89790 }
89791
89792 function Gamma0 (x, xl) {
89793 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
89794 }
89795
89796 function Gamma0l (x, xl) {
89797 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
89798 }
89799
89800 function Gamma1 (x, xl) {
89801 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
89802 }
89803
89804 function Gamma1l (x, xl) {
89805 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
89806 }
89807
89808 function getCarry (a, b) {
89809 return (a >>> 0) < (b >>> 0) ? 1 : 0
89810 }
89811
89812 Sha512.prototype._update = function (M) {
89813 var W = this._w
89814
89815 var ah = this._ah | 0
89816 var bh = this._bh | 0
89817 var ch = this._ch | 0
89818 var dh = this._dh | 0
89819 var eh = this._eh | 0
89820 var fh = this._fh | 0
89821 var gh = this._gh | 0
89822 var hh = this._hh | 0
89823
89824 var al = this._al | 0
89825 var bl = this._bl | 0
89826 var cl = this._cl | 0
89827 var dl = this._dl | 0
89828 var el = this._el | 0
89829 var fl = this._fl | 0
89830 var gl = this._gl | 0
89831 var hl = this._hl | 0
89832
89833 for (var i = 0; i < 32; i += 2) {
89834 W[i] = M.readInt32BE(i * 4)
89835 W[i + 1] = M.readInt32BE(i * 4 + 4)
89836 }
89837 for (; i < 160; i += 2) {
89838 var xh = W[i - 15 * 2]
89839 var xl = W[i - 15 * 2 + 1]
89840 var gamma0 = Gamma0(xh, xl)
89841 var gamma0l = Gamma0l(xl, xh)
89842
89843 xh = W[i - 2 * 2]
89844 xl = W[i - 2 * 2 + 1]
89845 var gamma1 = Gamma1(xh, xl)
89846 var gamma1l = Gamma1l(xl, xh)
89847
89848 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
89849 var Wi7h = W[i - 7 * 2]
89850 var Wi7l = W[i - 7 * 2 + 1]
89851
89852 var Wi16h = W[i - 16 * 2]
89853 var Wi16l = W[i - 16 * 2 + 1]
89854
89855 var Wil = (gamma0l + Wi7l) | 0
89856 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
89857 Wil = (Wil + gamma1l) | 0
89858 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
89859 Wil = (Wil + Wi16l) | 0
89860 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
89861
89862 W[i] = Wih
89863 W[i + 1] = Wil
89864 }
89865
89866 for (var j = 0; j < 160; j += 2) {
89867 Wih = W[j]
89868 Wil = W[j + 1]
89869
89870 var majh = maj(ah, bh, ch)
89871 var majl = maj(al, bl, cl)
89872
89873 var sigma0h = sigma0(ah, al)
89874 var sigma0l = sigma0(al, ah)
89875 var sigma1h = sigma1(eh, el)
89876 var sigma1l = sigma1(el, eh)
89877
89878 // t1 = h + sigma1 + ch + K[j] + W[j]
89879 var Kih = K[j]
89880 var Kil = K[j + 1]
89881
89882 var chh = Ch(eh, fh, gh)
89883 var chl = Ch(el, fl, gl)
89884
89885 var t1l = (hl + sigma1l) | 0
89886 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
89887 t1l = (t1l + chl) | 0
89888 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
89889 t1l = (t1l + Kil) | 0
89890 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
89891 t1l = (t1l + Wil) | 0
89892 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
89893
89894 // t2 = sigma0 + maj
89895 var t2l = (sigma0l + majl) | 0
89896 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
89897
89898 hh = gh
89899 hl = gl
89900 gh = fh
89901 gl = fl
89902 fh = eh
89903 fl = el
89904 el = (dl + t1l) | 0
89905 eh = (dh + t1h + getCarry(el, dl)) | 0
89906 dh = ch
89907 dl = cl
89908 ch = bh
89909 cl = bl
89910 bh = ah
89911 bl = al
89912 al = (t1l + t2l) | 0
89913 ah = (t1h + t2h + getCarry(al, t1l)) | 0
89914 }
89915
89916 this._al = (this._al + al) | 0
89917 this._bl = (this._bl + bl) | 0
89918 this._cl = (this._cl + cl) | 0
89919 this._dl = (this._dl + dl) | 0
89920 this._el = (this._el + el) | 0
89921 this._fl = (this._fl + fl) | 0
89922 this._gl = (this._gl + gl) | 0
89923 this._hl = (this._hl + hl) | 0
89924
89925 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
89926 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
89927 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
89928 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
89929 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
89930 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
89931 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
89932 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
89933 }
89934
89935 Sha512.prototype._hash = function () {
89936 var H = new Buffer(64)
89937
89938 function writeInt64BE (h, l, offset) {
89939 H.writeInt32BE(h, offset)
89940 H.writeInt32BE(l, offset + 4)
89941 }
89942
89943 writeInt64BE(this._ah, this._al, 0)
89944 writeInt64BE(this._bh, this._bl, 8)
89945 writeInt64BE(this._ch, this._cl, 16)
89946 writeInt64BE(this._dh, this._dl, 24)
89947 writeInt64BE(this._eh, this._el, 32)
89948 writeInt64BE(this._fh, this._fl, 40)
89949 writeInt64BE(this._gh, this._gl, 48)
89950 writeInt64BE(this._hh, this._hl, 56)
89951
89952 return H
89953 }
89954
89955 module.exports = Sha512
89956
89957 }).call(this,require("buffer").Buffer)
89958 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
89959 var isHexPrefixed = require('is-hex-prefixed');
89960
89961 /**
89962 * Removes '0x' from a given `String` is present
89963 * @param {String} str the string value
89964 * @return {String|Optional} a string by pass if necessary
89965 */
89966 module.exports = function stripHexPrefix(str) {
89967 if (typeof str !== 'string') {
89968 return str;
89969 }
89970
89971 return isHexPrefixed(str) ? str.slice(2) : str;
89972 }
89973
89974 },{"is-hex-prefixed":64}]},{},[31])(31)
89975 });</script>
89976 <script>function convertRippleAdrr(address) {
89977 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
89978 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
89979 )
89980 }
89981
89982 function convertRipplePriv(priv) {
89983 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
89984 }
89985
89986 </script>
89987 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
89988
89989 //// base.js
89990
89991 /** @fileOverview Javascript cryptography implementation.
89992 *
89993 * Crush to remove comments, shorten variable names and
89994 * generally reduce transmission size.
89995 *
89996 * @author Emily Stark
89997 * @author Mike Hamburg
89998 * @author Dan Boneh
89999 */
90000
90001 "use strict";
90002 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
90003 /*global document, window, escape, unescape, module, require, Uint32Array */
90004
90005 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
90006 var sjcl = {
90007 /** @namespace Symmetric ciphers. */
90008 cipher: {},
90009
90010 /** @namespace Hash functions. Right now only SHA256 is implemented. */
90011 hash: {},
90012
90013 /** @namespace Key exchange functions. Right now only SRP is implemented. */
90014 keyexchange: {},
90015
90016 /** @namespace Block cipher modes of operation. */
90017 mode: {},
90018
90019 /** @namespace Miscellaneous. HMAC and PBKDF2. */
90020 misc: {},
90021
90022 /**
90023 * @namespace Bit array encoders and decoders.
90024 *
90025 * @description
90026 * The members of this namespace are functions which translate between
90027 * SJCL's bitArrays and other objects (usually strings). Because it
90028 * isn't always clear which direction is encoding and which is decoding,
90029 * the method names are "fromBits" and "toBits".
90030 */
90031 codec: {},
90032
90033 /** @namespace Exceptions. */
90034 exception: {
90035 /** @constructor Ciphertext is corrupt. */
90036 corrupt: function(message) {
90037 this.toString = function() { return "CORRUPT: "+this.message; };
90038 this.message = message;
90039 },
90040
90041 /** @constructor Invalid parameter. */
90042 invalid: function(message) {
90043 this.toString = function() { return "INVALID: "+this.message; };
90044 this.message = message;
90045 },
90046
90047 /** @constructor Bug or missing feature in SJCL. @constructor */
90048 bug: function(message) {
90049 this.toString = function() { return "BUG: "+this.message; };
90050 this.message = message;
90051 },
90052
90053 /** @constructor Something isn't ready. */
90054 notReady: function(message) {
90055 this.toString = function() { return "NOT READY: "+this.message; };
90056 this.message = message;
90057 }
90058 }
90059 };
90060
90061 if(typeof module !== 'undefined' && module.exports){
90062 module.exports = sjcl;
90063 }
90064 if (typeof define === "function") {
90065 define([], function () {
90066 return sjcl;
90067 });
90068 }
90069
90070
90071 //// bitArray.js
90072
90073 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
90074 *
90075 * @author Emily Stark
90076 * @author Mike Hamburg
90077 * @author Dan Boneh
90078 */
90079
90080 /** @namespace Arrays of bits, encoded as arrays of Numbers.
90081 *
90082 * @description
90083 * <p>
90084 * These objects are the currency accepted by SJCL's crypto functions.
90085 * </p>
90086 *
90087 * <p>
90088 * Most of our crypto primitives operate on arrays of 4-byte words internally,
90089 * but many of them can take arguments that are not a multiple of 4 bytes.
90090 * This library encodes arrays of bits (whose size need not be a multiple of 8
90091 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
90092 * array of words, 32 bits at a time. Since the words are double-precision
90093 * floating point numbers, they fit some extra data. We use this (in a private,
90094 * possibly-changing manner) to encode the number of bits actually present
90095 * in the last word of the array.
90096 * </p>
90097 *
90098 * <p>
90099 * Because bitwise ops clear this out-of-band data, these arrays can be passed
90100 * to ciphers like AES which want arrays of words.
90101 * </p>
90102 */
90103 sjcl.bitArray = {
90104 /**
90105 * Array slices in units of bits.
90106 * @param {bitArray} a The array to slice.
90107 * @param {Number} bstart The offset to the start of the slice, in bits.
90108 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
90109 * slice until the end of the array.
90110 * @return {bitArray} The requested slice.
90111 */
90112 bitSlice: function (a, bstart, bend) {
90113 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
90114 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
90115 },
90116
90117 /**
90118 * Extract a number packed into a bit array.
90119 * @param {bitArray} a The array to slice.
90120 * @param {Number} bstart The offset to the start of the slice, in bits.
90121 * @param {Number} length The length of the number to extract.
90122 * @return {Number} The requested slice.
90123 */
90124 extract: function(a, bstart, blength) {
90125 // FIXME: this Math.floor is not necessary at all, but for some reason
90126 // seems to suppress a bug in the Chromium JIT.
90127 var x, sh = Math.floor((-bstart-blength) & 31);
90128 if ((bstart + blength - 1 ^ bstart) & -32) {
90129 // it crosses a boundary
90130 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
90131 } else {
90132 // within a single word
90133 x = a[bstart/32|0] >>> sh;
90134 }
90135 return x & ((1<<blength) - 1);
90136 },
90137
90138 /**
90139 * Concatenate two bit arrays.
90140 * @param {bitArray} a1 The first array.
90141 * @param {bitArray} a2 The second array.
90142 * @return {bitArray} The concatenation of a1 and a2.
90143 */
90144 concat: function (a1, a2) {
90145 if (a1.length === 0 || a2.length === 0) {
90146 return a1.concat(a2);
90147 }
90148
90149 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
90150 if (shift === 32) {
90151 return a1.concat(a2);
90152 } else {
90153 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
90154 }
90155 },
90156
90157 /**
90158 * Find the length of an array of bits.
90159 * @param {bitArray} a The array.
90160 * @return {Number} The length of a, in bits.
90161 */
90162 bitLength: function (a) {
90163 var l = a.length, x;
90164 if (l === 0) { return 0; }
90165 x = a[l - 1];
90166 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
90167 },
90168
90169 /**
90170 * Truncate an array.
90171 * @param {bitArray} a The array.
90172 * @param {Number} len The length to truncate to, in bits.
90173 * @return {bitArray} A new array, truncated to len bits.
90174 */
90175 clamp: function (a, len) {
90176 if (a.length * 32 < len) { return a; }
90177 a = a.slice(0, Math.ceil(len / 32));
90178 var l = a.length;
90179 len = len & 31;
90180 if (l > 0 && len) {
90181 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
90182 }
90183 return a;
90184 },
90185
90186 /**
90187 * Make a partial word for a bit array.
90188 * @param {Number} len The number of bits in the word.
90189 * @param {Number} x The bits.
90190 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
90191 * @return {Number} The partial word.
90192 */
90193 partial: function (len, x, _end) {
90194 if (len === 32) { return x; }
90195 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
90196 },
90197
90198 /**
90199 * Get the number of bits used by a partial word.
90200 * @param {Number} x The partial word.
90201 * @return {Number} The number of bits used by the partial word.
90202 */
90203 getPartial: function (x) {
90204 return Math.round(x/0x10000000000) || 32;
90205 },
90206
90207 /**
90208 * Compare two arrays for equality in a predictable amount of time.
90209 * @param {bitArray} a The first array.
90210 * @param {bitArray} b The second array.
90211 * @return {boolean} true if a == b; false otherwise.
90212 */
90213 equal: function (a, b) {
90214 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
90215 return false;
90216 }
90217 var x = 0, i;
90218 for (i=0; i<a.length; i++) {
90219 x |= a[i]^b[i];
90220 }
90221 return (x === 0);
90222 },
90223
90224 /** Shift an array right.
90225 * @param {bitArray} a The array to shift.
90226 * @param {Number} shift The number of bits to shift.
90227 * @param {Number} [carry=0] A byte to carry in
90228 * @param {bitArray} [out=[]] An array to prepend to the output.
90229 * @private
90230 */
90231 _shiftRight: function (a, shift, carry, out) {
90232 var i, last2=0, shift2;
90233 if (out === undefined) { out = []; }
90234
90235 for (; shift >= 32; shift -= 32) {
90236 out.push(carry);
90237 carry = 0;
90238 }
90239 if (shift === 0) {
90240 return out.concat(a);
90241 }
90242
90243 for (i=0; i<a.length; i++) {
90244 out.push(carry | a[i]>>>shift);
90245 carry = a[i] << (32-shift);
90246 }
90247 last2 = a.length ? a[a.length-1] : 0;
90248 shift2 = sjcl.bitArray.getPartial(last2);
90249 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
90250 return out;
90251 },
90252
90253 /** xor a block of 4 words together.
90254 * @private
90255 */
90256 _xor4: function(x,y) {
90257 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
90258 },
90259
90260 /** byteswap a word array inplace.
90261 * (does not handle partial words)
90262 * @param {sjcl.bitArray} a word array
90263 * @return {sjcl.bitArray} byteswapped array
90264 */
90265 byteswapM: function(a) {
90266 var i, v, m = 0xff00;
90267 for (i = 0; i < a.length; ++i) {
90268 v = a[i];
90269 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
90270 }
90271 return a;
90272 }
90273 };
90274
90275
90276 //// codecString.js
90277
90278 /** @fileOverview Bit array codec implementations.
90279 *
90280 * @author Emily Stark
90281 * @author Mike Hamburg
90282 * @author Dan Boneh
90283 */
90284
90285 /** @namespace UTF-8 strings */
90286 sjcl.codec.utf8String = {
90287 /** Convert from a bitArray to a UTF-8 string. */
90288 fromBits: function (arr) {
90289 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
90290 for (i=0; i<bl/8; i++) {
90291 if ((i&3) === 0) {
90292 tmp = arr[i/4];
90293 }
90294 out += String.fromCharCode(tmp >>> 24);
90295 tmp <<= 8;
90296 }
90297 return decodeURIComponent(escape(out));
90298 },
90299
90300 /** Convert from a UTF-8 string to a bitArray. */
90301 toBits: function (str) {
90302 str = unescape(encodeURIComponent(str));
90303 var out = [], i, tmp=0;
90304 for (i=0; i<str.length; i++) {
90305 tmp = tmp << 8 | str.charCodeAt(i);
90306 if ((i&3) === 3) {
90307 out.push(tmp);
90308 tmp = 0;
90309 }
90310 }
90311 if (i&3) {
90312 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
90313 }
90314 return out;
90315 }
90316 };
90317
90318
90319 //// codecHex.js
90320
90321 /** @fileOverview Bit array codec implementations.
90322 *
90323 * @author Emily Stark
90324 * @author Mike Hamburg
90325 * @author Dan Boneh
90326 */
90327
90328 /** @namespace Hexadecimal */
90329 sjcl.codec.hex = {
90330 /** Convert from a bitArray to a hex string. */
90331 fromBits: function (arr) {
90332 var out = "", i;
90333 for (i=0; i<arr.length; i++) {
90334 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
90335 }
90336 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
90337 },
90338 /** Convert from a hex string to a bitArray. */
90339 toBits: function (str) {
90340 var i, out=[], len;
90341 str = str.replace(/\s|0x/g, "");
90342 len = str.length;
90343 str = str + "00000000";
90344 for (i=0; i<str.length; i+=8) {
90345 out.push(parseInt(str.substr(i,8),16)^0);
90346 }
90347 return sjcl.bitArray.clamp(out, len*4);
90348 }
90349 };
90350
90351
90352 //// sha512.js
90353
90354 /** @fileOverview Javascript SHA-512 implementation.
90355 *
90356 * This implementation was written for CryptoJS by Jeff Mott and adapted for
90357 * SJCL by Stefan Thomas.
90358 *
90359 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
90360 * Released with New BSD License
90361 *
90362 * @author Emily Stark
90363 * @author Mike Hamburg
90364 * @author Dan Boneh
90365 * @author Jeff Mott
90366 * @author Stefan Thomas
90367 */
90368
90369 /**
90370 * Context for a SHA-512 operation in progress.
90371 * @constructor
90372 * @class Secure Hash Algorithm, 512 bits.
90373 */
90374 sjcl.hash.sha512 = function (hash) {
90375 if (!this._key[0]) { this._precompute(); }
90376 if (hash) {
90377 this._h = hash._h.slice(0);
90378 this._buffer = hash._buffer.slice(0);
90379 this._length = hash._length;
90380 } else {
90381 this.reset();
90382 }
90383 };
90384
90385 /**
90386 * Hash a string or an array of words.
90387 * @static
90388 * @param {bitArray|String} data the data to hash.
90389 * @return {bitArray} The hash value, an array of 16 big-endian words.
90390 */
90391 sjcl.hash.sha512.hash = function (data) {
90392 return (new sjcl.hash.sha512()).update(data).finalize();
90393 };
90394
90395 sjcl.hash.sha512.prototype = {
90396 /**
90397 * The hash's block size, in bits.
90398 * @constant
90399 */
90400 blockSize: 1024,
90401
90402 /**
90403 * Reset the hash state.
90404 * @return this
90405 */
90406 reset:function () {
90407 this._h = this._init.slice(0);
90408 this._buffer = [];
90409 this._length = 0;
90410 return this;
90411 },
90412
90413 /**
90414 * Input several words to the hash.
90415 * @param {bitArray|String} data the data to hash.
90416 * @return this
90417 */
90418 update: function (data) {
90419 if (typeof data === "string") {
90420 data = sjcl.codec.utf8String.toBits(data);
90421 }
90422 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
90423 ol = this._length,
90424 nl = this._length = ol + sjcl.bitArray.bitLength(data);
90425 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
90426 this._block(b.splice(0,32));
90427 }
90428 return this;
90429 },
90430
90431 /**
90432 * Complete hashing and output the hash value.
90433 * @return {bitArray} The hash value, an array of 16 big-endian words.
90434 */
90435 finalize:function () {
90436 var i, b = this._buffer, h = this._h;
90437
90438 // Round out and push the buffer
90439 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
90440
90441 // Round out the buffer to a multiple of 32 words, less the 4 length words.
90442 for (i = b.length + 4; i & 31; i++) {
90443 b.push(0);
90444 }
90445
90446 // append the length
90447 b.push(0);
90448 b.push(0);
90449 b.push(Math.floor(this._length / 0x100000000));
90450 b.push(this._length | 0);
90451
90452 while (b.length) {
90453 this._block(b.splice(0,32));
90454 }
90455
90456 this.reset();
90457 return h;
90458 },
90459
90460 /**
90461 * The SHA-512 initialization vector, to be precomputed.
90462 * @private
90463 */
90464 _init:[],
90465
90466 /**
90467 * Least significant 24 bits of SHA512 initialization values.
90468 *
90469 * Javascript only has 53 bits of precision, so we compute the 40 most
90470 * significant bits and add the remaining 24 bits as constants.
90471 *
90472 * @private
90473 */
90474 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
90475
90476 /*
90477 _init:
90478 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
90479 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
90480 */
90481
90482 /**
90483 * The SHA-512 hash key, to be precomputed.
90484 * @private
90485 */
90486 _key:[],
90487
90488 /**
90489 * Least significant 24 bits of SHA512 key values.
90490 * @private
90491 */
90492 _keyr:
90493 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
90494 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
90495 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
90496 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
90497 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
90498 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
90499 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
90500 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
90501 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
90502 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
90503
90504 /*
90505 _key:
90506 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
90507 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
90508 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
90509 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
90510 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
90511 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
90512 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
90513 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
90514 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
90515 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
90516 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
90517 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
90518 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
90519 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
90520 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
90521 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
90522 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
90523 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
90524 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
90525 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
90526 */
90527
90528 /**
90529 * Function to precompute _init and _key.
90530 * @private
90531 */
90532 _precompute: function () {
90533 // XXX: This code is for precomputing the SHA256 constants, change for
90534 // SHA512 and re-enable.
90535 var i = 0, prime = 2, factor;
90536
90537 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
90538 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
90539
90540 outer: for (; i<80; prime++) {
90541 for (factor=2; factor*factor <= prime; factor++) {
90542 if (prime % factor === 0) {
90543 // not a prime
90544 continue outer;
90545 }
90546 }
90547
90548 if (i<8) {
90549 this._init[i*2] = frac(Math.pow(prime, 1/2));
90550 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
90551 }
90552 this._key[i*2] = frac(Math.pow(prime, 1/3));
90553 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
90554 i++;
90555 }
90556 },
90557
90558 /**
90559 * Perform one cycle of SHA-512.
90560 * @param {bitArray} words one block of words.
90561 * @private
90562 */
90563 _block:function (words) {
90564 var i, wrh, wrl,
90565 w = words.slice(0),
90566 h = this._h,
90567 k = this._key,
90568 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
90569 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
90570 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
90571 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
90572
90573 // Working variables
90574 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
90575 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
90576 eh = h4h, el = h4l, fh = h5h, fl = h5l,
90577 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
90578
90579 for (i=0; i<80; i++) {
90580 // load up the input word for this round
90581 if (i<16) {
90582 wrh = w[i * 2];
90583 wrl = w[i * 2 + 1];
90584 } else {
90585 // Gamma0
90586 var gamma0xh = w[(i-15) * 2];
90587 var gamma0xl = w[(i-15) * 2 + 1];
90588 var gamma0h =
90589 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
90590 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
90591 (gamma0xh >>> 7);
90592 var gamma0l =
90593 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
90594 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
90595 ((gamma0xh << 25) | (gamma0xl >>> 7));
90596
90597 // Gamma1
90598 var gamma1xh = w[(i-2) * 2];
90599 var gamma1xl = w[(i-2) * 2 + 1];
90600 var gamma1h =
90601 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
90602 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
90603 (gamma1xh >>> 6);
90604 var gamma1l =
90605 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
90606 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
90607 ((gamma1xh << 26) | (gamma1xl >>> 6));
90608
90609 // Shortcuts
90610 var wr7h = w[(i-7) * 2];
90611 var wr7l = w[(i-7) * 2 + 1];
90612
90613 var wr16h = w[(i-16) * 2];
90614 var wr16l = w[(i-16) * 2 + 1];
90615
90616 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
90617 wrl = gamma0l + wr7l;
90618 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
90619 wrl += gamma1l;
90620 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
90621 wrl += wr16l;
90622 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
90623 }
90624
90625 w[i*2] = wrh |= 0;
90626 w[i*2 + 1] = wrl |= 0;
90627
90628 // Ch
90629 var chh = (eh & fh) ^ (~eh & gh);
90630 var chl = (el & fl) ^ (~el & gl);
90631
90632 // Maj
90633 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
90634 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
90635
90636 // Sigma0
90637 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
90638 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
90639
90640 // Sigma1
90641 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
90642 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
90643
90644 // K(round)
90645 var krh = k[i*2];
90646 var krl = k[i*2+1];
90647
90648 // t1 = h + sigma1 + ch + K(round) + W(round)
90649 var t1l = hl + sigma1l;
90650 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
90651 t1l += chl;
90652 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
90653 t1l += krl;
90654 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
90655 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
90656 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
90657
90658 // t2 = sigma0 + maj
90659 var t2l = sigma0l + majl;
90660 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
90661
90662 // Update working variables
90663 hh = gh;
90664 hl = gl;
90665 gh = fh;
90666 gl = fl;
90667 fh = eh;
90668 fl = el;
90669 el = (dl + t1l) | 0;
90670 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
90671 dh = ch;
90672 dl = cl;
90673 ch = bh;
90674 cl = bl;
90675 bh = ah;
90676 bl = al;
90677 al = (t1l + t2l) | 0;
90678 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
90679 }
90680
90681 // Intermediate hash
90682 h0l = h[1] = (h0l + al) | 0;
90683 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
90684 h1l = h[3] = (h1l + bl) | 0;
90685 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
90686 h2l = h[5] = (h2l + cl) | 0;
90687 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
90688 h3l = h[7] = (h3l + dl) | 0;
90689 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
90690 h4l = h[9] = (h4l + el) | 0;
90691 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
90692 h5l = h[11] = (h5l + fl) | 0;
90693 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
90694 h6l = h[13] = (h6l + gl) | 0;
90695 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
90696 h7l = h[15] = (h7l + hl) | 0;
90697 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
90698 }
90699 };
90700
90701
90702 //// hmac.js
90703
90704 /** @fileOverview HMAC implementation.
90705 *
90706 * @author Emily Stark
90707 * @author Mike Hamburg
90708 * @author Dan Boneh
90709 */
90710
90711 /** HMAC with the specified hash function.
90712 * @constructor
90713 * @param {bitArray} key the key for HMAC.
90714 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
90715 */
90716 sjcl.misc.hmac = function (key, Hash) {
90717 this._hash = Hash = Hash || sjcl.hash.sha256;
90718 var exKey = [[],[]], i,
90719 bs = Hash.prototype.blockSize / 32;
90720 this._baseHash = [new Hash(), new Hash()];
90721
90722 if (key.length > bs) {
90723 key = Hash.hash(key);
90724 }
90725
90726 for (i=0; i<bs; i++) {
90727 exKey[0][i] = key[i]^0x36363636;
90728 exKey[1][i] = key[i]^0x5C5C5C5C;
90729 }
90730
90731 this._baseHash[0].update(exKey[0]);
90732 this._baseHash[1].update(exKey[1]);
90733 this._resultHash = new Hash(this._baseHash[0]);
90734 };
90735
90736 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
90737 * @param {bitArray|String} data The data to mac.
90738 */
90739 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
90740 if (!this._updated) {
90741 this.update(data);
90742 return this.digest(data);
90743 } else {
90744 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
90745 }
90746 };
90747
90748 sjcl.misc.hmac.prototype.reset = function () {
90749 this._resultHash = new this._hash(this._baseHash[0]);
90750 this._updated = false;
90751 };
90752
90753 sjcl.misc.hmac.prototype.update = function (data) {
90754 this._updated = true;
90755 this._resultHash.update(data);
90756 };
90757
90758 sjcl.misc.hmac.prototype.digest = function () {
90759 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
90760
90761 this.reset();
90762
90763 return result;
90764 };
90765
90766
90767 //// pbkdf2.js
90768
90769
90770 /** @fileOverview Password-based key-derivation function, version 2.0.
90771 *
90772 * @author Emily Stark
90773 * @author Mike Hamburg
90774 * @author Dan Boneh
90775 */
90776
90777 /** Password-Based Key-Derivation Function, version 2.0.
90778 *
90779 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
90780 *
90781 * This is the method specified by RSA's PKCS #5 standard.
90782 *
90783 * @param {bitArray|String} password The password.
90784 * @param {bitArray|String} salt The salt. Should have lots of entropy.
90785 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
90786 * @param {Number} [length] The length of the derived key. Defaults to the
90787 output size of the hash function.
90788 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
90789 * @return {bitArray} the derived key.
90790 */
90791 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
90792 count = count || 1000;
90793
90794 if (length < 0 || count < 0) {
90795 throw sjcl.exception.invalid("invalid params to pbkdf2");
90796 }
90797
90798 if (typeof password === "string") {
90799 password = sjcl.codec.utf8String.toBits(password);
90800 }
90801
90802 if (typeof salt === "string") {
90803 salt = sjcl.codec.utf8String.toBits(salt);
90804 }
90805
90806 Prff = Prff || sjcl.misc.hmac;
90807
90808 var prf = new Prff(password),
90809 u, ui, i, j, k, out = [], b = sjcl.bitArray;
90810
90811 for (k = 1; 32 * out.length < (length || 1); k++) {
90812 u = ui = prf.encrypt(b.concat(salt,[k]));
90813
90814 for (i=1; i<count; i++) {
90815 ui = prf.encrypt(ui);
90816 for (j=0; j<ui.length; j++) {
90817 u[j] ^= ui[j];
90818 }
90819 }
90820
90821 out = out.concat(u);
90822 }
90823
90824 if (length) { out = b.clamp(out, length); }
90825
90826 return out;
90827 };
90828
90829
90830 //// sha256.js
90831
90832 /** @fileOverview Javascript SHA-256 implementation.
90833 *
90834 * An older version of this implementation is available in the public
90835 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
90836 * Stanford University 2008-2010 and BSD-licensed for liability
90837 * reasons.
90838 *
90839 * Special thanks to Aldo Cortesi for pointing out several bugs in
90840 * this code.
90841 *
90842 * @author Emily Stark
90843 * @author Mike Hamburg
90844 * @author Dan Boneh
90845 */
90846
90847 /**
90848 * Context for a SHA-256 operation in progress.
90849 * @constructor
90850 * @class Secure Hash Algorithm, 256 bits.
90851 */
90852 sjcl.hash.sha256 = function (hash) {
90853 if (!this._key[0]) { this._precompute(); }
90854 if (hash) {
90855 this._h = hash._h.slice(0);
90856 this._buffer = hash._buffer.slice(0);
90857 this._length = hash._length;
90858 } else {
90859 this.reset();
90860 }
90861 };
90862
90863 /**
90864 * Hash a string or an array of words.
90865 * @static
90866 * @param {bitArray|String} data the data to hash.
90867 * @return {bitArray} The hash value, an array of 16 big-endian words.
90868 */
90869 sjcl.hash.sha256.hash = function (data) {
90870 return (new sjcl.hash.sha256()).update(data).finalize();
90871 };
90872
90873 sjcl.hash.sha256.prototype = {
90874 /**
90875 * The hash's block size, in bits.
90876 * @constant
90877 */
90878 blockSize: 512,
90879
90880 /**
90881 * Reset the hash state.
90882 * @return this
90883 */
90884 reset:function () {
90885 this._h = this._init.slice(0);
90886 this._buffer = [];
90887 this._length = 0;
90888 return this;
90889 },
90890
90891 /**
90892 * Input several words to the hash.
90893 * @param {bitArray|String} data the data to hash.
90894 * @return this
90895 */
90896 update: function (data) {
90897 if (typeof data === "string") {
90898 data = sjcl.codec.utf8String.toBits(data);
90899 }
90900 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
90901 ol = this._length,
90902 nl = this._length = ol + sjcl.bitArray.bitLength(data);
90903 for (i = 512+ol & -512; i <= nl; i+= 512) {
90904 this._block(b.splice(0,16));
90905 }
90906 return this;
90907 },
90908
90909 /**
90910 * Complete hashing and output the hash value.
90911 * @return {bitArray} The hash value, an array of 8 big-endian words.
90912 */
90913 finalize:function () {
90914 var i, b = this._buffer, h = this._h;
90915
90916 // Round out and push the buffer
90917 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
90918
90919 // Round out the buffer to a multiple of 16 words, less the 2 length words.
90920 for (i = b.length + 2; i & 15; i++) {
90921 b.push(0);
90922 }
90923
90924 // append the length
90925 b.push(Math.floor(this._length / 0x100000000));
90926 b.push(this._length | 0);
90927
90928 while (b.length) {
90929 this._block(b.splice(0,16));
90930 }
90931
90932 this.reset();
90933 return h;
90934 },
90935
90936 /**
90937 * The SHA-256 initialization vector, to be precomputed.
90938 * @private
90939 */
90940 _init:[],
90941 /*
90942 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
90943 */
90944
90945 /**
90946 * The SHA-256 hash key, to be precomputed.
90947 * @private
90948 */
90949 _key:[],
90950 /*
90951 _key:
90952 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
90953 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
90954 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
90955 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
90956 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
90957 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
90958 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
90959 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
90960 */
90961
90962
90963 /**
90964 * Function to precompute _init and _key.
90965 * @private
90966 */
90967 _precompute: function () {
90968 var i = 0, prime = 2, factor;
90969
90970 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
90971
90972 outer: for (; i<64; prime++) {
90973 for (factor=2; factor*factor <= prime; factor++) {
90974 if (prime % factor === 0) {
90975 // not a prime
90976 continue outer;
90977 }
90978 }
90979
90980 if (i<8) {
90981 this._init[i] = frac(Math.pow(prime, 1/2));
90982 }
90983 this._key[i] = frac(Math.pow(prime, 1/3));
90984 i++;
90985 }
90986 },
90987
90988 /**
90989 * Perform one cycle of SHA-256.
90990 * @param {bitArray} words one block of words.
90991 * @private
90992 */
90993 _block:function (words) {
90994 var i, tmp, a, b,
90995 w = words.slice(0),
90996 h = this._h,
90997 k = this._key,
90998 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
90999 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
91000
91001 /* Rationale for placement of |0 :
91002 * If a value can overflow is original 32 bits by a factor of more than a few
91003 * million (2^23 ish), there is a possibility that it might overflow the
91004 * 53-bit mantissa and lose precision.
91005 *
91006 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
91007 * propagates around the loop, and on the hash state h[]. I don't believe
91008 * that the clamps on h4 and on h0 are strictly necessary, but it's close
91009 * (for h4 anyway), and better safe than sorry.
91010 *
91011 * The clamps on h[] are necessary for the output to be correct even in the
91012 * common case and for short inputs.
91013 */
91014 for (i=0; i<64; i++) {
91015 // load up the input word for this round
91016 if (i<16) {
91017 tmp = w[i];
91018 } else {
91019 a = w[(i+1 ) & 15];
91020 b = w[(i+14) & 15];
91021 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
91022 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
91023 w[i&15] + w[(i+9) & 15]) | 0;
91024 }
91025
91026 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
91027
91028 // shift register
91029 h7 = h6; h6 = h5; h5 = h4;
91030 h4 = h3 + tmp | 0;
91031 h3 = h2; h2 = h1; h1 = h0;
91032
91033 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
91034 }
91035
91036 h[0] = h[0]+h0 | 0;
91037 h[1] = h[1]+h1 | 0;
91038 h[2] = h[2]+h2 | 0;
91039 h[3] = h[3]+h3 | 0;
91040 h[4] = h[4]+h4 | 0;
91041 h[5] = h[5]+h5 | 0;
91042 h[6] = h[6]+h6 | 0;
91043 h[7] = h[7]+h7 | 0;
91044 }
91045 };
91046 </script>
91047 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
91048 WORDLISTS["english"] = [
91049 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
91050 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
91051 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
91052 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
91053 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
91054 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
91055 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
91056 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
91057 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
91058 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
91059 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
91060 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
91061 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
91062 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
91063 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
91064 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
91065 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
91066 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
91067 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
91068 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
91069 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
91070 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
91071 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
91072 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
91073 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
91074 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
91075 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
91076 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
91077 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
91078 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
91079 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
91080 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
91081 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
91082 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
91083 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
91084 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
91085 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
91086 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
91087 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
91088 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
91089 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
91090 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
91091 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
91092 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
91093 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
91094 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
91095 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
91096 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
91097 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
91098 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
91099 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
91100 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
91101 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
91102 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
91103 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
91104 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
91105 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
91106 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
91107 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
91108 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
91109 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
91110 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
91111 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
91112 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
91113 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
91114 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
91115 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
91116 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
91117 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
91118 "film","filter","final","find","fine","finger","finish","fire","firm","first",
91119 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
91120 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
91121 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
91122 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
91123 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
91124 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
91125 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
91126 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
91127 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
91128 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
91129 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
91130 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
91131 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
91132 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
91133 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
91134 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
91135 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
91136 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
91137 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
91138 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
91139 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
91140 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
91141 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
91142 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
91143 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
91144 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
91145 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
91146 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
91147 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
91148 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
91149 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
91150 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
91151 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
91152 "liar","liberty","library","license","life","lift","light","like","limb","limit",
91153 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
91154 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
91155 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
91156 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
91157 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
91158 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
91159 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
91160 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
91161 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
91162 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
91163 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
91164 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
91165 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
91166 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
91167 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
91168 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
91169 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
91170 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
91171 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
91172 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
91173 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
91174 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
91175 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
91176 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
91177 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
91178 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
91179 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
91180 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
91181 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
91182 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
91183 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
91184 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
91185 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
91186 "prize","problem","process","produce","profit","program","project","promote","proof","property",
91187 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
91188 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
91189 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
91190 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
91191 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
91192 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
91193 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
91194 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
91195 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
91196 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
91197 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
91198 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
91199 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
91200 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
91201 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
91202 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
91203 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
91204 "scrub","sea","search","season","seat","second","secret","section","security","seed",
91205 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
91206 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
91207 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
91208 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
91209 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
91210 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
91211 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
91212 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
91213 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
91214 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
91215 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
91216 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
91217 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
91218 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
91219 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
91220 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
91221 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
91222 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
91223 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
91224 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
91225 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
91226 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
91227 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
91228 "thank","that","theme","then","theory","there","they","thing","this","thought",
91229 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
91230 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
91231 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
91232 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
91233 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
91234 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
91235 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
91236 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
91237 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
91238 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
91239 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
91240 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
91241 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
91242 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
91243 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
91244 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
91245 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
91246 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
91247 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
91248 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
91249 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
91250 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
91251 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
91252 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
91253 "yellow","you","young","youth","zebra","zero","zone","zoo"]
91254 </script>
91255 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
91256 WORDLISTS["japanese"] = [
91257 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
91258 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
91259 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
91260 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
91261 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
91262 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
91263 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
91264 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
91265 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
91266 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
91267 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
91268 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
91269 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
91270 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
91271 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
91272 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
91273 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
91274 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
91275 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
91276 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
91277 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
91278 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
91279 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
91280 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
91281 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
91282 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
91283 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
91284 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
91285 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
91286 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
91287 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
91288 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
91289 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
91290 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
91291 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
91292 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
91293 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
91294 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
91295 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
91296 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
91297 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
91298 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
91299 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
91300 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
91301 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
91302 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
91303 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
91304 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
91305 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
91306 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
91307 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
91308 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
91309 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
91310 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
91311 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
91312 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
91313 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
91314 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
91315 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
91316 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
91317 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
91318 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
91319 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
91320 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
91321 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
91322 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
91323 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
91324 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
91325 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
91326 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
91327 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
91328 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
91329 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
91330 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
91331 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
91332 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
91333 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
91334 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
91335 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
91336 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
91337 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
91338 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
91339 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
91340 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
91341 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
91342 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
91343 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
91344 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
91345 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
91346 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
91347 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
91348 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
91349 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
91350 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
91351 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
91352 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
91353 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
91354 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
91355 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
91356 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
91357 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
91358 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
91359 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
91360 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
91361 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
91362 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
91363 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
91364 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
91365 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
91366 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
91367 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
91368 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
91369 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
91370 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
91371 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
91372 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
91373 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
91374 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
91375 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
91376 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
91377 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
91378 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
91379 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
91380 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
91381 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
91382 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
91383 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
91384 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
91385 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
91386 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
91387 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
91388 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
91389 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
91390 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
91391 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
91392 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
91393 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
91394 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
91395 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
91396 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
91397 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
91398 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
91399 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
91400 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
91401 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
91402 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
91403 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
91404 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
91405 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
91406 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
91407 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
91408 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
91409 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
91410 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
91411 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
91412 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
91413 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
91414 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
91415 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
91416 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
91417 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
91418 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
91419 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
91420 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
91421 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
91422 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
91423 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
91424 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
91425 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
91426 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
91427 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
91428 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
91429 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
91430 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
91431 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
91432 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
91433 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
91434 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
91435 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
91436 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
91437 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
91438 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
91439 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
91440 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
91441 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
91442 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
91443 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
91444 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
91445 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
91446 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
91447 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
91448 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
91449 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
91450 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
91451 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
91452 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
91453 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
91454 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
91455 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
91456 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
91457 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
91458 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
91459 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
91460 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
91461 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
91462 </script>
91463 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
91464 WORDLISTS["spanish"] = [
91465 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
91466 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
91467 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
91468 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
91469 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
91470 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
91471 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
91472 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
91473 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
91474 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
91475 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
91476 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
91477 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
91478 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
91479 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
91480 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
91481 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
91482 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
91483 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
91484 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
91485 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
91486 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
91487 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
91488 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
91489 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
91490 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
91491 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
91492 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
91493 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
91494 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
91495 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
91496 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
91497 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
91498 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
91499 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
91500 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
91501 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
91502 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
91503 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
91504 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
91505 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
91506 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
91507 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
91508 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
91509 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
91510 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
91511 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
91512 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
91513 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
91514 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
91515 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
91516 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
91517 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
91518 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
91519 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
91520 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
91521 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
91522 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
91523 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
91524 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
91525 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
91526 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
91527 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
91528 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
91529 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
91530 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
91531 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
91532 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
91533 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
91534 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
91535 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
91536 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
91537 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
91538 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
91539 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
91540 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
91541 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
91542 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
91543 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
91544 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
91545 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
91546 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
91547 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
91548 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
91549 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
91550 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
91551 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
91552 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
91553 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
91554 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
91555 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
91556 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
91557 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
91558 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
91559 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
91560 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
91561 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
91562 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
91563 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
91564 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
91565 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
91566 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
91567 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
91568 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
91569 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
91570 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
91571 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
91572 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
91573 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
91574 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
91575 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
91576 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
91577 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
91578 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
91579 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
91580 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
91581 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
91582 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
91583 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
91584 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
91585 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
91586 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
91587 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
91588 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
91589 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
91590 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
91591 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
91592 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
91593 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
91594 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
91595 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
91596 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
91597 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
91598 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
91599 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
91600 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
91601 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
91602 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
91603 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
91604 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
91605 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
91606 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
91607 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
91608 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
91609 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
91610 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
91611 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
91612 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
91613 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
91614 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
91615 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
91616 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
91617 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
91618 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
91619 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
91620 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
91621 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
91622 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
91623 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
91624 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
91625 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
91626 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
91627 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
91628 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
91629 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
91630 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
91631 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
91632 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
91633 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
91634 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
91635 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
91636 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
91637 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
91638 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
91639 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
91640 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
91641 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
91642 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
91643 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
91644 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
91645 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
91646 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
91647 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
91648 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
91649 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
91650 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
91651 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
91652 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
91653 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
91654 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
91655 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
91656 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
91657 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
91658 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
91659 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
91660 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
91661 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
91662 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
91663 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
91664 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
91665 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
91666 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
91667 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
91668 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
91669 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
91670 </script>
91671 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
91672 WORDLISTS["chinese_simplified"] = [
91673 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
91674 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
91675 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
91676 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
91677 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
91678 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
91679 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
91680 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
91681 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
91682 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
91683 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
91684 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
91685 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
91686 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
91687 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
91688 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
91689 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
91690 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
91691 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
91692 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
91693 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
91694 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
91695 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
91696 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
91697 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
91698 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
91699 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
91700 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
91701 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
91702 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
91703 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
91704 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
91705 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
91706 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
91707 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
91708 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
91709 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
91710 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
91711 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
91712 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
91713 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
91714 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
91715 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
91716 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
91717 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
91718 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
91719 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
91720 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
91721 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
91722 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
91723 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
91724 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
91725 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
91726 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
91727 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
91728 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
91729 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
91730 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
91731 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
91732 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
91733 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
91734 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
91735 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
91736 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
91737 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
91738 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
91739 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
91740 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
91741 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
91742 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
91743 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
91744 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
91745 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
91746 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
91747 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
91748 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
91749 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
91750 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
91751 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
91752 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
91753 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
91754 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
91755 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
91756 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
91757 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
91758 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
91759 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
91760 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
91761 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
91762 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
91763 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
91764 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
91765 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
91766 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
91767 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
91768 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
91769 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
91770 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
91771 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
91772 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
91773 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
91774 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
91775 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
91776 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
91777 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
91778 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
91779 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
91780 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
91781 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
91782 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
91783 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
91784 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
91785 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
91786 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
91787 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
91788 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
91789 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
91790 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
91791 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
91792 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
91793 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
91794 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
91795 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
91796 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
91797 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
91798 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
91799 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
91800 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
91801 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
91802 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
91803 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
91804 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
91805 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
91806 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
91807 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
91808 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
91809 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
91810 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
91811 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
91812 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
91813 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
91814 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
91815 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
91816 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
91817 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
91818 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
91819 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
91820 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
91821 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
91822 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
91823 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
91824 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
91825 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
91826 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
91827 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
91828 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
91829 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
91830 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
91831 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
91832 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
91833 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
91834 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
91835 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
91836 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
91837 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
91838 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
91839 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
91840 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
91841 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
91842 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
91843 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
91844 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
91845 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
91846 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
91847 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
91848 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
91849 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
91850 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
91851 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
91852 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
91853 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
91854 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
91855 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
91856 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
91857 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
91858 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
91859 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
91860 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
91861 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
91862 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
91863 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
91864 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
91865 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
91866 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
91867 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
91868 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
91869 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
91870 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
91871 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
91872 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
91873 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
91874 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
91875 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
91876 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
91877 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
91878 </script>
91879 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
91880 WORDLISTS["chinese_traditional"] = [
91881 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
91882 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
91883 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
91884 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
91885 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
91886 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
91887 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
91888 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
91889 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
91890 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
91891 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
91892 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
91893 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
91894 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
91895 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
91896 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
91897 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
91898 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
91899 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
91900 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
91901 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
91902 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
91903 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
91904 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
91905 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
91906 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
91907 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
91908 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
91909 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
91910 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
91911 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
91912 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
91913 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
91914 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
91915 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
91916 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
91917 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
91918 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
91919 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
91920 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
91921 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
91922 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
91923 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
91924 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
91925 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
91926 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
91927 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
91928 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
91929 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
91930 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
91931 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
91932 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
91933 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
91934 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
91935 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
91936 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
91937 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
91938 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
91939 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
91940 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
91941 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
91942 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
91943 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
91944 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
91945 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
91946 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
91947 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
91948 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
91949 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
91950 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
91951 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
91952 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
91953 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
91954 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
91955 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
91956 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
91957 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
91958 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
91959 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
91960 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
91961 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
91962 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
91963 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
91964 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
91965 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
91966 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
91967 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
91968 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
91969 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
91970 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
91971 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
91972 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
91973 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
91974 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
91975 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
91976 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
91977 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
91978 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
91979 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
91980 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
91981 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
91982 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
91983 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
91984 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
91985 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
91986 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
91987 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
91988 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
91989 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
91990 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
91991 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
91992 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
91993 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
91994 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
91995 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
91996 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
91997 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
91998 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
91999 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
92000 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
92001 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
92002 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
92003 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
92004 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
92005 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
92006 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
92007 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
92008 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
92009 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
92010 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
92011 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
92012 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
92013 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
92014 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
92015 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
92016 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
92017 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
92018 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
92019 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
92020 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
92021 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
92022 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
92023 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
92024 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
92025 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
92026 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
92027 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
92028 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
92029 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
92030 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
92031 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
92032 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
92033 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
92034 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
92035 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
92036 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
92037 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
92038 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
92039 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
92040 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
92041 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
92042 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
92043 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
92044 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
92045 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
92046 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
92047 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
92048 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
92049 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
92050 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
92051 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
92052 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
92053 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
92054 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
92055 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
92056 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
92057 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
92058 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
92059 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
92060 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
92061 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
92062 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
92063 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
92064 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
92065 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
92066 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
92067 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
92068 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
92069 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
92070 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
92071 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
92072 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
92073 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
92074 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
92075 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
92076 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
92077 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
92078 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
92079 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
92080 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
92081 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
92082 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
92083 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
92084 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
92085 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
92086 </script>
92087 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
92088 WORDLISTS["french"] = [
92089 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
92090 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
92091 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
92092 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
92093 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
92094 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
92095 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
92096 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
92097 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
92098 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
92099 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
92100 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
92101 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
92102 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
92103 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
92104 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
92105 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
92106 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
92107 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
92108 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
92109 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
92110 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
92111 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
92112 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
92113 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
92114 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
92115 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
92116 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
92117 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
92118 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
92119 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
92120 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
92121 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
92122 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
92123 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
92124 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
92125 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
92126 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
92127 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
92128 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
92129 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
92130 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
92131 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
92132 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
92133 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
92134 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
92135 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
92136 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
92137 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
92138 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
92139 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
92140 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
92141 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
92142 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
92143 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
92144 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
92145 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
92146 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
92147 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
92148 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
92149 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
92150 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
92151 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
92152 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
92153 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
92154 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
92155 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
92156 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
92157 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
92158 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
92159 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
92160 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
92161 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
92162 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
92163 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
92164 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
92165 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
92166 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
92167 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
92168 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
92169 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
92170 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
92171 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
92172 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
92173 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
92174 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
92175 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
92176 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
92177 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
92178 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
92179 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
92180 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
92181 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
92182 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
92183 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
92184 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
92185 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
92186 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
92187 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
92188 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
92189 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
92190 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
92191 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
92192 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
92193 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
92194 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
92195 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
92196 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
92197 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
92198 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
92199 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
92200 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
92201 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
92202 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
92203 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
92204 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
92205 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
92206 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
92207 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
92208 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
92209 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
92210 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
92211 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
92212 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
92213 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
92214 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
92215 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
92216 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
92217 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
92218 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
92219 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
92220 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
92221 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
92222 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
92223 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
92224 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
92225 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
92226 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
92227 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
92228 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
92229 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
92230 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
92231 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
92232 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
92233 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
92234 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
92235 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
92236 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
92237 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
92238 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
92239 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
92240 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
92241 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
92242 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
92243 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
92244 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
92245 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
92246 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
92247 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
92248 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
92249 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
92250 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
92251 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
92252 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
92253 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
92254 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
92255 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
92256 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
92257 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
92258 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
92259 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
92260 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
92261 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
92262 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
92263 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
92264 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
92265 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
92266 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
92267 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
92268 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
92269 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
92270 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
92271 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
92272 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
92273 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
92274 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
92275 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
92276 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
92277 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
92278 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
92279 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
92280 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
92281 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
92282 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
92283 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
92284 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
92285 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
92286 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
92287 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
92288 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
92289 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
92290 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
92291 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
92292 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
92293 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
92294 </script>
92295 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
92296 WORDLISTS["italian"] = [
92297 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
92298 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
92299 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
92300 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
92301 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
92302 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
92303 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
92304 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
92305 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
92306 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
92307 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
92308 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
92309 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
92310 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
92311 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
92312 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
92313 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
92314 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
92315 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
92316 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
92317 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
92318 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
92319 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
92320 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
92321 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
92322 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
92323 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
92324 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
92325 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
92326 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
92327 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
92328 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
92329 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
92330 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
92331 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
92332 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
92333 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
92334 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
92335 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
92336 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
92337 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
92338 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
92339 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
92340 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
92341 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
92342 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
92343 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
92344 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
92345 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
92346 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
92347 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
92348 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
92349 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
92350 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
92351 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
92352 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
92353 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
92354 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
92355 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
92356 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
92357 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
92358 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
92359 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
92360 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
92361 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
92362 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
92363 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
92364 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
92365 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
92366 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
92367 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
92368 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
92369 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
92370 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
92371 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
92372 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
92373 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
92374 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
92375 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
92376 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
92377 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
92378 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
92379 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
92380 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
92381 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
92382 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
92383 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
92384 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
92385 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
92386 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
92387 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
92388 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
92389 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
92390 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
92391 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
92392 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
92393 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
92394 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
92395 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
92396 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
92397 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
92398 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
92399 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
92400 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
92401 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
92402 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
92403 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
92404 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
92405 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
92406 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
92407 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
92408 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
92409 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
92410 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
92411 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
92412 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
92413 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
92414 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
92415 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
92416 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
92417 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
92418 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
92419 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
92420 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
92421 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
92422 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
92423 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
92424 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
92425 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
92426 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
92427 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
92428 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
92429 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
92430 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
92431 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
92432 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
92433 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
92434 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
92435 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
92436 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
92437 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
92438 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
92439 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
92440 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
92441 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
92442 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
92443 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
92444 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
92445 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
92446 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
92447 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
92448 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
92449 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
92450 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
92451 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
92452 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
92453 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
92454 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
92455 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
92456 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
92457 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
92458 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
92459 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
92460 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
92461 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
92462 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
92463 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
92464 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
92465 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
92466 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
92467 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
92468 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
92469 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
92470 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
92471 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
92472 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
92473 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
92474 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
92475 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
92476 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
92477 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
92478 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
92479 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
92480 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
92481 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
92482 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
92483 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
92484 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
92485 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
92486 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
92487 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
92488 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
92489 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
92490 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
92491 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
92492 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
92493 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
92494 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
92495 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
92496 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
92497 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
92498 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
92499 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
92500 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
92501 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
92502 </script>
92503 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
92504 WORDLISTS["korean"] = [
92505 "가격",
92506 "가끔",
92507 "가난",
92508 "가능",
92509 "가득",
92510 "가르침",
92511 "가뭄",
92512 "가방",
92513 "가상",
92514 "가슴",
92515 "가운데",
92516 "가을",
92517 "가이드",
92518 "가입",
92519 "가장",
92520 "가정",
92521 "가족",
92522 "가죽",
92523 "각오",
92524 "각자",
92525 "간격",
92526 "간부",
92527 "간섭",
92528 "간장",
92529 "간접",
92530 "간판",
92531 "갈등",
92532 "갈비",
92533 "갈색",
92534 "갈증",
92535 "감각",
92536 "감기",
92537 "감소",
92538 "감수성",
92539 "감자",
92540 "감정",
92541 "갑자기",
92542 "강남",
92543 "강당",
92544 "강도",
92545 "강력히",
92546 "강변",
92547 "강북",
92548 "강사",
92549 "강수량",
92550 "강아지",
92551 "강원도",
92552 "강의",
92553 "강제",
92554 "강조",
92555 "같이",
92556 "개구리",
92557 "개나리",
92558 "개방",
92559 "개별",
92560 "개선",
92561 "개성",
92562 "개인",
92563 "객관적",
92564 "거실",
92565 "거액",
92566 "거울",
92567 "거짓",
92568 "거품",
92569 "걱정",
92570 "건강",
92571 "건물",
92572 "건설",
92573 "건조",
92574 "건축",
92575 "걸음",
92576 "검사",
92577 "검토",
92578 "게시판",
92579 "게임",
92580 "겨울",
92581 "견해",
92582 "결과",
92583 "결국",
92584 "결론",
92585 "결석",
92586 "결승",
92587 "결심",
92588 "결정",
92589 "결혼",
92590 "경계",
92591 "경고",
92592 "경기",
92593 "경력",
92594 "경복궁",
92595 "경비",
92596 "경상도",
92597 "경영",
92598 "경우",
92599 "경쟁",
92600 "경제",
92601 "경주",
92602 "경찰",
92603 "경치",
92604 "경향",
92605 "경험",
92606 "계곡",
92607 "계단",
92608 "계란",
92609 "계산",
92610 "계속",
92611 "계약",
92612 "계절",
92613 "계층",
92614 "계획",
92615 "고객",
92616 "고구려",
92617 "고궁",
92618 "고급",
92619 "고등학생",
92620 "고무신",
92621 "고민",
92622 "고양이",
92623 "고장",
92624 "고전",
92625 "고집",
92626 "고춧가루",
92627 "고통",
92628 "고향",
92629 "곡식",
92630 "골목",
92631 "골짜기",
92632 "골프",
92633 "공간",
92634 "공개",
92635 "공격",
92636 "공군",
92637 "공급",
92638 "공기",
92639 "공동",
92640 "공무원",
92641 "공부",
92642 "공사",
92643 "공식",
92644 "공업",
92645 "공연",
92646 "공원",
92647 "공장",
92648 "공짜",
92649 "공책",
92650 "공통",
92651 "공포",
92652 "공항",
92653 "공휴일",
92654 "과목",
92655 "과일",
92656 "과장",
92657 "과정",
92658 "과학",
92659 "관객",
92660 "관계",
92661 "관광",
92662 "관념",
92663 "관람",
92664 "관련",
92665 "관리",
92666 "관습",
92667 "관심",
92668 "관점",
92669 "관찰",
92670 "광경",
92671 "광고",
92672 "광장",
92673 "광주",
92674 "괴로움",
92675 "굉장히",
92676 "교과서",
92677 "교문",
92678 "교복",
92679 "교실",
92680 "교양",
92681 "교육",
92682 "교장",
92683 "교직",
92684 "교통",
92685 "교환",
92686 "교훈",
92687 "구경",
92688 "구름",
92689 "구멍",
92690 "구별",
92691 "구분",
92692 "구석",
92693 "구성",
92694 "구속",
92695 "구역",
92696 "구입",
92697 "구청",
92698 "구체적",
92699 "국가",
92700 "국기",
92701 "국내",
92702 "국립",
92703 "국물",
92704 "국민",
92705 "국수",
92706 "국어",
92707 "국왕",
92708 "국적",
92709 "국제",
92710 "국회",
92711 "군대",
92712 "군사",
92713 "군인",
92714 "궁극적",
92715 "권리",
92716 "권위",
92717 "권투",
92718 "귀국",
92719 "귀신",
92720 "규정",
92721 "규칙",
92722 "균형",
92723 "그날",
92724 "그냥",
92725 "그늘",
92726 "그러나",
92727 "그룹",
92728 "그릇",
92729 "그림",
92730 "그제서야",
92731 "그토록",
92732 "극복",
92733 "극히",
92734 "근거",
92735 "근교",
92736 "근래",
92737 "근로",
92738 "근무",
92739 "근본",
92740 "근원",
92741 "근육",
92742 "근처",
92743 "글씨",
92744 "글자",
92745 "금강산",
92746 "금고",
92747 "금년",
92748 "금메달",
92749 "금액",
92750 "금연",
92751 "금요일",
92752 "금지",
92753 "긍정적",
92754 "기간",
92755 "기관",
92756 "기념",
92757 "기능",
92758 "기독교",
92759 "기둥",
92760 "기록",
92761 "기름",
92762 "기법",
92763 "기본",
92764 "기분",
92765 "기쁨",
92766 "기숙사",
92767 "기술",
92768 "기억",
92769 "기업",
92770 "기온",
92771 "기운",
92772 "기원",
92773 "기적",
92774 "기준",
92775 "기침",
92776 "기혼",
92777 "기획",
92778 "긴급",
92779 "긴장",
92780 "길이",
92781 "김밥",
92782 "김치",
92783 "김포공항",
92784 "깍두기",
92785 "깜빡",
92786 "깨달음",
92787 "깨소금",
92788 "껍질",
92789 "꼭대기",
92790 "꽃잎",
92791 "나들이",
92792 "나란히",
92793 "나머지",
92794 "나물",
92795 "나침반",
92796 "나흘",
92797 "낙엽",
92798 "난방",
92799 "날개",
92800 "날씨",
92801 "날짜",
92802 "남녀",
92803 "남대문",
92804 "남매",
92805 "남산",
92806 "남자",
92807 "남편",
92808 "남학생",
92809 "낭비",
92810 "낱말",
92811 "내년",
92812 "내용",
92813 "내일",
92814 "냄비",
92815 "냄새",
92816 "냇물",
92817 "냉동",
92818 "냉면",
92819 "냉방",
92820 "냉장고",
92821 "넥타이",
92822 "넷째",
92823 "노동",
92824 "노란색",
92825 "노력",
92826 "노인",
92827 "녹음",
92828 "녹차",
92829 "녹화",
92830 "논리",
92831 "논문",
92832 "논쟁",
92833 "놀이",
92834 "농구",
92835 "농담",
92836 "농민",
92837 "농부",
92838 "농업",
92839 "농장",
92840 "농촌",
92841 "높이",
92842 "눈동자",
92843 "눈물",
92844 "눈썹",
92845 "뉴욕",
92846 "느낌",
92847 "늑대",
92848 "능동적",
92849 "능력",
92850 "다방",
92851 "다양성",
92852 "다음",
92853 "다이어트",
92854 "다행",
92855 "단계",
92856 "단골",
92857 "단독",
92858 "단맛",
92859 "단순",
92860 "단어",
92861 "단위",
92862 "단점",
92863 "단체",
92864 "단추",
92865 "단편",
92866 "단풍",
92867 "달걀",
92868 "달러",
92869 "달력",
92870 "달리",
92871 "닭고기",
92872 "담당",
92873 "담배",
92874 "담요",
92875 "담임",
92876 "답변",
92877 "답장",
92878 "당근",
92879 "당분간",
92880 "당연히",
92881 "당장",
92882 "대규모",
92883 "대낮",
92884 "대단히",
92885 "대답",
92886 "대도시",
92887 "대략",
92888 "대량",
92889 "대륙",
92890 "대문",
92891 "대부분",
92892 "대신",
92893 "대응",
92894 "대장",
92895 "대전",
92896 "대접",
92897 "대중",
92898 "대책",
92899 "대출",
92900 "대충",
92901 "대통령",
92902 "대학",
92903 "대한민국",
92904 "대합실",
92905 "대형",
92906 "덩어리",
92907 "데이트",
92908 "도대체",
92909 "도덕",
92910 "도둑",
92911 "도망",
92912 "도서관",
92913 "도심",
92914 "도움",
92915 "도입",
92916 "도자기",
92917 "도저히",
92918 "도전",
92919 "도중",
92920 "도착",
92921 "독감",
92922 "독립",
92923 "독서",
92924 "독일",
92925 "독창적",
92926 "동화책",
92927 "뒷모습",
92928 "뒷산",
92929 "딸아이",
92930 "마누라",
92931 "마늘",
92932 "마당",
92933 "마라톤",
92934 "마련",
92935 "마무리",
92936 "마사지",
92937 "마약",
92938 "마요네즈",
92939 "마을",
92940 "마음",
92941 "마이크",
92942 "마중",
92943 "마지막",
92944 "마찬가지",
92945 "마찰",
92946 "마흔",
92947 "막걸리",
92948 "막내",
92949 "막상",
92950 "만남",
92951 "만두",
92952 "만세",
92953 "만약",
92954 "만일",
92955 "만점",
92956 "만족",
92957 "만화",
92958 "많이",
92959 "말기",
92960 "말씀",
92961 "말투",
92962 "맘대로",
92963 "망원경",
92964 "매년",
92965 "매달",
92966 "매력",
92967 "매번",
92968 "매스컴",
92969 "매일",
92970 "매장",
92971 "맥주",
92972 "먹이",
92973 "먼저",
92974 "먼지",
92975 "멀리",
92976 "메일",
92977 "며느리",
92978 "며칠",
92979 "면담",
92980 "멸치",
92981 "명단",
92982 "명령",
92983 "명예",
92984 "명의",
92985 "명절",
92986 "명칭",
92987 "명함",
92988 "모금",
92989 "모니터",
92990 "모델",
92991 "모든",
92992 "모범",
92993 "모습",
92994 "모양",
92995 "모임",
92996 "모조리",
92997 "모집",
92998 "모퉁이",
92999 "목걸이",
93000 "목록",
93001 "목사",
93002 "목소리",
93003 "목숨",
93004 "목적",
93005 "목표",
93006 "몰래",
93007 "몸매",
93008 "몸무게",
93009 "몸살",
93010 "몸속",
93011 "몸짓",
93012 "몸통",
93013 "몹시",
93014 "무관심",
93015 "무궁화",
93016 "무더위",
93017 "무덤",
93018 "무릎",
93019 "무슨",
93020 "무엇",
93021 "무역",
93022 "무용",
93023 "무조건",
93024 "무지개",
93025 "무척",
93026 "문구",
93027 "문득",
93028 "문법",
93029 "문서",
93030 "문제",
93031 "문학",
93032 "문화",
93033 "물가",
93034 "물건",
93035 "물결",
93036 "물고기",
93037 "물론",
93038 "물리학",
93039 "물음",
93040 "물질",
93041 "물체",
93042 "미국",
93043 "미디어",
93044 "미사일",
93045 "미술",
93046 "미역",
93047 "미용실",
93048 "미움",
93049 "미인",
93050 "미팅",
93051 "미혼",
93052 "민간",
93053 "민족",
93054 "민주",
93055 "믿음",
93056 "밀가루",
93057 "밀리미터",
93058 "밑바닥",
93059 "바가지",
93060 "바구니",
93061 "바나나",
93062 "바늘",
93063 "바닥",
93064 "바닷가",
93065 "바람",
93066 "바이러스",
93067 "바탕",
93068 "박물관",
93069 "박사",
93070 "박수",
93071 "반대",
93072 "반드시",
93073 "반말",
93074 "반발",
93075 "반성",
93076 "반응",
93077 "반장",
93078 "반죽",
93079 "반지",
93080 "반찬",
93081 "받침",
93082 "발가락",
93083 "발걸음",
93084 "발견",
93085 "발달",
93086 "발레",
93087 "발목",
93088 "발바닥",
93089 "발생",
93090 "발음",
93091 "발자국",
93092 "발전",
93093 "발톱",
93094 "발표",
93095 "밤하늘",
93096 "밥그릇",
93097 "밥맛",
93098 "밥상",
93099 "밥솥",
93100 "방금",
93101 "방면",
93102 "방문",
93103 "방바닥",
93104 "방법",
93105 "방송",
93106 "방식",
93107 "방안",
93108 "방울",
93109 "방지",
93110 "방학",
93111 "방해",
93112 "방향",
93113 "배경",
93114 "배꼽",
93115 "배달",
93116 "배드민턴",
93117 "백두산",
93118 "백색",
93119 "백성",
93120 "백인",
93121 "백제",
93122 "백화점",
93123 "버릇",
93124 "버섯",
93125 "버튼",
93126 "번개",
93127 "번역",
93128 "번지",
93129 "번호",
93130 "벌금",
93131 "벌레",
93132 "벌써",
93133 "범위",
93134 "범인",
93135 "범죄",
93136 "법률",
93137 "법원",
93138 "법적",
93139 "법칙",
93140 "베이징",
93141 "벨트",
93142 "변경",
93143 "변동",
93144 "변명",
93145 "변신",
93146 "변호사",
93147 "변화",
93148 "별도",
93149 "별명",
93150 "별일",
93151 "병실",
93152 "병아리",
93153 "병원",
93154 "보관",
93155 "보너스",
93156 "보라색",
93157 "보람",
93158 "보름",
93159 "보상",
93160 "보안",
93161 "보자기",
93162 "보장",
93163 "보전",
93164 "보존",
93165 "보통",
93166 "보편적",
93167 "보험",
93168 "복도",
93169 "복사",
93170 "복숭아",
93171 "복습",
93172 "볶음",
93173 "본격적",
93174 "본래",
93175 "본부",
93176 "본사",
93177 "본성",
93178 "본인",
93179 "본질",
93180 "볼펜",
93181 "봉사",
93182 "봉지",
93183 "봉투",
93184 "부근",
93185 "부끄러움",
93186 "부담",
93187 "부동산",
93188 "부문",
93189 "부분",
93190 "부산",
93191 "부상",
93192 "부엌",
93193 "부인",
93194 "부작용",
93195 "부장",
93196 "부정",
93197 "부족",
93198 "부지런히",
93199 "부친",
93200 "부탁",
93201 "부품",
93202 "부회장",
93203 "북부",
93204 "북한",
93205 "분노",
93206 "분량",
93207 "분리",
93208 "분명",
93209 "분석",
93210 "분야",
93211 "분위기",
93212 "분필",
93213 "분홍색",
93214 "불고기",
93215 "불과",
93216 "불교",
93217 "불꽃",
93218 "불만",
93219 "불법",
93220 "불빛",
93221 "불안",
93222 "불이익",
93223 "불행",
93224 "브랜드",
93225 "비극",
93226 "비난",
93227 "비닐",
93228 "비둘기",
93229 "비디오",
93230 "비로소",
93231 "비만",
93232 "비명",
93233 "비밀",
93234 "비바람",
93235 "비빔밥",
93236 "비상",
93237 "비용",
93238 "비율",
93239 "비중",
93240 "비타민",
93241 "비판",
93242 "빌딩",
93243 "빗물",
93244 "빗방울",
93245 "빗줄기",
93246 "빛깔",
93247 "빨간색",
93248 "빨래",
93249 "빨리",
93250 "사건",
93251 "사계절",
93252 "사나이",
93253 "사냥",
93254 "사람",
93255 "사랑",
93256 "사립",
93257 "사모님",
93258 "사물",
93259 "사방",
93260 "사상",
93261 "사생활",
93262 "사설",
93263 "사슴",
93264 "사실",
93265 "사업",
93266 "사용",
93267 "사월",
93268 "사장",
93269 "사전",
93270 "사진",
93271 "사촌",
93272 "사춘기",
93273 "사탕",
93274 "사투리",
93275 "사흘",
93276 "산길",
93277 "산부인과",
93278 "산업",
93279 "산책",
93280 "살림",
93281 "살인",
93282 "살짝",
93283 "삼계탕",
93284 "삼국",
93285 "삼십",
93286 "삼월",
93287 "삼촌",
93288 "상관",
93289 "상금",
93290 "상대",
93291 "상류",
93292 "상반기",
93293 "상상",
93294 "상식",
93295 "상업",
93296 "상인",
93297 "상자",
93298 "상점",
93299 "상처",
93300 "상추",
93301 "상태",
93302 "상표",
93303 "상품",
93304 "상황",
93305 "새벽",
93306 "색깔",
93307 "색연필",
93308 "생각",
93309 "생명",
93310 "생물",
93311 "생방송",
93312 "생산",
93313 "생선",
93314 "생신",
93315 "생일",
93316 "생활",
93317 "서랍",
93318 "서른",
93319 "서명",
93320 "서민",
93321 "서비스",
93322 "서양",
93323 "서울",
93324 "서적",
93325 "서점",
93326 "서쪽",
93327 "서클",
93328 "석사",
93329 "석유",
93330 "선거",
93331 "선물",
93332 "선배",
93333 "선생",
93334 "선수",
93335 "선원",
93336 "선장",
93337 "선전",
93338 "선택",
93339 "선풍기",
93340 "설거지",
93341 "설날",
93342 "설렁탕",
93343 "설명",
93344 "설문",
93345 "설사",
93346 "설악산",
93347 "설치",
93348 "설탕",
93349 "섭씨",
93350 "성공",
93351 "성당",
93352 "성명",
93353 "성별",
93354 "성인",
93355 "성장",
93356 "성적",
93357 "성질",
93358 "성함",
93359 "세금",
93360 "세미나",
93361 "세상",
93362 "세월",
93363 "세종대왕",
93364 "세탁",
93365 "센터",
93366 "센티미터",
93367 "셋째",
93368 "소규모",
93369 "소극적",
93370 "소금",
93371 "소나기",
93372 "소년",
93373 "소득",
93374 "소망",
93375 "소문",
93376 "소설",
93377 "소속",
93378 "소아과",
93379 "소용",
93380 "소원",
93381 "소음",
93382 "소중히",
93383 "소지품",
93384 "소질",
93385 "소풍",
93386 "소형",
93387 "속담",
93388 "속도",
93389 "속옷",
93390 "손가락",
93391 "손길",
93392 "손녀",
93393 "손님",
93394 "손등",
93395 "손목",
93396 "손뼉",
93397 "손실",
93398 "손질",
93399 "손톱",
93400 "손해",
93401 "솔직히",
93402 "솜씨",
93403 "송아지",
93404 "송이",
93405 "송편",
93406 "쇠고기",
93407 "쇼핑",
93408 "수건",
93409 "수년",
93410 "수단",
93411 "수돗물",
93412 "수동적",
93413 "수면",
93414 "수명",
93415 "수박",
93416 "수상",
93417 "수석",
93418 "수술",
93419 "수시로",
93420 "수업",
93421 "수염",
93422 "수영",
93423 "수입",
93424 "수준",
93425 "수집",
93426 "수출",
93427 "수컷",
93428 "수필",
93429 "수학",
93430 "수험생",
93431 "수화기",
93432 "숙녀",
93433 "숙소",
93434 "숙제",
93435 "순간",
93436 "순서",
93437 "순수",
93438 "순식간",
93439 "순위",
93440 "숟가락",
93441 "술병",
93442 "술집",
93443 "숫자",
93444 "스님",
93445 "스물",
93446 "스스로",
93447 "스승",
93448 "스웨터",
93449 "스위치",
93450 "스케이트",
93451 "스튜디오",
93452 "스트레스",
93453 "스포츠",
93454 "슬쩍",
93455 "슬픔",
93456 "습관",
93457 "습기",
93458 "승객",
93459 "승리",
93460 "승부",
93461 "승용차",
93462 "승진",
93463 "시각",
93464 "시간",
93465 "시골",
93466 "시금치",
93467 "시나리오",
93468 "시댁",
93469 "시리즈",
93470 "시멘트",
93471 "시민",
93472 "시부모",
93473 "시선",
93474 "시설",
93475 "시스템",
93476 "시아버지",
93477 "시어머니",
93478 "시월",
93479 "시인",
93480 "시일",
93481 "시작",
93482 "시장",
93483 "시절",
93484 "시점",
93485 "시중",
93486 "시즌",
93487 "시집",
93488 "시청",
93489 "시합",
93490 "시험",
93491 "식구",
93492 "식기",
93493 "식당",
93494 "식량",
93495 "식료품",
93496 "식물",
93497 "식빵",
93498 "식사",
93499 "식생활",
93500 "식초",
93501 "식탁",
93502 "식품",
93503 "신고",
93504 "신규",
93505 "신념",
93506 "신문",
93507 "신발",
93508 "신비",
93509 "신사",
93510 "신세",
93511 "신용",
93512 "신제품",
93513 "신청",
93514 "신체",
93515 "신화",
93516 "실감",
93517 "실내",
93518 "실력",
93519 "실례",
93520 "실망",
93521 "실수",
93522 "실습",
93523 "실시",
93524 "실장",
93525 "실정",
93526 "실질적",
93527 "실천",
93528 "실체",
93529 "실컷",
93530 "실태",
93531 "실패",
93532 "실험",
93533 "실현",
93534 "심리",
93535 "심부름",
93536 "심사",
93537 "심장",
93538 "심정",
93539 "심판",
93540 "쌍둥이",
93541 "씨름",
93542 "씨앗",
93543 "아가씨",
93544 "아나운서",
93545 "아드님",
93546 "아들",
93547 "아쉬움",
93548 "아스팔트",
93549 "아시아",
93550 "아울러",
93551 "아저씨",
93552 "아줌마",
93553 "아직",
93554 "아침",
93555 "아파트",
93556 "아프리카",
93557 "아픔",
93558 "아홉",
93559 "아흔",
93560 "악기",
93561 "악몽",
93562 "악수",
93563 "안개",
93564 "안경",
93565 "안과",
93566 "안내",
93567 "안녕",
93568 "안동",
93569 "안방",
93570 "안부",
93571 "안주",
93572 "알루미늄",
93573 "알코올",
93574 "암시",
93575 "암컷",
93576 "압력",
93577 "앞날",
93578 "앞문",
93579 "애인",
93580 "애정",
93581 "액수",
93582 "앨범",
93583 "야간",
93584 "야단",
93585 "야옹",
93586 "약간",
93587 "약국",
93588 "약속",
93589 "약수",
93590 "약점",
93591 "약품",
93592 "약혼녀",
93593 "양념",
93594 "양력",
93595 "양말",
93596 "양배추",
93597 "양주",
93598 "양파",
93599 "어둠",
93600 "어려움",
93601 "어른",
93602 "어젯밤",
93603 "어쨌든",
93604 "어쩌다가",
93605 "어쩐지",
93606 "언니",
93607 "언덕",
93608 "언론",
93609 "언어",
93610 "얼굴",
93611 "얼른",
93612 "얼음",
93613 "얼핏",
93614 "엄마",
93615 "업무",
93616 "업종",
93617 "업체",
93618 "엉덩이",
93619 "엉망",
93620 "엉터리",
93621 "엊그제",
93622 "에너지",
93623 "에어컨",
93624 "엔진",
93625 "여건",
93626 "여고생",
93627 "여관",
93628 "여군",
93629 "여권",
93630 "여대생",
93631 "여덟",
93632 "여동생",
93633 "여든",
93634 "여론",
93635 "여름",
93636 "여섯",
93637 "여성",
93638 "여왕",
93639 "여인",
93640 "여전히",
93641 "여직원",
93642 "여학생",
93643 "여행",
93644 "역사",
93645 "역시",
93646 "역할",
93647 "연결",
93648 "연구",
93649 "연극",
93650 "연기",
93651 "연락",
93652 "연설",
93653 "연세",
93654 "연속",
93655 "연습",
93656 "연애",
93657 "연예인",
93658 "연인",
93659 "연장",
93660 "연주",
93661 "연출",
93662 "연필",
93663 "연합",
93664 "연휴",
93665 "열기",
93666 "열매",
93667 "열쇠",
93668 "열심히",
93669 "열정",
93670 "열차",
93671 "열흘",
93672 "염려",
93673 "엽서",
93674 "영국",
93675 "영남",
93676 "영상",
93677 "영양",
93678 "영역",
93679 "영웅",
93680 "영원히",
93681 "영하",
93682 "영향",
93683 "영혼",
93684 "영화",
93685 "옆구리",
93686 "옆방",
93687 "옆집",
93688 "예감",
93689 "예금",
93690 "예방",
93691 "예산",
93692 "예상",
93693 "예선",
93694 "예술",
93695 "예습",
93696 "예식장",
93697 "예약",
93698 "예전",
93699 "예절",
93700 "예정",
93701 "예컨대",
93702 "옛날",
93703 "오늘",
93704 "오락",
93705 "오랫동안",
93706 "오렌지",
93707 "오로지",
93708 "오른발",
93709 "오븐",
93710 "오십",
93711 "오염",
93712 "오월",
93713 "오전",
93714 "오직",
93715 "오징어",
93716 "오페라",
93717 "오피스텔",
93718 "오히려",
93719 "옥상",
93720 "옥수수",
93721 "온갖",
93722 "온라인",
93723 "온몸",
93724 "온종일",
93725 "온통",
93726 "올가을",
93727 "올림픽",
93728 "올해",
93729 "옷차림",
93730 "와이셔츠",
93731 "와인",
93732 "완성",
93733 "완전",
93734 "왕비",
93735 "왕자",
93736 "왜냐하면",
93737 "왠지",
93738 "외갓집",
93739 "외국",
93740 "외로움",
93741 "외삼촌",
93742 "외출",
93743 "외침",
93744 "외할머니",
93745 "왼발",
93746 "왼손",
93747 "왼쪽",
93748 "요금",
93749 "요일",
93750 "요즘",
93751 "요청",
93752 "용기",
93753 "용서",
93754 "용어",
93755 "우산",
93756 "우선",
93757 "우승",
93758 "우연히",
93759 "우정",
93760 "우체국",
93761 "우편",
93762 "운동",
93763 "운명",
93764 "운반",
93765 "운전",
93766 "운행",
93767 "울산",
93768 "울음",
93769 "움직임",
93770 "웃어른",
93771 "웃음",
93772 "워낙",
93773 "원고",
93774 "원래",
93775 "원서",
93776 "원숭이",
93777 "원인",
93778 "원장",
93779 "원피스",
93780 "월급",
93781 "월드컵",
93782 "월세",
93783 "월요일",
93784 "웨이터",
93785 "위반",
93786 "위법",
93787 "위성",
93788 "위원",
93789 "위험",
93790 "위협",
93791 "윗사람",
93792 "유난히",
93793 "유럽",
93794 "유명",
93795 "유물",
93796 "유산",
93797 "유적",
93798 "유치원",
93799 "유학",
93800 "유행",
93801 "유형",
93802 "육군",
93803 "육상",
93804 "육십",
93805 "육체",
93806 "은행",
93807 "음력",
93808 "음료",
93809 "음반",
93810 "음성",
93811 "음식",
93812 "음악",
93813 "음주",
93814 "의견",
93815 "의논",
93816 "의문",
93817 "의복",
93818 "의식",
93819 "의심",
93820 "의외로",
93821 "의욕",
93822 "의원",
93823 "의학",
93824 "이것",
93825 "이곳",
93826 "이념",
93827 "이놈",
93828 "이달",
93829 "이대로",
93830 "이동",
93831 "이렇게",
93832 "이력서",
93833 "이론적",
93834 "이름",
93835 "이민",
93836 "이발소",
93837 "이별",
93838 "이불",
93839 "이빨",
93840 "이상",
93841 "이성",
93842 "이슬",
93843 "이야기",
93844 "이용",
93845 "이웃",
93846 "이월",
93847 "이윽고",
93848 "이익",
93849 "이전",
93850 "이중",
93851 "이튿날",
93852 "이틀",
93853 "이혼",
93854 "인간",
93855 "인격",
93856 "인공",
93857 "인구",
93858 "인근",
93859 "인기",
93860 "인도",
93861 "인류",
93862 "인물",
93863 "인생",
93864 "인쇄",
93865 "인연",
93866 "인원",
93867 "인재",
93868 "인종",
93869 "인천",
93870 "인체",
93871 "인터넷",
93872 "인하",
93873 "인형",
93874 "일곱",
93875 "일기",
93876 "일단",
93877 "일대",
93878 "일등",
93879 "일반",
93880 "일본",
93881 "일부",
93882 "일상",
93883 "일생",
93884 "일손",
93885 "일요일",
93886 "일월",
93887 "일정",
93888 "일종",
93889 "일주일",
93890 "일찍",
93891 "일체",
93892 "일치",
93893 "일행",
93894 "일회용",
93895 "임금",
93896 "임무",
93897 "입대",
93898 "입력",
93899 "입맛",
93900 "입사",
93901 "입술",
93902 "입시",
93903 "입원",
93904 "입장",
93905 "입학",
93906 "자가용",
93907 "자격",
93908 "자극",
93909 "자동",
93910 "자랑",
93911 "자부심",
93912 "자식",
93913 "자신",
93914 "자연",
93915 "자원",
93916 "자율",
93917 "자전거",
93918 "자정",
93919 "자존심",
93920 "자판",
93921 "작가",
93922 "작년",
93923 "작성",
93924 "작업",
93925 "작용",
93926 "작은딸",
93927 "작품",
93928 "잔디",
93929 "잔뜩",
93930 "잔치",
93931 "잘못",
93932 "잠깐",
93933 "잠수함",
93934 "잠시",
93935 "잠옷",
93936 "잠자리",
93937 "잡지",
93938 "장관",
93939 "장군",
93940 "장기간",
93941 "장래",
93942 "장례",
93943 "장르",
93944 "장마",
93945 "장면",
93946 "장모",
93947 "장미",
93948 "장비",
93949 "장사",
93950 "장소",
93951 "장식",
93952 "장애인",
93953 "장인",
93954 "장점",
93955 "장차",
93956 "장학금",
93957 "재능",
93958 "재빨리",
93959 "재산",
93960 "재생",
93961 "재작년",
93962 "재정",
93963 "재채기",
93964 "재판",
93965 "재학",
93966 "재활용",
93967 "저것",
93968 "저고리",
93969 "저곳",
93970 "저녁",
93971 "저런",
93972 "저렇게",
93973 "저번",
93974 "저울",
93975 "저절로",
93976 "저축",
93977 "적극",
93978 "적당히",
93979 "적성",
93980 "적용",
93981 "적응",
93982 "전개",
93983 "전공",
93984 "전기",
93985 "전달",
93986 "전라도",
93987 "전망",
93988 "전문",
93989 "전반",
93990 "전부",
93991 "전세",
93992 "전시",
93993 "전용",
93994 "전자",
93995 "전쟁",
93996 "전주",
93997 "전철",
93998 "전체",
93999 "전통",
94000 "전혀",
94001 "전후",
94002 "절대",
94003 "절망",
94004 "절반",
94005 "절약",
94006 "절차",
94007 "점검",
94008 "점수",
94009 "점심",
94010 "점원",
94011 "점점",
94012 "점차",
94013 "접근",
94014 "접시",
94015 "접촉",
94016 "젓가락",
94017 "정거장",
94018 "정도",
94019 "정류장",
94020 "정리",
94021 "정말",
94022 "정면",
94023 "정문",
94024 "정반대",
94025 "정보",
94026 "정부",
94027 "정비",
94028 "정상",
94029 "정성",
94030 "정오",
94031 "정원",
94032 "정장",
94033 "정지",
94034 "정치",
94035 "정확히",
94036 "제공",
94037 "제과점",
94038 "제대로",
94039 "제목",
94040 "제발",
94041 "제법",
94042 "제삿날",
94043 "제안",
94044 "제일",
94045 "제작",
94046 "제주도",
94047 "제출",
94048 "제품",
94049 "제한",
94050 "조각",
94051 "조건",
94052 "조금",
94053 "조깅",
94054 "조명",
94055 "조미료",
94056 "조상",
94057 "조선",
94058 "조용히",
94059 "조절",
94060 "조정",
94061 "조직",
94062 "존댓말",
94063 "존재",
94064 "졸업",
94065 "졸음",
94066 "종교",
94067 "종로",
94068 "종류",
94069 "종소리",
94070 "종업원",
94071 "종종",
94072 "종합",
94073 "좌석",
94074 "죄인",
94075 "주관적",
94076 "주름",
94077 "주말",
94078 "주머니",
94079 "주먹",
94080 "주문",
94081 "주민",
94082 "주방",
94083 "주변",
94084 "주식",
94085 "주인",
94086 "주일",
94087 "주장",
94088 "주전자",
94089 "주택",
94090 "준비",
94091 "줄거리",
94092 "줄기",
94093 "줄무늬",
94094 "중간",
94095 "중계방송",
94096 "중국",
94097 "중년",
94098 "중단",
94099 "중독",
94100 "중반",
94101 "중부",
94102 "중세",
94103 "중소기업",
94104 "중순",
94105 "중앙",
94106 "중요",
94107 "중학교",
94108 "즉석",
94109 "즉시",
94110 "즐거움",
94111 "증가",
94112 "증거",
94113 "증권",
94114 "증상",
94115 "증세",
94116 "지각",
94117 "지갑",
94118 "지경",
94119 "지극히",
94120 "지금",
94121 "지급",
94122 "지능",
94123 "지름길",
94124 "지리산",
94125 "지방",
94126 "지붕",
94127 "지식",
94128 "지역",
94129 "지우개",
94130 "지원",
94131 "지적",
94132 "지점",
94133 "지진",
94134 "지출",
94135 "직선",
94136 "직업",
94137 "직원",
94138 "직장",
94139 "진급",
94140 "진동",
94141 "진로",
94142 "진료",
94143 "진리",
94144 "진짜",
94145 "진찰",
94146 "진출",
94147 "진통",
94148 "진행",
94149 "질문",
94150 "질병",
94151 "질서",
94152 "짐작",
94153 "집단",
94154 "집안",
94155 "집중",
94156 "짜증",
94157 "찌꺼기",
94158 "차남",
94159 "차라리",
94160 "차량",
94161 "차림",
94162 "차별",
94163 "차선",
94164 "차츰",
94165 "착각",
94166 "찬물",
94167 "찬성",
94168 "참가",
94169 "참기름",
94170 "참새",
94171 "참석",
94172 "참여",
94173 "참외",
94174 "참조",
94175 "찻잔",
94176 "창가",
94177 "창고",
94178 "창구",
94179 "창문",
94180 "창밖",
94181 "창작",
94182 "창조",
94183 "채널",
94184 "채점",
94185 "책가방",
94186 "책방",
94187 "책상",
94188 "책임",
94189 "챔피언",
94190 "처벌",
94191 "처음",
94192 "천국",
94193 "천둥",
94194 "천장",
94195 "천재",
94196 "천천히",
94197 "철도",
94198 "철저히",
94199 "철학",
94200 "첫날",
94201 "첫째",
94202 "청년",
94203 "청바지",
94204 "청소",
94205 "청춘",
94206 "체계",
94207 "체력",
94208 "체온",
94209 "체육",
94210 "체중",
94211 "체험",
94212 "초등학생",
94213 "초반",
94214 "초밥",
94215 "초상화",
94216 "초순",
94217 "초여름",
94218 "초원",
94219 "초저녁",
94220 "초점",
94221 "초청",
94222 "초콜릿",
94223 "촛불",
94224 "총각",
94225 "총리",
94226 "총장",
94227 "촬영",
94228 "최근",
94229 "최상",
94230 "최선",
94231 "최신",
94232 "최악",
94233 "최종",
94234 "추석",
94235 "추억",
94236 "추진",
94237 "추천",
94238 "추측",
94239 "축구",
94240 "축소",
94241 "축제",
94242 "축하",
94243 "출근",
94244 "출발",
94245 "출산",
94246 "출신",
94247 "출연",
94248 "출입",
94249 "출장",
94250 "출판",
94251 "충격",
94252 "충고",
94253 "충돌",
94254 "충분히",
94255 "충청도",
94256 "취업",
94257 "취직",
94258 "취향",
94259 "치약",
94260 "친구",
94261 "친척",
94262 "칠십",
94263 "칠월",
94264 "칠판",
94265 "침대",
94266 "침묵",
94267 "침실",
94268 "칫솔",
94269 "칭찬",
94270 "카메라",
94271 "카운터",
94272 "칼국수",
94273 "캐릭터",
94274 "캠퍼스",
94275 "캠페인",
94276 "커튼",
94277 "컨디션",
94278 "컬러",
94279 "컴퓨터",
94280 "코끼리",
94281 "코미디",
94282 "콘서트",
94283 "콜라",
94284 "콤플렉스",
94285 "콩나물",
94286 "쾌감",
94287 "쿠데타",
94288 "크림",
94289 "큰길",
94290 "큰딸",
94291 "큰소리",
94292 "큰아들",
94293 "큰어머니",
94294 "큰일",
94295 "큰절",
94296 "클래식",
94297 "클럽",
94298 "킬로",
94299 "타입",
94300 "타자기",
94301 "탁구",
94302 "탁자",
94303 "탄생",
94304 "태권도",
94305 "태양",
94306 "태풍",
94307 "택시",
94308 "탤런트",
94309 "터널",
94310 "터미널",
94311 "테니스",
94312 "테스트",
94313 "테이블",
94314 "텔레비전",
94315 "토론",
94316 "토마토",
94317 "토요일",
94318 "통계",
94319 "통과",
94320 "통로",
94321 "통신",
94322 "통역",
94323 "통일",
94324 "통장",
94325 "통제",
94326 "통증",
94327 "통합",
94328 "통화",
94329 "퇴근",
94330 "퇴원",
94331 "퇴직금",
94332 "튀김",
94333 "트럭",
94334 "특급",
94335 "특별",
94336 "특성",
94337 "특수",
94338 "특징",
94339 "특히",
94340 "튼튼히",
94341 "티셔츠",
94342 "파란색",
94343 "파일",
94344 "파출소",
94345 "판결",
94346 "판단",
94347 "판매",
94348 "판사",
94349 "팔십",
94350 "팔월",
94351 "팝송",
94352 "패션",
94353 "팩스",
94354 "팩시밀리",
94355 "팬티",
94356 "퍼센트",
94357 "페인트",
94358 "편견",
94359 "편의",
94360 "편지",
94361 "편히",
94362 "평가",
94363 "평균",
94364 "평생",
94365 "평소",
94366 "평양",
94367 "평일",
94368 "평화",
94369 "포스터",
94370 "포인트",
94371 "포장",
94372 "포함",
94373 "표면",
94374 "표정",
94375 "표준",
94376 "표현",
94377 "품목",
94378 "품질",
94379 "풍경",
94380 "풍속",
94381 "풍습",
94382 "프랑스",
94383 "프린터",
94384 "플라스틱",
94385 "피곤",
94386 "피망",
94387 "피아노",
94388 "필름",
94389 "필수",
94390 "필요",
94391 "필자",
94392 "필통",
94393 "핑계",
94394 "하느님",
94395 "하늘",
94396 "하드웨어",
94397 "하룻밤",
94398 "하반기",
94399 "하숙집",
94400 "하순",
94401 "하여튼",
94402 "하지만",
94403 "하천",
94404 "하품",
94405 "하필",
94406 "학과",
94407 "학교",
94408 "학급",
94409 "학기",
94410 "학년",
94411 "학력",
94412 "학번",
94413 "학부모",
94414 "학비",
94415 "학생",
94416 "학술",
94417 "학습",
94418 "학용품",
94419 "학원",
94420 "학위",
94421 "학자",
94422 "학점",
94423 "한계",
94424 "한글",
94425 "한꺼번에",
94426 "한낮",
94427 "한눈",
94428 "한동안",
94429 "한때",
94430 "한라산",
94431 "한마디",
94432 "한문",
94433 "한번",
94434 "한복",
94435 "한식",
94436 "한여름",
94437 "한쪽",
94438 "할머니",
94439 "할아버지",
94440 "할인",
94441 "함께",
94442 "함부로",
94443 "합격",
94444 "합리적",
94445 "항공",
94446 "항구",
94447 "항상",
94448 "항의",
94449 "해결",
94450 "해군",
94451 "해답",
94452 "해당",
94453 "해물",
94454 "해석",
94455 "해설",
94456 "해수욕장",
94457 "해안",
94458 "핵심",
94459 "핸드백",
94460 "햄버거",
94461 "햇볕",
94462 "햇살",
94463 "행동",
94464 "행복",
94465 "행사",
94466 "행운",
94467 "행위",
94468 "향기",
94469 "향상",
94470 "향수",
94471 "허락",
94472 "허용",
94473 "헬기",
94474 "현관",
94475 "현금",
94476 "현대",
94477 "현상",
94478 "현실",
94479 "현장",
94480 "현재",
94481 "현지",
94482 "혈액",
94483 "협력",
94484 "형부",
94485 "형사",
94486 "형수",
94487 "형식",
94488 "형제",
94489 "형태",
94490 "형편",
94491 "혜택",
94492 "호기심",
94493 "호남",
94494 "호랑이",
94495 "호박",
94496 "호텔",
94497 "호흡",
94498 "혹시",
94499 "홀로",
94500 "홈페이지",
94501 "홍보",
94502 "홍수",
94503 "홍차",
94504 "화면",
94505 "화분",
94506 "화살",
94507 "화요일",
94508 "화장",
94509 "화학",
94510 "확보",
94511 "확인",
94512 "확장",
94513 "확정",
94514 "환갑",
94515 "환경",
94516 "환영",
94517 "환율",
94518 "환자",
94519 "활기",
94520 "활동",
94521 "활발히",
94522 "활용",
94523 "활짝",
94524 "회견",
94525 "회관",
94526 "회복",
94527 "회색",
94528 "회원",
94529 "회장",
94530 "회전",
94531 "횟수",
94532 "횡단보도",
94533 "효율적",
94534 "후반",
94535 "후춧가루",
94536 "훈련",
94537 "훨씬",
94538 "휴식",
94539 "휴일",
94540 "흉내",
94541 "흐름",
94542 "흑백",
94543 "흑인",
94544 "흔적",
94545 "흔히",
94546 "흥미",
94547 "흥분",
94548 "희곡",
94549 "희망",
94550 "희생",
94551 "흰색",
94552 "힘껏"
94553 ]
94554 </script>
94555 <script>/*
94556 * Copyright (c) 2013 Pavol Rusnak
94557 *
94558 * Permission is hereby granted, free of charge, to any person obtaining a copy of
94559 * this software and associated documentation files (the "Software"), to deal in
94560 * the Software without restriction, including without limitation the rights to
94561 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
94562 * of the Software, and to permit persons to whom the Software is furnished to do
94563 * so, subject to the following conditions:
94564 *
94565 * The above copyright notice and this permission notice shall be included in all
94566 * copies or substantial portions of the Software.
94567 *
94568 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
94569 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
94570 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
94571 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
94572 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
94573 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
94574 */
94575
94576 /*
94577 * Javascript port from python by Ian Coleman
94578 *
94579 * Requires code from sjcl
94580 * https://github.com/bitwiseshiftleft/sjcl
94581 */
94582
94583 var Mnemonic = function(language) {
94584
94585 var PBKDF2_ROUNDS = 2048;
94586 var RADIX = 2048;
94587
94588 var self = this;
94589 var wordlist = [];
94590
94591 var hmacSHA512 = function(key) {
94592 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
94593 this.encrypt = function() {
94594 return hasher.encrypt.apply(hasher, arguments);
94595 };
94596 };
94597
94598 function init() {
94599 wordlist = WORDLISTS[language];
94600 if (wordlist.length != RADIX) {
94601 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
94602 throw err;
94603 }
94604 }
94605
94606 self.generate = function(strength) {
94607 strength = strength || 128;
94608 var r = strength % 32;
94609 if (r > 0) {
94610 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
94611 }
94612 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
94613 if (!hasStrongCrypto) {
94614 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
94615 }
94616 var buffer = new Uint8Array(strength / 8);
94617 var data = crypto.getRandomValues(buffer);
94618 return self.toMnemonic(data);
94619 }
94620
94621 self.toMnemonic = function(byteArray) {
94622 if (byteArray.length % 4 > 0) {
94623 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
94624 }
94625
94626 //h = hashlib.sha256(data).hexdigest()
94627 var data = byteArrayToWordArray(byteArray);
94628 var hash = sjcl.hash.sha256.hash(data);
94629 var h = sjcl.codec.hex.fromBits(hash);
94630
94631 // b is a binary string, eg '00111010101100...'
94632 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
94633 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
94634 //
94635 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
94636 // c = bin(int(h, 16))[2:].zfill(256)
94637 // d = c[:len(data) * 8 / 32]
94638 var a = byteArrayToBinaryString(byteArray);
94639 var c = zfill(hexStringToBinaryString(h), 256);
94640 var d = c.substring(0, byteArray.length * 8 / 32);
94641 // b = line1 + line2
94642 var b = a + d;
94643
94644 var result = [];
94645 var blen = b.length / 11;
94646 for (var i=0; i<blen; i++) {
94647 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
94648 result.push(wordlist[idx]);
94649 }
94650 return self.joinWords(result);
94651 }
94652
94653 self.check = function(mnemonic) {
94654 var mnemonic = self.splitWords(mnemonic);
94655 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
94656 return false
94657 }
94658 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
94659 var idx = [];
94660 for (var i=0; i<mnemonic.length; i++) {
94661 var word = mnemonic[i];
94662 var wordIndex = wordlist.indexOf(word);
94663 if (wordIndex == -1) {
94664 return false;
94665 }
94666 var binaryIndex = zfill(wordIndex.toString(2), 11);
94667 idx.push(binaryIndex);
94668 }
94669 var b = idx.join('');
94670 var l = b.length;
94671 //d = b[:l / 33 * 32]
94672 //h = b[-l / 33:]
94673 var d = b.substring(0, l / 33 * 32);
94674 var h = b.substring(l - l / 33, l);
94675 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
94676 var nd = binaryStringToWordArray(d);
94677 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
94678 var ndHash = sjcl.hash.sha256.hash(nd);
94679 var ndHex = sjcl.codec.hex.fromBits(ndHash);
94680 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
94681 var nh = ndBstr.substring(0,l/33);
94682 return h == nh;
94683 }
94684
94685 self.toSeed = function(mnemonic, passphrase) {
94686 passphrase = passphrase || '';
94687 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
94688 var mnemonicNormalized = self.normalizeString(mnemonic);
94689 passphrase = self.normalizeString(passphrase)
94690 passphrase = "mnemonic" + passphrase;
94691 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
94692 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
94693 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
94694 var hashHex = sjcl.codec.hex.fromBits(result);
94695 return hashHex;
94696 }
94697
94698 self.splitWords = function(mnemonic) {
94699 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
94700 }
94701
94702 self.joinWords = function(words) {
94703 // Set space correctly depending on the language
94704 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
94705 var space = " ";
94706 if (language == "japanese" || language == "korean") {
94707 space = "\u3000"; // ideographic space
94708 }
94709 return words.join(space);
94710 }
94711
94712 self.normalizeString = function(str) {
94713 return str.normalize("NFKD");
94714 }
94715
94716 function byteArrayToWordArray(data) {
94717 var a = [];
94718 for (var i=0; i<data.length/4; i++) {
94719 v = 0;
94720 v += data[i*4 + 0] << 8 * 3;
94721 v += data[i*4 + 1] << 8 * 2;
94722 v += data[i*4 + 2] << 8 * 1;
94723 v += data[i*4 + 3] << 8 * 0;
94724 a.push(v);
94725 }
94726 return a;
94727 }
94728
94729 function byteArrayToBinaryString(data) {
94730 var bin = "";
94731 for (var i=0; i<data.length; i++) {
94732 bin += zfill(data[i].toString(2), 8);
94733 }
94734 return bin;
94735 }
94736
94737 function hexStringToBinaryString(hexString) {
94738 binaryString = "";
94739 for (var i=0; i<hexString.length; i++) {
94740 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
94741 }
94742 return binaryString;
94743 }
94744
94745 function binaryStringToWordArray(binary) {
94746 var aLen = binary.length / 32;
94747 var a = [];
94748 for (var i=0; i<aLen; i++) {
94749 var valueStr = binary.substring(0,32);
94750 var value = parseInt(valueStr, 2);
94751 a.push(value);
94752 binary = binary.slice(32);
94753 }
94754 return a;
94755 }
94756
94757 // Pad a numeric string on the left with zero digits until the given width
94758 // is reached.
94759 // Note this differs to the python implementation because it does not
94760 // handle numbers starting with a sign.
94761 function zfill(source, length) {
94762 source = source.toString();
94763 while (source.length < length) {
94764 source = '0' + source;
94765 }
94766 return source;
94767 }
94768
94769 init();
94770
94771 }
94772 </script>
94773 <script>/*
94774 JavaScript BigInteger library version 0.9.1
94775 http://silentmatt.com/biginteger/
94776
94777 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
94778 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
94779 Licensed under the MIT license.
94780
94781 Support for arbitrary internal representation base was added by
94782 Vitaly Magerya.
94783 */
94784
94785 /*
94786 File: biginteger.js
94787
94788 Exports:
94789
94790 <BigInteger>
94791 */
94792 (function(exports) {
94793 "use strict";
94794 /*
94795 Class: BigInteger
94796 An arbitrarily-large integer.
94797
94798 <BigInteger> objects should be considered immutable. None of the "built-in"
94799 methods modify *this* or their arguments. All properties should be
94800 considered private.
94801
94802 All the methods of <BigInteger> instances can be called "statically". The
94803 static versions are convenient if you don't already have a <BigInteger>
94804 object.
94805
94806 As an example, these calls are equivalent.
94807
94808 > BigInteger(4).multiply(5); // returns BigInteger(20);
94809 > BigInteger.multiply(4, 5); // returns BigInteger(20);
94810
94811 > var a = 42;
94812 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
94813 */
94814
94815 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
94816
94817 /*
94818 Constructor: BigInteger()
94819 Convert a value to a <BigInteger>.
94820
94821 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
94822 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
94823 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
94824 without a radix argument.
94825
94826 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
94827 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
94828 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
94829 > var n3 = BigInteger(n2); // Return n2, unchanged
94830
94831 The constructor form only takes an array and a sign. *n* must be an
94832 array of numbers in little-endian order, where each digit is between 0
94833 and BigInteger.base. The second parameter sets the sign: -1 for
94834 negative, +1 for positive, or 0 for zero. The array is *not copied and
94835 may be modified*. If the array contains only zeros, the sign parameter
94836 is ignored and is forced to zero.
94837
94838 > new BigInteger([5], -1): create a new BigInteger with value -5
94839
94840 Parameters:
94841
94842 n - Value to convert to a <BigInteger>.
94843
94844 Returns:
94845
94846 A <BigInteger> value.
94847
94848 See Also:
94849
94850 <parse>, <BigInteger>
94851 */
94852 function BigInteger(n, s, token) {
94853 if (token !== CONSTRUCT) {
94854 if (n instanceof BigInteger) {
94855 return n;
94856 }
94857 else if (typeof n === "undefined") {
94858 return ZERO;
94859 }
94860 return BigInteger.parse(n);
94861 }
94862
94863 n = n || []; // Provide the nullary constructor for subclasses.
94864 while (n.length && !n[n.length - 1]) {
94865 --n.length;
94866 }
94867 this._d = n;
94868 this._s = n.length ? (s || 1) : 0;
94869 }
94870
94871 BigInteger._construct = function(n, s) {
94872 return new BigInteger(n, s, CONSTRUCT);
94873 };
94874
94875 // Base-10 speedup hacks in parse, toString, exp10 and log functions
94876 // require base to be a power of 10. 10^7 is the largest such power
94877 // that won't cause a precision loss when digits are multiplied.
94878 var BigInteger_base = 10000000;
94879 var BigInteger_base_log10 = 7;
94880
94881 BigInteger.base = BigInteger_base;
94882 BigInteger.base_log10 = BigInteger_base_log10;
94883
94884 var ZERO = new BigInteger([], 0, CONSTRUCT);
94885 // Constant: ZERO
94886 // <BigInteger> 0.
94887 BigInteger.ZERO = ZERO;
94888
94889 var ONE = new BigInteger([1], 1, CONSTRUCT);
94890 // Constant: ONE
94891 // <BigInteger> 1.
94892 BigInteger.ONE = ONE;
94893
94894 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
94895 // Constant: M_ONE
94896 // <BigInteger> -1.
94897 BigInteger.M_ONE = M_ONE;
94898
94899 // Constant: _0
94900 // Shortcut for <ZERO>.
94901 BigInteger._0 = ZERO;
94902
94903 // Constant: _1
94904 // Shortcut for <ONE>.
94905 BigInteger._1 = ONE;
94906
94907 /*
94908 Constant: small
94909 Array of <BigIntegers> from 0 to 36.
94910
94911 These are used internally for parsing, but useful when you need a "small"
94912 <BigInteger>.
94913
94914 See Also:
94915
94916 <ZERO>, <ONE>, <_0>, <_1>
94917 */
94918 BigInteger.small = [
94919 ZERO,
94920 ONE,
94921 /* Assuming BigInteger_base > 36 */
94922 new BigInteger( [2], 1, CONSTRUCT),
94923 new BigInteger( [3], 1, CONSTRUCT),
94924 new BigInteger( [4], 1, CONSTRUCT),
94925 new BigInteger( [5], 1, CONSTRUCT),
94926 new BigInteger( [6], 1, CONSTRUCT),
94927 new BigInteger( [7], 1, CONSTRUCT),
94928 new BigInteger( [8], 1, CONSTRUCT),
94929 new BigInteger( [9], 1, CONSTRUCT),
94930 new BigInteger([10], 1, CONSTRUCT),
94931 new BigInteger([11], 1, CONSTRUCT),
94932 new BigInteger([12], 1, CONSTRUCT),
94933 new BigInteger([13], 1, CONSTRUCT),
94934 new BigInteger([14], 1, CONSTRUCT),
94935 new BigInteger([15], 1, CONSTRUCT),
94936 new BigInteger([16], 1, CONSTRUCT),
94937 new BigInteger([17], 1, CONSTRUCT),
94938 new BigInteger([18], 1, CONSTRUCT),
94939 new BigInteger([19], 1, CONSTRUCT),
94940 new BigInteger([20], 1, CONSTRUCT),
94941 new BigInteger([21], 1, CONSTRUCT),
94942 new BigInteger([22], 1, CONSTRUCT),
94943 new BigInteger([23], 1, CONSTRUCT),
94944 new BigInteger([24], 1, CONSTRUCT),
94945 new BigInteger([25], 1, CONSTRUCT),
94946 new BigInteger([26], 1, CONSTRUCT),
94947 new BigInteger([27], 1, CONSTRUCT),
94948 new BigInteger([28], 1, CONSTRUCT),
94949 new BigInteger([29], 1, CONSTRUCT),
94950 new BigInteger([30], 1, CONSTRUCT),
94951 new BigInteger([31], 1, CONSTRUCT),
94952 new BigInteger([32], 1, CONSTRUCT),
94953 new BigInteger([33], 1, CONSTRUCT),
94954 new BigInteger([34], 1, CONSTRUCT),
94955 new BigInteger([35], 1, CONSTRUCT),
94956 new BigInteger([36], 1, CONSTRUCT)
94957 ];
94958
94959 // Used for parsing/radix conversion
94960 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
94961
94962 /*
94963 Method: toString
94964 Convert a <BigInteger> to a string.
94965
94966 When *base* is greater than 10, letters are upper case.
94967
94968 Parameters:
94969
94970 base - Optional base to represent the number in (default is base 10).
94971 Must be between 2 and 36 inclusive, or an Error will be thrown.
94972
94973 Returns:
94974
94975 The string representation of the <BigInteger>.
94976 */
94977 BigInteger.prototype.toString = function(base) {
94978 base = +base || 10;
94979 if (base < 2 || base > 36) {
94980 throw new Error("illegal radix " + base + ".");
94981 }
94982 if (this._s === 0) {
94983 return "0";
94984 }
94985 if (base === 10) {
94986 var str = this._s < 0 ? "-" : "";
94987 str += this._d[this._d.length - 1].toString();
94988 for (var i = this._d.length - 2; i >= 0; i--) {
94989 var group = this._d[i].toString();
94990 while (group.length < BigInteger_base_log10) group = '0' + group;
94991 str += group;
94992 }
94993 return str;
94994 }
94995 else {
94996 var numerals = BigInteger.digits;
94997 base = BigInteger.small[base];
94998 var sign = this._s;
94999
95000 var n = this.abs();
95001 var digits = [];
95002 var digit;
95003
95004 while (n._s !== 0) {
95005 var divmod = n.divRem(base);
95006 n = divmod[0];
95007 digit = divmod[1];
95008 // TODO: This could be changed to unshift instead of reversing at the end.
95009 // Benchmark both to compare speeds.
95010 digits.push(numerals[digit.valueOf()]);
95011 }
95012 return (sign < 0 ? "-" : "") + digits.reverse().join("");
95013 }
95014 };
95015
95016 // Verify strings for parsing
95017 BigInteger.radixRegex = [
95018 /^$/,
95019 /^$/,
95020 /^[01]*$/,
95021 /^[012]*$/,
95022 /^[0-3]*$/,
95023 /^[0-4]*$/,
95024 /^[0-5]*$/,
95025 /^[0-6]*$/,
95026 /^[0-7]*$/,
95027 /^[0-8]*$/,
95028 /^[0-9]*$/,
95029 /^[0-9aA]*$/,
95030 /^[0-9abAB]*$/,
95031 /^[0-9abcABC]*$/,
95032 /^[0-9a-dA-D]*$/,
95033 /^[0-9a-eA-E]*$/,
95034 /^[0-9a-fA-F]*$/,
95035 /^[0-9a-gA-G]*$/,
95036 /^[0-9a-hA-H]*$/,
95037 /^[0-9a-iA-I]*$/,
95038 /^[0-9a-jA-J]*$/,
95039 /^[0-9a-kA-K]*$/,
95040 /^[0-9a-lA-L]*$/,
95041 /^[0-9a-mA-M]*$/,
95042 /^[0-9a-nA-N]*$/,
95043 /^[0-9a-oA-O]*$/,
95044 /^[0-9a-pA-P]*$/,
95045 /^[0-9a-qA-Q]*$/,
95046 /^[0-9a-rA-R]*$/,
95047 /^[0-9a-sA-S]*$/,
95048 /^[0-9a-tA-T]*$/,
95049 /^[0-9a-uA-U]*$/,
95050 /^[0-9a-vA-V]*$/,
95051 /^[0-9a-wA-W]*$/,
95052 /^[0-9a-xA-X]*$/,
95053 /^[0-9a-yA-Y]*$/,
95054 /^[0-9a-zA-Z]*$/
95055 ];
95056
95057 /*
95058 Function: parse
95059 Parse a string into a <BigInteger>.
95060
95061 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
95062 *base* is not provided, it will be guessed based on the leading characters
95063 of *s* as follows:
95064
95065 - "0x" or "0X": *base* = 16
95066 - "0c" or "0C": *base* = 8
95067 - "0b" or "0B": *base* = 2
95068 - else: *base* = 10
95069
95070 If no base is provided, or *base* is 10, the number can be in exponential
95071 form. For example, these are all valid:
95072
95073 > BigInteger.parse("1e9"); // Same as "1000000000"
95074 > BigInteger.parse("1.234*10^3"); // Same as 1234
95075 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
95076
95077 If any characters fall outside the range defined by the radix, an exception
95078 will be thrown.
95079
95080 Parameters:
95081
95082 s - The string to parse.
95083 base - Optional radix (default is to guess based on *s*).
95084
95085 Returns:
95086
95087 a <BigInteger> instance.
95088 */
95089 BigInteger.parse = function(s, base) {
95090 // Expands a number in exponential form to decimal form.
95091 // expandExponential("-13.441*10^5") === "1344100";
95092 // expandExponential("1.12300e-1") === "0.112300";
95093 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
95094 function expandExponential(str) {
95095 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
95096
95097 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
95098 c = +c;
95099 var l = c < 0;
95100 var i = n.length + c;
95101 x = (l ? n : f).length;
95102 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
95103 var z = (new Array(c + 1)).join("0");
95104 var r = n + f;
95105 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
95106 });
95107 }
95108
95109 s = s.toString();
95110 if (typeof base === "undefined" || +base === 10) {
95111 s = expandExponential(s);
95112 }
95113
95114 var prefixRE;
95115 if (typeof base === "undefined") {
95116 prefixRE = '0[xcb]';
95117 }
95118 else if (base == 16) {
95119 prefixRE = '0x';
95120 }
95121 else if (base == 8) {
95122 prefixRE = '0c';
95123 }
95124 else if (base == 2) {
95125 prefixRE = '0b';
95126 }
95127 else {
95128 prefixRE = '';
95129 }
95130 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
95131 if (parts) {
95132 var sign = parts[1] || "+";
95133 var baseSection = parts[2] || "";
95134 var digits = parts[3] || "";
95135
95136 if (typeof base === "undefined") {
95137 // Guess base
95138 if (baseSection === "0x" || baseSection === "0X") { // Hex
95139 base = 16;
95140 }
95141 else if (baseSection === "0c" || baseSection === "0C") { // Octal
95142 base = 8;
95143 }
95144 else if (baseSection === "0b" || baseSection === "0B") { // Binary
95145 base = 2;
95146 }
95147 else {
95148 base = 10;
95149 }
95150 }
95151 else if (base < 2 || base > 36) {
95152 throw new Error("Illegal radix " + base + ".");
95153 }
95154
95155 base = +base;
95156
95157 // Check for digits outside the range
95158 if (!(BigInteger.radixRegex[base].test(digits))) {
95159 throw new Error("Bad digit for radix " + base);
95160 }
95161
95162 // Strip leading zeros, and convert to array
95163 digits = digits.replace(/^0+/, "").split("");
95164 if (digits.length === 0) {
95165 return ZERO;
95166 }
95167
95168 // Get the sign (we know it's not zero)
95169 sign = (sign === "-") ? -1 : 1;
95170
95171 // Optimize 10
95172 if (base == 10) {
95173 var d = [];
95174 while (digits.length >= BigInteger_base_log10) {
95175 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
95176 }
95177 d.push(parseInt(digits.join(''), 10));
95178 return new BigInteger(d, sign, CONSTRUCT);
95179 }
95180
95181 // Do the conversion
95182 var d = ZERO;
95183 base = BigInteger.small[base];
95184 var small = BigInteger.small;
95185 for (var i = 0; i < digits.length; i++) {
95186 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
95187 }
95188 return new BigInteger(d._d, sign, CONSTRUCT);
95189 }
95190 else {
95191 throw new Error("Invalid BigInteger format: " + s);
95192 }
95193 };
95194
95195 /*
95196 Function: add
95197 Add two <BigIntegers>.
95198
95199 Parameters:
95200
95201 n - The number to add to *this*. Will be converted to a <BigInteger>.
95202
95203 Returns:
95204
95205 The numbers added together.
95206
95207 See Also:
95208
95209 <subtract>, <multiply>, <quotient>, <next>
95210 */
95211 BigInteger.prototype.add = function(n) {
95212 if (this._s === 0) {
95213 return BigInteger(n);
95214 }
95215
95216 n = BigInteger(n);
95217 if (n._s === 0) {
95218 return this;
95219 }
95220 if (this._s !== n._s) {
95221 n = n.negate();
95222 return this.subtract(n);
95223 }
95224
95225 var a = this._d;
95226 var b = n._d;
95227 var al = a.length;
95228 var bl = b.length;
95229 var sum = new Array(Math.max(al, bl) + 1);
95230 var size = Math.min(al, bl);
95231 var carry = 0;
95232 var digit;
95233
95234 for (var i = 0; i < size; i++) {
95235 digit = a[i] + b[i] + carry;
95236 sum[i] = digit % BigInteger_base;
95237 carry = (digit / BigInteger_base) | 0;
95238 }
95239 if (bl > al) {
95240 a = b;
95241 al = bl;
95242 }
95243 for (i = size; carry && i < al; i++) {
95244 digit = a[i] + carry;
95245 sum[i] = digit % BigInteger_base;
95246 carry = (digit / BigInteger_base) | 0;
95247 }
95248 if (carry) {
95249 sum[i] = carry;
95250 }
95251
95252 for ( ; i < al; i++) {
95253 sum[i] = a[i];
95254 }
95255
95256 return new BigInteger(sum, this._s, CONSTRUCT);
95257 };
95258
95259 /*
95260 Function: negate
95261 Get the additive inverse of a <BigInteger>.
95262
95263 Returns:
95264
95265 A <BigInteger> with the same magnatude, but with the opposite sign.
95266
95267 See Also:
95268
95269 <abs>
95270 */
95271 BigInteger.prototype.negate = function() {
95272 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
95273 };
95274
95275 /*
95276 Function: abs
95277 Get the absolute value of a <BigInteger>.
95278
95279 Returns:
95280
95281 A <BigInteger> with the same magnatude, but always positive (or zero).
95282
95283 See Also:
95284
95285 <negate>
95286 */
95287 BigInteger.prototype.abs = function() {
95288 return (this._s < 0) ? this.negate() : this;
95289 };
95290
95291 /*
95292 Function: subtract
95293 Subtract two <BigIntegers>.
95294
95295 Parameters:
95296
95297 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
95298
95299 Returns:
95300
95301 The *n* subtracted from *this*.
95302
95303 See Also:
95304
95305 <add>, <multiply>, <quotient>, <prev>
95306 */
95307 BigInteger.prototype.subtract = function(n) {
95308 if (this._s === 0) {
95309 return BigInteger(n).negate();
95310 }
95311
95312 n = BigInteger(n);
95313 if (n._s === 0) {
95314 return this;
95315 }
95316 if (this._s !== n._s) {
95317 n = n.negate();
95318 return this.add(n);
95319 }
95320
95321 var m = this;
95322 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
95323 if (this._s < 0) {
95324 m = new BigInteger(n._d, 1, CONSTRUCT);
95325 n = new BigInteger(this._d, 1, CONSTRUCT);
95326 }
95327
95328 // Both are positive => a - b
95329 var sign = m.compareAbs(n);
95330 if (sign === 0) {
95331 return ZERO;
95332 }
95333 else if (sign < 0) {
95334 // swap m and n
95335 var t = n;
95336 n = m;
95337 m = t;
95338 }
95339
95340 // a > b
95341 var a = m._d;
95342 var b = n._d;
95343 var al = a.length;
95344 var bl = b.length;
95345 var diff = new Array(al); // al >= bl since a > b
95346 var borrow = 0;
95347 var i;
95348 var digit;
95349
95350 for (i = 0; i < bl; i++) {
95351 digit = a[i] - borrow - b[i];
95352 if (digit < 0) {
95353 digit += BigInteger_base;
95354 borrow = 1;
95355 }
95356 else {
95357 borrow = 0;
95358 }
95359 diff[i] = digit;
95360 }
95361 for (i = bl; i < al; i++) {
95362 digit = a[i] - borrow;
95363 if (digit < 0) {
95364 digit += BigInteger_base;
95365 }
95366 else {
95367 diff[i++] = digit;
95368 break;
95369 }
95370 diff[i] = digit;
95371 }
95372 for ( ; i < al; i++) {
95373 diff[i] = a[i];
95374 }
95375
95376 return new BigInteger(diff, sign, CONSTRUCT);
95377 };
95378
95379 (function() {
95380 function addOne(n, sign) {
95381 var a = n._d;
95382 var sum = a.slice();
95383 var carry = true;
95384 var i = 0;
95385
95386 while (true) {
95387 var digit = (a[i] || 0) + 1;
95388 sum[i] = digit % BigInteger_base;
95389 if (digit <= BigInteger_base - 1) {
95390 break;
95391 }
95392 ++i;
95393 }
95394
95395 return new BigInteger(sum, sign, CONSTRUCT);
95396 }
95397
95398 function subtractOne(n, sign) {
95399 var a = n._d;
95400 var sum = a.slice();
95401 var borrow = true;
95402 var i = 0;
95403
95404 while (true) {
95405 var digit = (a[i] || 0) - 1;
95406 if (digit < 0) {
95407 sum[i] = digit + BigInteger_base;
95408 }
95409 else {
95410 sum[i] = digit;
95411 break;
95412 }
95413 ++i;
95414 }
95415
95416 return new BigInteger(sum, sign, CONSTRUCT);
95417 }
95418
95419 /*
95420 Function: next
95421 Get the next <BigInteger> (add one).
95422
95423 Returns:
95424
95425 *this* + 1.
95426
95427 See Also:
95428
95429 <add>, <prev>
95430 */
95431 BigInteger.prototype.next = function() {
95432 switch (this._s) {
95433 case 0:
95434 return ONE;
95435 case -1:
95436 return subtractOne(this, -1);
95437 // case 1:
95438 default:
95439 return addOne(this, 1);
95440 }
95441 };
95442
95443 /*
95444 Function: prev
95445 Get the previous <BigInteger> (subtract one).
95446
95447 Returns:
95448
95449 *this* - 1.
95450
95451 See Also:
95452
95453 <next>, <subtract>
95454 */
95455 BigInteger.prototype.prev = function() {
95456 switch (this._s) {
95457 case 0:
95458 return M_ONE;
95459 case -1:
95460 return addOne(this, -1);
95461 // case 1:
95462 default:
95463 return subtractOne(this, 1);
95464 }
95465 };
95466 })();
95467
95468 /*
95469 Function: compareAbs
95470 Compare the absolute value of two <BigIntegers>.
95471
95472 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
95473
95474 Parameters:
95475
95476 n - The number to compare to *this*. Will be converted to a <BigInteger>.
95477
95478 Returns:
95479
95480 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
95481
95482 See Also:
95483
95484 <compare>, <abs>
95485 */
95486 BigInteger.prototype.compareAbs = function(n) {
95487 if (this === n) {
95488 return 0;
95489 }
95490
95491 if (!(n instanceof BigInteger)) {
95492 if (!isFinite(n)) {
95493 return(isNaN(n) ? n : -1);
95494 }
95495 n = BigInteger(n);
95496 }
95497
95498 if (this._s === 0) {
95499 return (n._s !== 0) ? -1 : 0;
95500 }
95501 if (n._s === 0) {
95502 return 1;
95503 }
95504
95505 var l = this._d.length;
95506 var nl = n._d.length;
95507 if (l < nl) {
95508 return -1;
95509 }
95510 else if (l > nl) {
95511 return 1;
95512 }
95513
95514 var a = this._d;
95515 var b = n._d;
95516 for (var i = l-1; i >= 0; i--) {
95517 if (a[i] !== b[i]) {
95518 return a[i] < b[i] ? -1 : 1;
95519 }
95520 }
95521
95522 return 0;
95523 };
95524
95525 /*
95526 Function: compare
95527 Compare two <BigIntegers>.
95528
95529 Parameters:
95530
95531 n - The number to compare to *this*. Will be converted to a <BigInteger>.
95532
95533 Returns:
95534
95535 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
95536
95537 See Also:
95538
95539 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
95540 */
95541 BigInteger.prototype.compare = function(n) {
95542 if (this === n) {
95543 return 0;
95544 }
95545
95546 n = BigInteger(n);
95547
95548 if (this._s === 0) {
95549 return -n._s;
95550 }
95551
95552 if (this._s === n._s) { // both positive or both negative
95553 var cmp = this.compareAbs(n);
95554 return cmp * this._s;
95555 }
95556 else {
95557 return this._s;
95558 }
95559 };
95560
95561 /*
95562 Function: isUnit
95563 Return true iff *this* is either 1 or -1.
95564
95565 Returns:
95566
95567 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
95568
95569 See Also:
95570
95571 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
95572 <BigInteger.ONE>, <BigInteger.M_ONE>
95573 */
95574 BigInteger.prototype.isUnit = function() {
95575 return this === ONE ||
95576 this === M_ONE ||
95577 (this._d.length === 1 && this._d[0] === 1);
95578 };
95579
95580 /*
95581 Function: multiply
95582 Multiply two <BigIntegers>.
95583
95584 Parameters:
95585
95586 n - The number to multiply *this* by. Will be converted to a
95587 <BigInteger>.
95588
95589 Returns:
95590
95591 The numbers multiplied together.
95592
95593 See Also:
95594
95595 <add>, <subtract>, <quotient>, <square>
95596 */
95597 BigInteger.prototype.multiply = function(n) {
95598 // TODO: Consider adding Karatsuba multiplication for large numbers
95599 if (this._s === 0) {
95600 return ZERO;
95601 }
95602
95603 n = BigInteger(n);
95604 if (n._s === 0) {
95605 return ZERO;
95606 }
95607 if (this.isUnit()) {
95608 if (this._s < 0) {
95609 return n.negate();
95610 }
95611 return n;
95612 }
95613 if (n.isUnit()) {
95614 if (n._s < 0) {
95615 return this.negate();
95616 }
95617 return this;
95618 }
95619 if (this === n) {
95620 return this.square();
95621 }
95622
95623 var r = (this._d.length >= n._d.length);
95624 var a = (r ? this : n)._d; // a will be longer than b
95625 var b = (r ? n : this)._d;
95626 var al = a.length;
95627 var bl = b.length;
95628
95629 var pl = al + bl;
95630 var partial = new Array(pl);
95631 var i;
95632 for (i = 0; i < pl; i++) {
95633 partial[i] = 0;
95634 }
95635
95636 for (i = 0; i < bl; i++) {
95637 var carry = 0;
95638 var bi = b[i];
95639 var jlimit = al + i;
95640 var digit;
95641 for (var j = i; j < jlimit; j++) {
95642 digit = partial[j] + bi * a[j - i] + carry;
95643 carry = (digit / BigInteger_base) | 0;
95644 partial[j] = (digit % BigInteger_base) | 0;
95645 }
95646 if (carry) {
95647 digit = partial[j] + carry;
95648 carry = (digit / BigInteger_base) | 0;
95649 partial[j] = digit % BigInteger_base;
95650 }
95651 }
95652 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
95653 };
95654
95655 // Multiply a BigInteger by a single-digit native number
95656 // Assumes that this and n are >= 0
95657 // This is not really intended to be used outside the library itself
95658 BigInteger.prototype.multiplySingleDigit = function(n) {
95659 if (n === 0 || this._s === 0) {
95660 return ZERO;
95661 }
95662 if (n === 1) {
95663 return this;
95664 }
95665
95666 var digit;
95667 if (this._d.length === 1) {
95668 digit = this._d[0] * n;
95669 if (digit >= BigInteger_base) {
95670 return new BigInteger([(digit % BigInteger_base)|0,
95671 (digit / BigInteger_base)|0], 1, CONSTRUCT);
95672 }
95673 return new BigInteger([digit], 1, CONSTRUCT);
95674 }
95675
95676 if (n === 2) {
95677 return this.add(this);
95678 }
95679 if (this.isUnit()) {
95680 return new BigInteger([n], 1, CONSTRUCT);
95681 }
95682
95683 var a = this._d;
95684 var al = a.length;
95685
95686 var pl = al + 1;
95687 var partial = new Array(pl);
95688 for (var i = 0; i < pl; i++) {
95689 partial[i] = 0;
95690 }
95691
95692 var carry = 0;
95693 for (var j = 0; j < al; j++) {
95694 digit = n * a[j] + carry;
95695 carry = (digit / BigInteger_base) | 0;
95696 partial[j] = (digit % BigInteger_base) | 0;
95697 }
95698 if (carry) {
95699 partial[j] = carry;
95700 }
95701
95702 return new BigInteger(partial, 1, CONSTRUCT);
95703 };
95704
95705 /*
95706 Function: square
95707 Multiply a <BigInteger> by itself.
95708
95709 This is slightly faster than regular multiplication, since it removes the
95710 duplicated multiplcations.
95711
95712 Returns:
95713
95714 > this.multiply(this)
95715
95716 See Also:
95717 <multiply>
95718 */
95719 BigInteger.prototype.square = function() {
95720 // Normally, squaring a 10-digit number would take 100 multiplications.
95721 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
95722 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
95723 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
95724
95725 if (this._s === 0) {
95726 return ZERO;
95727 }
95728 if (this.isUnit()) {
95729 return ONE;
95730 }
95731
95732 var digits = this._d;
95733 var length = digits.length;
95734 var imult1 = new Array(length + length + 1);
95735 var product, carry, k;
95736 var i;
95737
95738 // Calculate diagonal
95739 for (i = 0; i < length; i++) {
95740 k = i * 2;
95741 product = digits[i] * digits[i];
95742 carry = (product / BigInteger_base) | 0;
95743 imult1[k] = product % BigInteger_base;
95744 imult1[k + 1] = carry;
95745 }
95746
95747 // Calculate repeating part
95748 for (i = 0; i < length; i++) {
95749 carry = 0;
95750 k = i * 2 + 1;
95751 for (var j = i + 1; j < length; j++, k++) {
95752 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
95753 carry = (product / BigInteger_base) | 0;
95754 imult1[k] = product % BigInteger_base;
95755 }
95756 k = length + i;
95757 var digit = carry + imult1[k];
95758 carry = (digit / BigInteger_base) | 0;
95759 imult1[k] = digit % BigInteger_base;
95760 imult1[k + 1] += carry;
95761 }
95762
95763 return new BigInteger(imult1, 1, CONSTRUCT);
95764 };
95765
95766 /*
95767 Function: quotient
95768 Divide two <BigIntegers> and truncate towards zero.
95769
95770 <quotient> throws an exception if *n* is zero.
95771
95772 Parameters:
95773
95774 n - The number to divide *this* by. Will be converted to a <BigInteger>.
95775
95776 Returns:
95777
95778 The *this* / *n*, truncated to an integer.
95779
95780 See Also:
95781
95782 <add>, <subtract>, <multiply>, <divRem>, <remainder>
95783 */
95784 BigInteger.prototype.quotient = function(n) {
95785 return this.divRem(n)[0];
95786 };
95787
95788 /*
95789 Function: divide
95790 Deprecated synonym for <quotient>.
95791 */
95792 BigInteger.prototype.divide = BigInteger.prototype.quotient;
95793
95794 /*
95795 Function: remainder
95796 Calculate the remainder of two <BigIntegers>.
95797
95798 <remainder> throws an exception if *n* is zero.
95799
95800 Parameters:
95801
95802 n - The remainder after *this* is divided *this* by *n*. Will be
95803 converted to a <BigInteger>.
95804
95805 Returns:
95806
95807 *this* % *n*.
95808
95809 See Also:
95810
95811 <divRem>, <quotient>
95812 */
95813 BigInteger.prototype.remainder = function(n) {
95814 return this.divRem(n)[1];
95815 };
95816
95817 /*
95818 Function: divRem
95819 Calculate the integer quotient and remainder of two <BigIntegers>.
95820
95821 <divRem> throws an exception if *n* is zero.
95822
95823 Parameters:
95824
95825 n - The number to divide *this* by. Will be converted to a <BigInteger>.
95826
95827 Returns:
95828
95829 A two-element array containing the quotient and the remainder.
95830
95831 > a.divRem(b)
95832
95833 is exactly equivalent to
95834
95835 > [a.quotient(b), a.remainder(b)]
95836
95837 except it is faster, because they are calculated at the same time.
95838
95839 See Also:
95840
95841 <quotient>, <remainder>
95842 */
95843 BigInteger.prototype.divRem = function(n) {
95844 n = BigInteger(n);
95845 if (n._s === 0) {
95846 throw new Error("Divide by zero");
95847 }
95848 if (this._s === 0) {
95849 return [ZERO, ZERO];
95850 }
95851 if (n._d.length === 1) {
95852 return this.divRemSmall(n._s * n._d[0]);
95853 }
95854
95855 // Test for easy cases -- |n1| <= |n2|
95856 switch (this.compareAbs(n)) {
95857 case 0: // n1 == n2
95858 return [this._s === n._s ? ONE : M_ONE, ZERO];
95859 case -1: // |n1| < |n2|
95860 return [ZERO, this];
95861 }
95862
95863 var sign = this._s * n._s;
95864 var a = n.abs();
95865 var b_digits = this._d;
95866 var b_index = b_digits.length;
95867 var digits = n._d.length;
95868 var quot = [];
95869 var guess;
95870
95871 var part = new BigInteger([], 0, CONSTRUCT);
95872
95873 while (b_index) {
95874 part._d.unshift(b_digits[--b_index]);
95875 part = new BigInteger(part._d, 1, CONSTRUCT);
95876
95877 if (part.compareAbs(n) < 0) {
95878 quot.push(0);
95879 continue;
95880 }
95881 if (part._s === 0) {
95882 guess = 0;
95883 }
95884 else {
95885 var xlen = part._d.length, ylen = a._d.length;
95886 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
95887 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
95888 if (part._d.length > a._d.length) {
95889 // The length of part._d can either match a._d length,
95890 // or exceed it by one.
95891 highx = (highx+1)*BigInteger_base;
95892 }
95893 guess = Math.ceil(highx/highy);
95894 }
95895 do {
95896 var check = a.multiplySingleDigit(guess);
95897 if (check.compareAbs(part) <= 0) {
95898 break;
95899 }
95900 guess--;
95901 } while (guess);
95902
95903 quot.push(guess);
95904 if (!guess) {
95905 continue;
95906 }
95907 var diff = part.subtract(check);
95908 part._d = diff._d.slice();
95909 }
95910
95911 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
95912 new BigInteger(part._d, this._s, CONSTRUCT)];
95913 };
95914
95915 // Throws an exception if n is outside of (-BigInteger.base, -1] or
95916 // [1, BigInteger.base). It's not necessary to call this, since the
95917 // other division functions will call it if they are able to.
95918 BigInteger.prototype.divRemSmall = function(n) {
95919 var r;
95920 n = +n;
95921 if (n === 0) {
95922 throw new Error("Divide by zero");
95923 }
95924
95925 var n_s = n < 0 ? -1 : 1;
95926 var sign = this._s * n_s;
95927 n = Math.abs(n);
95928
95929 if (n < 1 || n >= BigInteger_base) {
95930 throw new Error("Argument out of range");
95931 }
95932
95933 if (this._s === 0) {
95934 return [ZERO, ZERO];
95935 }
95936
95937 if (n === 1 || n === -1) {
95938 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
95939 }
95940
95941 // 2 <= n < BigInteger_base
95942
95943 // divide a single digit by a single digit
95944 if (this._d.length === 1) {
95945 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
95946 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
95947 if (sign < 0) {
95948 q = q.negate();
95949 }
95950 if (this._s < 0) {
95951 r = r.negate();
95952 }
95953 return [q, r];
95954 }
95955
95956 var digits = this._d.slice();
95957 var quot = new Array(digits.length);
95958 var part = 0;
95959 var diff = 0;
95960 var i = 0;
95961 var guess;
95962
95963 while (digits.length) {
95964 part = part * BigInteger_base + digits[digits.length - 1];
95965 if (part < n) {
95966 quot[i++] = 0;
95967 digits.pop();
95968 diff = BigInteger_base * diff + part;
95969 continue;
95970 }
95971 if (part === 0) {
95972 guess = 0;
95973 }
95974 else {
95975 guess = (part / n) | 0;
95976 }
95977
95978 var check = n * guess;
95979 diff = part - check;
95980 quot[i++] = guess;
95981 if (!guess) {
95982 digits.pop();
95983 continue;
95984 }
95985
95986 digits.pop();
95987 part = diff;
95988 }
95989
95990 r = new BigInteger([diff], 1, CONSTRUCT);
95991 if (this._s < 0) {
95992 r = r.negate();
95993 }
95994 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
95995 };
95996
95997 /*
95998 Function: isEven
95999 Return true iff *this* is divisible by two.
96000
96001 Note that <BigInteger.ZERO> is even.
96002
96003 Returns:
96004
96005 true if *this* is even, false otherwise.
96006
96007 See Also:
96008
96009 <isOdd>
96010 */
96011 BigInteger.prototype.isEven = function() {
96012 var digits = this._d;
96013 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
96014 };
96015
96016 /*
96017 Function: isOdd
96018 Return true iff *this* is not divisible by two.
96019
96020 Returns:
96021
96022 true if *this* is odd, false otherwise.
96023
96024 See Also:
96025
96026 <isEven>
96027 */
96028 BigInteger.prototype.isOdd = function() {
96029 return !this.isEven();
96030 };
96031
96032 /*
96033 Function: sign
96034 Get the sign of a <BigInteger>.
96035
96036 Returns:
96037
96038 * -1 if *this* < 0
96039 * 0 if *this* == 0
96040 * +1 if *this* > 0
96041
96042 See Also:
96043
96044 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
96045 */
96046 BigInteger.prototype.sign = function() {
96047 return this._s;
96048 };
96049
96050 /*
96051 Function: isPositive
96052 Return true iff *this* > 0.
96053
96054 Returns:
96055
96056 true if *this*.compare(<BigInteger.ZERO>) == 1.
96057
96058 See Also:
96059
96060 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
96061 */
96062 BigInteger.prototype.isPositive = function() {
96063 return this._s > 0;
96064 };
96065
96066 /*
96067 Function: isNegative
96068 Return true iff *this* < 0.
96069
96070 Returns:
96071
96072 true if *this*.compare(<BigInteger.ZERO>) == -1.
96073
96074 See Also:
96075
96076 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
96077 */
96078 BigInteger.prototype.isNegative = function() {
96079 return this._s < 0;
96080 };
96081
96082 /*
96083 Function: isZero
96084 Return true iff *this* == 0.
96085
96086 Returns:
96087
96088 true if *this*.compare(<BigInteger.ZERO>) == 0.
96089
96090 See Also:
96091
96092 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
96093 */
96094 BigInteger.prototype.isZero = function() {
96095 return this._s === 0;
96096 };
96097
96098 /*
96099 Function: exp10
96100 Multiply a <BigInteger> by a power of 10.
96101
96102 This is equivalent to, but faster than
96103
96104 > if (n >= 0) {
96105 > return this.multiply(BigInteger("1e" + n));
96106 > }
96107 > else { // n <= 0
96108 > return this.quotient(BigInteger("1e" + -n));
96109 > }
96110
96111 Parameters:
96112
96113 n - The power of 10 to multiply *this* by. *n* is converted to a
96114 javascipt number and must be no greater than <BigInteger.MAX_EXP>
96115 (0x7FFFFFFF), or an exception will be thrown.
96116
96117 Returns:
96118
96119 *this* * (10 ** *n*), truncated to an integer if necessary.
96120
96121 See Also:
96122
96123 <pow>, <multiply>
96124 */
96125 BigInteger.prototype.exp10 = function(n) {
96126 n = +n;
96127 if (n === 0) {
96128 return this;
96129 }
96130 if (Math.abs(n) > Number(MAX_EXP)) {
96131 throw new Error("exponent too large in BigInteger.exp10");
96132 }
96133 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
96134 if (this._s === 0) {
96135 return ZERO;
96136 }
96137 if (n > 0) {
96138 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
96139
96140 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
96141 k._d.unshift(0);
96142 }
96143 if (n == 0)
96144 return k;
96145 k._s = 1;
96146 k = k.multiplySingleDigit(Math.pow(10, n));
96147 return (this._s < 0 ? k.negate() : k);
96148 } else if (-n >= this._d.length*BigInteger_base_log10) {
96149 return ZERO;
96150 } else {
96151 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
96152
96153 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
96154 k._d.shift();
96155 }
96156 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
96157 }
96158 };
96159
96160 /*
96161 Function: pow
96162 Raise a <BigInteger> to a power.
96163
96164 In this implementation, 0**0 is 1.
96165
96166 Parameters:
96167
96168 n - The exponent to raise *this* by. *n* must be no greater than
96169 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
96170
96171 Returns:
96172
96173 *this* raised to the *nth* power.
96174
96175 See Also:
96176
96177 <modPow>
96178 */
96179 BigInteger.prototype.pow = function(n) {
96180 if (this.isUnit()) {
96181 if (this._s > 0) {
96182 return this;
96183 }
96184 else {
96185 return BigInteger(n).isOdd() ? this : this.negate();
96186 }
96187 }
96188
96189 n = BigInteger(n);
96190 if (n._s === 0) {
96191 return ONE;
96192 }
96193 else if (n._s < 0) {
96194 if (this._s === 0) {
96195 throw new Error("Divide by zero");
96196 }
96197 else {
96198 return ZERO;
96199 }
96200 }
96201 if (this._s === 0) {
96202 return ZERO;
96203 }
96204 if (n.isUnit()) {
96205 return this;
96206 }
96207
96208 if (n.compareAbs(MAX_EXP) > 0) {
96209 throw new Error("exponent too large in BigInteger.pow");
96210 }
96211 var x = this;
96212 var aux = ONE;
96213 var two = BigInteger.small[2];
96214
96215 while (n.isPositive()) {
96216 if (n.isOdd()) {
96217 aux = aux.multiply(x);
96218 if (n.isUnit()) {
96219 return aux;
96220 }
96221 }
96222 x = x.square();
96223 n = n.quotient(two);
96224 }
96225
96226 return aux;
96227 };
96228
96229 /*
96230 Function: modPow
96231 Raise a <BigInteger> to a power (mod m).
96232
96233 Because it is reduced by a modulus, <modPow> is not limited by
96234 <BigInteger.MAX_EXP> like <pow>.
96235
96236 Parameters:
96237
96238 exponent - The exponent to raise *this* by. Must be positive.
96239 modulus - The modulus.
96240
96241 Returns:
96242
96243 *this* ^ *exponent* (mod *modulus*).
96244
96245 See Also:
96246
96247 <pow>, <mod>
96248 */
96249 BigInteger.prototype.modPow = function(exponent, modulus) {
96250 var result = ONE;
96251 var base = this;
96252
96253 while (exponent.isPositive()) {
96254 if (exponent.isOdd()) {
96255 result = result.multiply(base).remainder(modulus);
96256 }
96257
96258 exponent = exponent.quotient(BigInteger.small[2]);
96259 if (exponent.isPositive()) {
96260 base = base.square().remainder(modulus);
96261 }
96262 }
96263
96264 return result;
96265 };
96266
96267 /*
96268 Function: log
96269 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
96270
96271 This is equivalent to
96272
96273 > Math.log(this.toJSValue())
96274
96275 but handles values outside of the native number range.
96276
96277 Returns:
96278
96279 log( *this* )
96280
96281 See Also:
96282
96283 <toJSValue>
96284 */
96285 BigInteger.prototype.log = function() {
96286 switch (this._s) {
96287 case 0: return -Infinity;
96288 case -1: return NaN;
96289 default: // Fall through.
96290 }
96291
96292 var l = this._d.length;
96293
96294 if (l*BigInteger_base_log10 < 30) {
96295 return Math.log(this.valueOf());
96296 }
96297
96298 var N = Math.ceil(30/BigInteger_base_log10);
96299 var firstNdigits = this._d.slice(l - N);
96300 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
96301 };
96302
96303 /*
96304 Function: valueOf
96305 Convert a <BigInteger> to a native JavaScript integer.
96306
96307 This is called automatically by JavaScipt to convert a <BigInteger> to a
96308 native value.
96309
96310 Returns:
96311
96312 > parseInt(this.toString(), 10)
96313
96314 See Also:
96315
96316 <toString>, <toJSValue>
96317 */
96318 BigInteger.prototype.valueOf = function() {
96319 return parseInt(this.toString(), 10);
96320 };
96321
96322 /*
96323 Function: toJSValue
96324 Convert a <BigInteger> to a native JavaScript integer.
96325
96326 This is the same as valueOf, but more explicitly named.
96327
96328 Returns:
96329
96330 > parseInt(this.toString(), 10)
96331
96332 See Also:
96333
96334 <toString>, <valueOf>
96335 */
96336 BigInteger.prototype.toJSValue = function() {
96337 return parseInt(this.toString(), 10);
96338 };
96339
96340 var MAX_EXP = BigInteger(0x7FFFFFFF);
96341 // Constant: MAX_EXP
96342 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
96343 BigInteger.MAX_EXP = MAX_EXP;
96344
96345 (function() {
96346 function makeUnary(fn) {
96347 return function(a) {
96348 return fn.call(BigInteger(a));
96349 };
96350 }
96351
96352 function makeBinary(fn) {
96353 return function(a, b) {
96354 return fn.call(BigInteger(a), BigInteger(b));
96355 };
96356 }
96357
96358 function makeTrinary(fn) {
96359 return function(a, b, c) {
96360 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
96361 };
96362 }
96363
96364 (function() {
96365 var i, fn;
96366 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
96367 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
96368 var trinary = ["modPow"];
96369
96370 for (i = 0; i < unary.length; i++) {
96371 fn = unary[i];
96372 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
96373 }
96374
96375 for (i = 0; i < binary.length; i++) {
96376 fn = binary[i];
96377 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
96378 }
96379
96380 for (i = 0; i < trinary.length; i++) {
96381 fn = trinary[i];
96382 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
96383 }
96384
96385 BigInteger.exp10 = function(x, n) {
96386 return BigInteger(x).exp10(n);
96387 };
96388 })();
96389 })();
96390
96391 exports.BigInteger = BigInteger;
96392 })(typeof exports !== 'undefined' ? exports : this);
96393 </script>
96394 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.zxcvbn = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
96395 var adjacency_graphs;adjacency_graphs={qwerty:{"!":["`~",null,null,"2@","qQ",null],'"':[";:","[{","]}",null,null,"/?"],"#":["2@",null,null,"4$","eE","wW"],$:["3#",null,null,"5%","rR","eE"],"%":["4$",null,null,"6^","tT","rR"],"&":["6^",null,null,"8*","uU","yY"],"'":[";:","[{","]}",null,null,"/?"],"(":["8*",null,null,"0)","oO","iI"],")":["9(",null,null,"-_","pP","oO"],"*":["7&",null,null,"9(","iI","uU"],"+":["-_",null,null,null,"]}","[{"],",":["mM","kK","lL",".>",null,null],"-":["0)",null,null,"=+","[{","pP"],".":[",<","lL",";:","/?",null,null],"/":[".>",";:","'\"",null,null,null],0:["9(",null,null,"-_","pP","oO"],1:["`~",null,null,"2@","qQ",null],2:["1!",null,null,"3#","wW","qQ"],3:["2@",null,null,"4$","eE","wW"],4:["3#",null,null,"5%","rR","eE"],5:["4$",null,null,"6^","tT","rR"],6:["5%",null,null,"7&","yY","tT"],7:["6^",null,null,"8*","uU","yY"],8:["7&",null,null,"9(","iI","uU"],9:["8*",null,null,"0)","oO","iI"],":":["lL","pP","[{","'\"","/?",".>"],";":["lL","pP","[{","'\"","/?",".>"],"<":["mM","kK","lL",".>",null,null],"=":["-_",null,null,null,"]}","[{"],">":[",<","lL",";:","/?",null,null],"?":[".>",";:","'\"",null,null,null],"@":["1!",null,null,"3#","wW","qQ"],A:[null,"qQ","wW","sS","zZ",null],B:["vV","gG","hH","nN",null,null],C:["xX","dD","fF","vV",null,null],D:["sS","eE","rR","fF","cC","xX"],E:["wW","3#","4$","rR","dD","sS"],F:["dD","rR","tT","gG","vV","cC"],G:["fF","tT","yY","hH","bB","vV"],H:["gG","yY","uU","jJ","nN","bB"],I:["uU","8*","9(","oO","kK","jJ"],J:["hH","uU","iI","kK","mM","nN"],K:["jJ","iI","oO","lL",",<","mM"],L:["kK","oO","pP",";:",".>",",<"],M:["nN","jJ","kK",",<",null,null],N:["bB","hH","jJ","mM",null,null],O:["iI","9(","0)","pP","lL","kK"],P:["oO","0)","-_","[{",";:","lL"],Q:[null,"1!","2@","wW","aA",null],R:["eE","4$","5%","tT","fF","dD"],S:["aA","wW","eE","dD","xX","zZ"],T:["rR","5%","6^","yY","gG","fF"],U:["yY","7&","8*","iI","jJ","hH"],V:["cC","fF","gG","bB",null,null],W:["qQ","2@","3#","eE","sS","aA"],X:["zZ","sS","dD","cC",null,null],Y:["tT","6^","7&","uU","hH","gG"],Z:[null,"aA","sS","xX",null,null],"[":["pP","-_","=+","]}","'\"",";:"],"\\":["]}",null,null,null,null,null],"]":["[{","=+",null,"\\|",null,"'\""],"^":["5%",null,null,"7&","yY","tT"],_:["0)",null,null,"=+","[{","pP"],"`":[null,null,null,"1!",null,null],a:[null,"qQ","wW","sS","zZ",null],b:["vV","gG","hH","nN",null,null],c:["xX","dD","fF","vV",null,null],d:["sS","eE","rR","fF","cC","xX"],e:["wW","3#","4$","rR","dD","sS"],f:["dD","rR","tT","gG","vV","cC"],g:["fF","tT","yY","hH","bB","vV"],h:["gG","yY","uU","jJ","nN","bB"],i:["uU","8*","9(","oO","kK","jJ"],j:["hH","uU","iI","kK","mM","nN"],k:["jJ","iI","oO","lL",",<","mM"],l:["kK","oO","pP",";:",".>",",<"],m:["nN","jJ","kK",",<",null,null],n:["bB","hH","jJ","mM",null,null],o:["iI","9(","0)","pP","lL","kK"],p:["oO","0)","-_","[{",";:","lL"],q:[null,"1!","2@","wW","aA",null],r:["eE","4$","5%","tT","fF","dD"],s:["aA","wW","eE","dD","xX","zZ"],t:["rR","5%","6^","yY","gG","fF"],u:["yY","7&","8*","iI","jJ","hH"],v:["cC","fF","gG","bB",null,null],w:["qQ","2@","3#","eE","sS","aA"],x:["zZ","sS","dD","cC",null,null],y:["tT","6^","7&","uU","hH","gG"],z:[null,"aA","sS","xX",null,null],"{":["pP","-_","=+","]}","'\"",";:"],"|":["]}",null,null,null,null,null],"}":["[{","=+",null,"\\|",null,"'\""],"~":[null,null,null,"1!",null,null]},dvorak:{"!":["`~",null,null,"2@","'\"",null],'"':[null,"1!","2@",",<","aA",null],"#":["2@",null,null,"4$",".>",",<"],$:["3#",null,null,"5%","pP",".>"],"%":["4$",null,null,"6^","yY","pP"],"&":["6^",null,null,"8*","gG","fF"],"'":[null,"1!","2@",",<","aA",null],"(":["8*",null,null,"0)","rR","cC"],")":["9(",null,null,"[{","lL","rR"],"*":["7&",null,null,"9(","cC","gG"],"+":["/?","]}",null,"\\|",null,"-_"],",":["'\"","2@","3#",".>","oO","aA"],"-":["sS","/?","=+",null,null,"zZ"],".":[",<","3#","4$","pP","eE","oO"],"/":["lL","[{","]}","=+","-_","sS"],0:["9(",null,null,"[{","lL","rR"],1:["`~",null,null,"2@","'\"",null],2:["1!",null,null,"3#",",<","'\""],3:["2@",null,null,"4$",".>",",<"],4:["3#",null,null,"5%","pP",".>"],5:["4$",null,null,"6^","yY","pP"],6:["5%",null,null,"7&","fF","yY"],7:["6^",null,null,"8*","gG","fF"],8:["7&",null,null,"9(","cC","gG"],9:["8*",null,null,"0)","rR","cC"],":":[null,"aA","oO","qQ",null,null],";":[null,"aA","oO","qQ",null,null],"<":["'\"","2@","3#",".>","oO","aA"],"=":["/?","]}",null,"\\|",null,"-_"],">":[",<","3#","4$","pP","eE","oO"],"?":["lL","[{","]}","=+","-_","sS"],"@":["1!",null,null,"3#",",<","'\""],A:[null,"'\"",",<","oO",";:",null],B:["xX","dD","hH","mM",null,null],C:["gG","8*","9(","rR","tT","hH"],D:["iI","fF","gG","hH","bB","xX"],E:["oO",".>","pP","uU","jJ","qQ"],F:["yY","6^","7&","gG","dD","iI"],G:["fF","7&","8*","cC","hH","dD"],H:["dD","gG","cC","tT","mM","bB"],I:["uU","yY","fF","dD","xX","kK"],J:["qQ","eE","uU","kK",null,null],K:["jJ","uU","iI","xX",null,null],L:["rR","0)","[{","/?","sS","nN"],M:["bB","hH","tT","wW",null,null],N:["tT","rR","lL","sS","vV","wW"],O:["aA",",<",".>","eE","qQ",";:"],P:[".>","4$","5%","yY","uU","eE"],Q:[";:","oO","eE","jJ",null,null],R:["cC","9(","0)","lL","nN","tT"],S:["nN","lL","/?","-_","zZ","vV"],T:["hH","cC","rR","nN","wW","mM"],U:["eE","pP","yY","iI","kK","jJ"],V:["wW","nN","sS","zZ",null,null],W:["mM","tT","nN","vV",null,null],X:["kK","iI","dD","bB",null,null],Y:["pP","5%","6^","fF","iI","uU"],Z:["vV","sS","-_",null,null,null],"[":["0)",null,null,"]}","/?","lL"],"\\":["=+",null,null,null,null,null],"]":["[{",null,null,null,"=+","/?"],"^":["5%",null,null,"7&","fF","yY"],_:["sS","/?","=+",null,null,"zZ"],"`":[null,null,null,"1!",null,null],a:[null,"'\"",",<","oO",";:",null],b:["xX","dD","hH","mM",null,null],c:["gG","8*","9(","rR","tT","hH"],d:["iI","fF","gG","hH","bB","xX"],e:["oO",".>","pP","uU","jJ","qQ"],f:["yY","6^","7&","gG","dD","iI"],g:["fF","7&","8*","cC","hH","dD"],h:["dD","gG","cC","tT","mM","bB"],i:["uU","yY","fF","dD","xX","kK"],j:["qQ","eE","uU","kK",null,null],k:["jJ","uU","iI","xX",null,null],l:["rR","0)","[{","/?","sS","nN"],m:["bB","hH","tT","wW",null,null],n:["tT","rR","lL","sS","vV","wW"],o:["aA",",<",".>","eE","qQ",";:"],p:[".>","4$","5%","yY","uU","eE"],q:[";:","oO","eE","jJ",null,null],r:["cC","9(","0)","lL","nN","tT"],s:["nN","lL","/?","-_","zZ","vV"],t:["hH","cC","rR","nN","wW","mM"],u:["eE","pP","yY","iI","kK","jJ"],v:["wW","nN","sS","zZ",null,null],w:["mM","tT","nN","vV",null,null],x:["kK","iI","dD","bB",null,null],y:["pP","5%","6^","fF","iI","uU"],z:["vV","sS","-_",null,null,null],"{":["0)",null,null,"]}","/?","lL"],"|":["=+",null,null,null,null,null],"}":["[{",null,null,null,"=+","/?"],"~":[null,null,null,"1!",null,null]},keypad:{"*":["/",null,null,null,"-","+","9","8"],"+":["9","*","-",null,null,null,null,"6"],"-":["*",null,null,null,null,null,"+","9"],".":["0","2","3",null,null,null,null,null],"/":[null,null,null,null,"*","9","8","7"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6",null,null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","+",null,null,"3","2"],7:[null,null,null,"/","8","5","4",null],8:["7",null,"/","*","9","6","5","4"],9:["8","/","*","-","+",null,"6","5"]},mac_keypad:{"*":["/",null,null,null,null,null,"-","9"],"+":["6","9","-",null,null,null,null,"3"],"-":["9","/","*",null,null,null,"+","6"],".":["0","2","3",null,null,null,null,null],"/":["=",null,null,null,"*","-","9","8"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6","+",null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","-","+",null,"3","2"],7:[null,null,null,"=","8","5","4",null],8:["7",null,"=","/","9","6","5","4"],9:["8","=","/","*","-","+","6","5"],"=":[null,null,null,null,"/","9","8","7"]}},module.exports=adjacency_graphs;
96396
96397 },{}],2:[function(require,module,exports){
96398 var feedback,scoring;scoring=require("./scoring"),feedback={default_feedback:{warning:"",suggestions:["Use a few words, avoid common phrases","No need for symbols, digits, or uppercase letters"]},get_feedback:function(e,s){var a,t,r,n,o,i;if(0===s.length)return this.default_feedback;if(e>2)return{warning:"",suggestions:[]};for(n=s[0],i=s.slice(1),t=0,r=i.length;t<r;t++)o=i[t],o.token.length>n.token.length&&(n=o);return feedback=this.get_match_feedback(n,1===s.length),a="Add another word or two. Uncommon words are better.",null!=feedback?(feedback.suggestions.unshift(a),null==feedback.warning&&(feedback.warning="")):feedback={warning:"",suggestions:[a]},feedback},get_match_feedback:function(e,s){var a,t;switch(e.pattern){case"dictionary":return this.get_dictionary_match_feedback(e,s);case"spatial":return a=e.graph.toUpperCase(),t=1===e.turns?"Straight rows of keys are easy to guess":"Short keyboard patterns are easy to guess",{warning:t,suggestions:["Use a longer keyboard pattern with more turns"]};case"repeat":return t=1===e.base_token.length?'Repeats like "aaa" are easy to guess':'Repeats like "abcabcabc" are only slightly harder to guess than "abc"',{warning:t,suggestions:["Avoid repeated words and characters"]};case"sequence":return{warning:"Sequences like abc or 6543 are easy to guess",suggestions:["Avoid sequences"]};case"regex":if("recent_year"===e.regex_name)return{warning:"Recent years are easy to guess",suggestions:["Avoid recent years","Avoid years that are associated with you"]};break;case"date":return{warning:"Dates are often easy to guess",suggestions:["Avoid dates and years that are associated with you"]}}},get_dictionary_match_feedback:function(e,s){var a,t,r,n,o;return n="passwords"===e.dictionary_name?!s||e.l33t||e.reversed?e.guesses_log10<=4?"This is similar to a commonly used password":void 0:e.rank<=10?"This is a top-10 common password":e.rank<=100?"This is a top-100 common password":"This is a very common password":"english"===e.dictionary_name?s?"A word by itself is easy to guess":void 0:"surnames"===(a=e.dictionary_name)||"male_names"===a||"female_names"===a?s?"Names and surnames by themselves are easy to guess":"Common names and surnames are easy to guess":"",r=[],o=e.token,o.match(scoring.START_UPPER)?r.push("Capitalization doesn't help very much"):o.match(scoring.ALL_UPPER)&&o.toLowerCase()!==o&&r.push("All-uppercase is almost as easy to guess as all-lowercase"),e.reversed&&e.token.length>=4&&r.push("Reversed words aren't much harder to guess"),e.l33t&&r.push("Predictable substitutions like '@' instead of 'a' don't help very much"),t={warning:n,suggestions:r}}},module.exports=feedback;
96399
96400 },{"./scoring":6}],3:[function(require,module,exports){
96401 var frequency_lists;frequency_lists={passwords:"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic's,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy".split(","),
96402 english_wikipedia:"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator".split(","),
96403 female_names:"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn".split(","),surnames:"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette".split(","),
96404 us_tv_and_film:"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right".split(","),
96405 male_names:"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso".split(",")},module.exports=frequency_lists;
96406
96407 },{}],4:[function(require,module,exports){
96408 var feedback,matching,scoring,time,time_estimates,zxcvbn;matching=require("./matching"),scoring=require("./scoring"),time_estimates=require("./time_estimates"),feedback=require("./feedback"),time=function(){return(new Date).getTime()},zxcvbn=function(e,t){var i,n,c,s,a,r,m,o,u,g,_;for(null==t&&(t=[]),g=time(),u=[],c=0,s=t.length;c<s;c++)i=t[c],"string"!=(m=typeof i)&&"number"!==m&&"boolean"!==m||u.push(i.toString().toLowerCase());matching.set_user_input_dictionary(u),a=matching.omnimatch(e),o=scoring.most_guessable_match_sequence(e,a),o.calc_time=time()-g,n=time_estimates.estimate_attack_times(o.guesses);for(r in n)_=n[r],o[r]=_;return o.feedback=feedback.get_feedback(o.score,o.sequence),o},module.exports=zxcvbn;
96409
96410 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
96411 var DATE_MAX_YEAR,DATE_MIN_YEAR,DATE_SPLITS,GRAPHS,L33T_TABLE,RANKED_DICTIONARIES,REGEXEN,adjacency_graphs,build_ranked_dict,frequency_lists,lst,matching,name,scoring;frequency_lists=require("./frequency_lists"),adjacency_graphs=require("./adjacency_graphs"),scoring=require("./scoring"),build_ranked_dict=function(e){var t,n,r,i,a;for(i={},t=1,r=0,n=e.length;r<n;r++)a=e[r],i[a]=t,t+=1;return i},RANKED_DICTIONARIES={};for(name in frequency_lists)lst=frequency_lists[name],RANKED_DICTIONARIES[name]=build_ranked_dict(lst);GRAPHS={qwerty:adjacency_graphs.qwerty,dvorak:adjacency_graphs.dvorak,keypad:adjacency_graphs.keypad,mac_keypad:adjacency_graphs.mac_keypad},L33T_TABLE={a:["4","@"],b:["8"],c:["(","{","[","<"],e:["3"],g:["6","9"],i:["1","!","|"],l:["1","|","7"],o:["0"],s:["$","5"],t:["+","7"],x:["%"],z:["2"]},REGEXEN={recent_year:/19\d\d|200\d|201\d/g},DATE_MAX_YEAR=2050,DATE_MIN_YEAR=1e3,DATE_SPLITS={4:[[1,2],[2,3]],5:[[1,3],[2,3]],6:[[1,2],[2,4],[4,5]],7:[[1,3],[2,3],[4,5],[4,6]],8:[[2,4],[4,6]]},matching={empty:function(e){var t;return 0===function(){var n;n=[];for(t in e)n.push(t);return n}().length},extend:function(e,t){return e.push.apply(e,t)},translate:function(e,t){var n;return function(){var r,i,a,s;for(a=e.split(""),s=[],i=0,r=a.length;i<r;i++)n=a[i],s.push(t[n]||n);return s}().join("")},mod:function(e,t){return(e%t+t)%t},sorted:function(e){return e.sort(function(e,t){return e.i-t.i||e.j-t.j})},omnimatch:function(e){var t,n,r,i,a;for(i=[],r=[this.dictionary_match,this.reverse_dictionary_match,this.l33t_match,this.spatial_match,this.repeat_match,this.sequence_match,this.regex_match,this.date_match],a=0,t=r.length;a<t;a++)n=r[a],this.extend(i,n.call(this,e));return this.sorted(i)},dictionary_match:function(e,t){var n,r,i,a,s,o,h,u,c,l,_,f,d,p;null==t&&(t=RANKED_DICTIONARIES),s=[],a=e.length,u=e.toLowerCase();for(n in t)for(l=t[n],r=o=0,_=a;0<=_?o<_:o>_;r=0<=_?++o:--o)for(i=h=f=r,d=a;f<=d?h<d:h>d;i=f<=d?++h:--h)u.slice(r,+i+1||9e9)in l&&(p=u.slice(r,+i+1||9e9),c=l[p],s.push({pattern:"dictionary",i:r,j:i,token:e.slice(r,+i+1||9e9),matched_word:p,rank:c,dictionary_name:n,reversed:!1,l33t:!1}));return this.sorted(s)},reverse_dictionary_match:function(e,t){var n,r,i,a,s,o;for(null==t&&(t=RANKED_DICTIONARIES),o=e.split("").reverse().join(""),i=this.dictionary_match(o,t),a=0,n=i.length;a<n;a++)r=i[a],r.token=r.token.split("").reverse().join(""),r.reversed=!0,s=[e.length-1-r.j,e.length-1-r.i],r.i=s[0],r.j=s[1];return this.sorted(i)},set_user_input_dictionary:function(e){return RANKED_DICTIONARIES.user_inputs=build_ranked_dict(e.slice())},relevant_l33t_subtable:function(e,t){var n,r,i,a,s,o,h,u,c,l;for(s={},o=e.split(""),a=0,r=o.length;a<r;a++)n=o[a],s[n]=!0;l={};for(i in t)c=t[i],h=function(){var e,t,n;for(n=[],t=0,e=c.length;t<e;t++)u=c[t],u in s&&n.push(u);return n}(),h.length>0&&(l[i]=h);return l},enumerate_l33t_subs:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;a=function(){var t;t=[];for(i in e)t.push(i);return t}(),p=[[]],n=function(e){var t,n,r,a,s,o,h,u;for(n=[],s={},o=0,a=e.length;o<a;o++)h=e[o],t=function(){var e,t,n;for(n=[],u=t=0,e=h.length;t<e;u=++t)i=h[u],n.push([i,u]);return n}(),t.sort(),r=function(){var e,n,r;for(r=[],u=n=0,e=t.length;n<e;u=++n)i=t[u],r.push(i+","+u);return r}().join("-"),r in s||(s[r]=!0,n.push(h));return n},r=function(t){var i,a,s,o,h,u,c,l,_,f,d,g,m,A,E,y;if(t.length){for(a=t[0],m=t.slice(1),c=[],d=e[a],l=0,h=d.length;l<h;l++)for(o=d[l],_=0,u=p.length;_<u;_++){for(A=p[_],i=-1,s=f=0,g=A.length;0<=g?f<g:f>g;s=0<=g?++f:--f)if(A[s][0]===o){i=s;break}i===-1?(y=A.concat([[o,a]]),c.push(y)):(E=A.slice(0),E.splice(i,1),E.push([o,a]),c.push(A),c.push(E))}return p=n(c),r(m)}},r(a),d=[];for(u=0,o=p.length;u<o;u++){for(_=p[u],f={},c=0,h=_.length;c<h;c++)l=_[c],s=l[0],t=l[1],f[s]=t;d.push(f)}return d},l33t_match:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A;for(null==t&&(t=RANKED_DICTIONARIES),null==n&&(n=L33T_TABLE),u=[],_=this.enumerate_l33t_subs(this.relevant_l33t_subtable(e,n)),c=0,a=_.length;c<a&&(d=_[c],!this.empty(d));c++)for(g=this.translate(e,d),f=this.dictionary_match(g,t),l=0,s=f.length;l<s;l++)if(o=f[l],m=e.slice(o.i,+o.j+1||9e9),m.toLowerCase()!==o.matched_word){h={};for(p in d)r=d[p],m.indexOf(p)!==-1&&(h[p]=r);o.l33t=!0,o.token=m,o.sub=h,o.sub_display=function(){var e;e=[];for(i in h)A=h[i],e.push(i+" -> "+A);return e}().join(", "),u.push(o)}return this.sorted(u.filter(function(e){return e.token.length>1}))},spatial_match:function(e,t){var n,r,i;null==t&&(t=GRAPHS),i=[];for(r in t)n=t[r],this.extend(i,this.spatial_match_helper(e,n,r));return this.sorted(i)},SHIFTED_RX:/[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?]/,spatial_match_helper:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m;for(f=[],u=0;u<e.length-1;)for(c=u+1,l=null,m=0,g="qwerty"!==n&&"dvorak"!==n||!this.SHIFTED_RX.exec(e.charAt(u))?0:1;;){if(p=e.charAt(c-1),o=!1,h=-1,s=-1,i=t[p]||[],c<e.length)for(a=e.charAt(c),d=0,_=i.length;d<_;d++)if(r=i[d],s+=1,r&&r.indexOf(a)!==-1){o=!0,h=s,1===r.indexOf(a)&&(g+=1),l!==h&&(m+=1,l=h);break}if(!o){c-u>2&&f.push({pattern:"spatial",i:u,j:c-1,token:e.slice(u,c),graph:n,turns:m,shifted_count:g}),u=c;break}c+=1}return f},repeat_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;for(d=[],a=/(.+)\1+/g,c=/(.+?)\1+/g,l=/^(.+?)\1+$/,u=0;u<e.length&&(a.lastIndex=c.lastIndex=u,s=a.exec(e),_=c.exec(e),null!=s);)s[0].length>_[0].length?(f=s,i=l.exec(f[0])[1]):(f=_,i=f[1]),p=[f.index,f.index+f[0].length-1],o=p[0],h=p[1],t=scoring.most_guessable_match_sequence(i,this.omnimatch(i)),r=t.sequence,n=t.guesses,d.push({pattern:"repeat",i:o,j:h,token:f[0],base_token:i,base_guesses:n,base_matches:r,repeat_count:f[0].length/i.length}),u=h+1;return d},MAX_DELTA:5,sequence_match:function(e){var t,n,r,i,a,s,o,h,u;if(1===e.length)return[];for(u=function(t){return function(n,r,i){var a,s,o,u;if((r-n>1||1===Math.abs(i))&&0<(a=Math.abs(i))&&a<=t.MAX_DELTA)return u=e.slice(n,+r+1||9e9),/^[a-z]+$/.test(u)?(s="lower",o=26):/^[A-Z]+$/.test(u)?(s="upper",o=26):/^\d+$/.test(u)?(s="digits",o=10):(s="unicode",o=26),h.push({pattern:"sequence",i:n,j:r,token:e.slice(n,+r+1||9e9),sequence_name:s,sequence_space:o,ascending:i>0})}}(this),h=[],n=0,a=null,i=s=1,o=e.length;1<=o?s<o:s>o;i=1<=o?++s:--s)t=e.charCodeAt(i)-e.charCodeAt(i-1),null==a&&(a=t),t!==a&&(r=i-1,u(n,r,a),n=r,a=t);return u(n,e.length-1,a),h},regex_match:function(e,t){var n,r,i,a;null==t&&(t=REGEXEN),n=[];for(name in t)for(r=t[name],r.lastIndex=0;i=r.exec(e);)a=i[0],n.push({pattern:"regex",token:a,i:i.index,j:i.index+i[0].length-1,regex_name:name,regex_match:i});return this.sorted(n)},date_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A,E,y,v,I,R,T,D,k,x,j,b,N,S,q,L,M;for(_=[],f=/^\d{4,8}$/,d=/^(\d{1,4})([\s\/\\_.-])(\d{1,2})\2(\d{1,4})$/,s=m=0,v=e.length-4;0<=v?m<=v:m>=v;s=0<=v?++m:--m)for(o=A=I=s+3,R=s+7;(I<=R?A<=R:A>=R)&&!(o>=e.length);o=I<=R?++A:--A)if(M=e.slice(s,+o+1||9e9),f.exec(M)){for(r=[],T=DATE_SPLITS[M.length],E=0,c=T.length;E<c;E++)D=T[E],h=D[0],u=D[1],a=this.map_ints_to_dmy([parseInt(M.slice(0,h)),parseInt(M.slice(h,u)),parseInt(M.slice(u))]),null!=a&&r.push(a);if(r.length>0){for(t=r[0],p=function(e){return Math.abs(e.year-scoring.REFERENCE_YEAR)},g=p(r[0]),k=r.slice(1),y=0,l=k.length;y<l;y++)n=k[y],i=p(n),i<g&&(x=[n,i],t=x[0],g=x[1]);_.push({pattern:"date",token:M,i:s,j:o,separator:"",year:t.year,month:t.month,day:t.day})}}for(s=q=0,j=e.length-6;0<=j?q<=j:q>=j;s=0<=j?++q:--q)for(o=L=b=s+5,N=s+9;(b<=N?L<=N:L>=N)&&!(o>=e.length);o=b<=N?++L:--L)M=e.slice(s,+o+1||9e9),S=d.exec(M),null!=S&&(a=this.map_ints_to_dmy([parseInt(S[1]),parseInt(S[3]),parseInt(S[4])]),null!=a&&_.push({pattern:"date",token:M,i:s,j:o,separator:S[2],year:a.year,month:a.month,day:a.day}));return this.sorted(_.filter(function(e){var t,n,r,i;for(t=!1,i=0,n=_.length;i<n;i++)if(r=_[i],e!==r&&r.i<=e.i&&r.j>=e.j){t=!0;break}return!t}))},map_ints_to_dmy:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g;if(!(e[1]>31||e[1]<=0)){for(o=0,h=0,p=0,s=0,r=e.length;s<r;s++){if(n=e[s],99<n&&n<DATE_MIN_YEAR||n>DATE_MAX_YEAR)return;n>31&&(h+=1),n>12&&(o+=1),n<=0&&(p+=1)}if(!(h>=2||3===o||p>=2)){for(c=[[e[2],e.slice(0,2)],[e[0],e.slice(1,3)]],u=0,i=c.length;u<i;u++)if(_=c[u],g=_[0],d=_[1],DATE_MIN_YEAR<=g&&g<=DATE_MAX_YEAR)return t=this.map_ints_to_dm(d),null!=t?{year:g,month:t.month,day:t.day}:void 0;for(l=0,a=c.length;l<a;l++)if(f=c[l],g=f[0],d=f[1],t=this.map_ints_to_dm(d),null!=t)return g=this.two_to_four_digit_year(g),{year:g,month:t.month,day:t.day}}}},map_ints_to_dm:function(e){var t,n,r,i,a,s;for(a=[e,e.slice().reverse()],i=0,n=a.length;i<n;i++)if(s=a[i],t=s[0],r=s[1],1<=t&&t<=31&&1<=r&&r<=12)return{day:t,month:r}},two_to_four_digit_year:function(e){return e>99?e:e>50?e+1900:e+2e3}},module.exports=matching;
96412
96413 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
96414 var BRUTEFORCE_CARDINALITY,MIN_GUESSES_BEFORE_GROWING_SEQUENCE,MIN_SUBMATCH_GUESSES_MULTI_CHAR,MIN_SUBMATCH_GUESSES_SINGLE_CHAR,adjacency_graphs,calc_average_degree,k,scoring,v;adjacency_graphs=require("./adjacency_graphs"),calc_average_degree=function(e){var t,r,n,s,a,u;t=0;for(n in e)a=e[n],t+=function(){var e,t,r;for(r=[],t=0,e=a.length;t<e;t++)s=a[t],s&&r.push(s);return r}().length;return t/=function(){var t;t=[];for(r in e)u=e[r],t.push(r);return t}().length},BRUTEFORCE_CARDINALITY=10,MIN_GUESSES_BEFORE_GROWING_SEQUENCE=1e4,MIN_SUBMATCH_GUESSES_SINGLE_CHAR=10,MIN_SUBMATCH_GUESSES_MULTI_CHAR=50,scoring={nCk:function(e,t){var r,n,s,a;if(t>e)return 0;if(0===t)return 1;for(s=1,r=n=1,a=t;1<=a?n<=a:n>=a;r=1<=a?++n:--n)s*=e,s/=r,e-=1;return s},log10:function(e){return Math.log(e)/Math.log(10)},log2:function(e){return Math.log(e)/Math.log(2)},factorial:function(e){var t,r,n,s;if(e<2)return 1;for(t=1,r=n=2,s=e;2<=s?n<=s:n>=s;r=2<=s?++n:--n)t*=r;return t},most_guessable_match_sequence:function(e,t,r){var n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S,R,v,I,M,N,C,U,T;for(null==r&&(r=!1),l=e.length,f=function(){var e,t,r;for(r=[],n=e=0,t=l;0<=t?e<t:e>t;n=0<=t?++e:--e)r.push([]);return r}(),p=0,_=t.length;p<_;p++)c=t[p],f[c.j].push(c);for(v=0,o=f.length;v<o;v++)E=f[v],E.sort(function(e,t){return e.i-t.i});for(A={m:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),pi:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),g:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}()},U=function(t){return function(n,s){var a,u,i,_,o,h;_=n.j,o=t.estimate_guesses(n,e),s>1&&(o*=A.pi[n.i-1][s-1]),i=t.factorial(s)*o,r||(i+=Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE,s-1)),h=A.g[_];for(u in h)if(a=h[u],!(u>s)&&a<=i)return;return A.g[_][s]=i,A.m[_][s]=n,A.pi[_][s]=o}}(this),s=function(e){return function(e){var t,r,n,s,a,u;for(c=g(0,e),U(c,1),a=[],t=u=1,s=e;1<=s?u<=s:u>=s;t=1<=s?++u:--u)c=g(t,e),a.push(function(){var e,s;e=A.m[t-1],s=[];for(r in e)n=e[r],r=parseInt(r),"bruteforce"!==n.pattern&&s.push(U(c,r+1));return s}());return a}}(this),g=function(t){return function(t,r){return{pattern:"bruteforce",token:e.slice(t,+r+1||9e9),i:t,j:r}}}(this),C=function(e){return function(e){var t,r,n,s,a,u,i;u=[],s=e-1,a=void 0,n=1/0,i=A.g[s];for(r in i)t=i[r],t<n&&(a=r,n=t);for(;s>=0;)c=A.m[s][a],u.unshift(c),s=c.i-1,a--;return u}}(this),u=N=0,I=l;0<=I?N<I:N>I;u=0<=I?++N:--N){for(M=f[u],T=0,h=M.length;T<h;T++)if(c=M[T],c.i>0)for(i in A.m[c.i-1])i=parseInt(i),U(c,i+1);else U(c,1);s(u)}return R=C(l),S=R.length,a=0===e.length?1:A.g[l-1][S],{password:e,guesses:a,guesses_log10:this.log10(a),sequence:R}},estimate_guesses:function(e,t){var r,n,s;return null!=e.guesses?e.guesses:(s=1,e.token.length<t.length&&(s=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR:MIN_SUBMATCH_GUESSES_MULTI_CHAR),r={bruteforce:this.bruteforce_guesses,dictionary:this.dictionary_guesses,spatial:this.spatial_guesses,repeat:this.repeat_guesses,sequence:this.sequence_guesses,regex:this.regex_guesses,date:this.date_guesses},n=r[e.pattern].call(this,e),e.guesses=Math.max(n,s),e.guesses_log10=this.log10(e.guesses),e.guesses)},bruteforce_guesses:function(e){var t,r;return t=Math.pow(BRUTEFORCE_CARDINALITY,e.token.length),r=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR+1:MIN_SUBMATCH_GUESSES_MULTI_CHAR+1,Math.max(t,r)},repeat_guesses:function(e){return e.base_guesses*e.repeat_count},sequence_guesses:function(e){var t,r;return r=e.token.charAt(0),t="a"===r||"A"===r||"z"===r||"Z"===r||"0"===r||"1"===r||"9"===r?4:r.match(/\d/)?10:26,e.ascending||(t*=2),t*e.token.length},MIN_YEAR_SPACE:20,REFERENCE_YEAR:2016,regex_guesses:function(e){var t,r;if(t={alpha_lower:26,alpha_upper:26,alpha:52,alphanumeric:62,digits:10,symbols:33},e.regex_name in t)return Math.pow(t[e.regex_name],e.token.length);switch(e.regex_name){case"recent_year":return r=Math.abs(parseInt(e.regex_match[0])-this.REFERENCE_YEAR),r=Math.max(r,this.MIN_YEAR_SPACE)}},date_guesses:function(e){var t,r;return r=Math.max(Math.abs(e.year-this.REFERENCE_YEAR),this.MIN_YEAR_SPACE),t=365*r,e.separator&&(t*=4),t},KEYBOARD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.qwerty),KEYPAD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.keypad),KEYBOARD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.qwerty,t=[];for(k in e)v=e[k],t.push(k);return t}().length,KEYPAD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.keypad,t=[];for(k in e)v=e[k],t.push(k);return t}().length,spatial_guesses:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S;for("qwerty"===(E=e.graph)||"dvorak"===E?(l=this.KEYBOARD_STARTING_POSITIONS,s=this.KEYBOARD_AVERAGE_DEGREE):(l=this.KEYPAD_STARTING_POSITIONS,s=this.KEYPAD_AVERAGE_DEGREE),a=0,t=e.token.length,A=e.turns,u=_=2,c=t;2<=c?_<=c:_>=c;u=2<=c?++_:--_)for(o=Math.min(A,u-1),i=h=1,g=o;1<=g?h<=g:h>=g;i=1<=g?++h:--h)a+=this.nCk(u-1,i-1)*l*Math.pow(s,i);if(e.shifted_count)if(r=e.shifted_count,n=e.token.length-e.shifted_count,0===r||0===n)a*=2;else{for(p=0,u=S=1,f=Math.min(r,n);1<=f?S<=f:S>=f;u=1<=f?++S:--S)p+=this.nCk(r+n,u);a*=p}return a},dictionary_guesses:function(e){var t;return e.base_guesses=e.rank,e.uppercase_variations=this.uppercase_variations(e),e.l33t_variations=this.l33t_variations(e),t=e.reversed&&2||1,e.base_guesses*e.uppercase_variations*e.l33t_variations*t},START_UPPER:/^[A-Z][^A-Z]+$/,END_UPPER:/^[^A-Z]+[A-Z]$/,ALL_UPPER:/^[^a-z]+$/,ALL_LOWER:/^[^A-Z]+$/,uppercase_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c;if(c=e.token,c.match(this.ALL_LOWER)||c.toLowerCase()===c)return 1;for(_=[this.START_UPPER,this.END_UPPER,this.ALL_UPPER],u=0,a=_.length;u<a;u++)if(h=_[u],c.match(h))return 2;for(r=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[A-Z]/)&&s.push(n);return s}().length,t=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[a-z]/)&&s.push(n);return s}().length,E=0,s=i=1,o=Math.min(r,t);1<=o?i<=o:i>=o;s=1<=o?++i:--i)E+=this.nCk(r+t,s);return E},l33t_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g;if(!e.l33t)return 1;g=1,o=e.sub;for(E in o)if(c=o[E],s=e.token.toLowerCase().split(""),t=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===E&&r.push(n);return r}().length,r=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===c&&r.push(n);return r}().length,0===t||0===r)g*=2;else{for(i=Math.min(r,t),_=0,a=u=1,h=i;1<=h?u<=h:u>=h;a=1<=h?++u:--u)_+=this.nCk(r+t,a);g*=_}return g}},module.exports=scoring;
96415
96416 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
96417 var time_estimates;time_estimates={estimate_attack_times:function(e){var t,n,s,o;n={online_throttling_100_per_hour:e/(100/3600),online_no_throttling_10_per_second:e/10,offline_slow_hashing_1e4_per_second:e/1e4,offline_fast_hashing_1e10_per_second:e/1e10},t={};for(s in n)o=n[s],t[s]=this.display_time(o);return{crack_times_seconds:n,crack_times_display:t,score:this.guesses_to_score(e)}},guesses_to_score:function(e){var t;return t=5,e<1e3+t?0:e<1e6+t?1:e<1e8+t?2:e<1e10+t?3:4},display_time:function(e){var t,n,s,o,_,r,i,a,u,c;return i=60,r=60*i,s=24*r,a=31*s,c=12*a,n=100*c,u=e<1?[null,"less than a second"]:e<i?(t=Math.round(e),[t,t+" second"]):e<r?(t=Math.round(e/i),[t,t+" minute"]):e<s?(t=Math.round(e/r),[t,t+" hour"]):e<a?(t=Math.round(e/s),[t,t+" day"]):e<c?(t=Math.round(e/a),[t,t+" month"]):e<n?(t=Math.round(e/c),[t,t+" year"]):[null,"centuries"],o=u[0],_=u[1],null!=o&&1!==o&&(_+="s"),_}},module.exports=time_estimates;
96418
96419 },{}]},{},[4])(4)
96420 });
96421
96422 </script>
96423 <script>/*
96424 * Detects entropy from a string.
96425 *
96426 * Formats include:
96427 * binary [0-1]
96428 * base 6 [0-5]
96429 * dice 6 [1-6]
96430 * decimal [0-9]
96431 * hexadecimal [0-9A-F]
96432 * card [A2-9TJQK][CDHS]
96433 *
96434 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
96435 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
96436 * entropy.
96437 */
96438
96439 window.Entropy = new (function() {
96440
96441 var TWO = new BigInteger(2);
96442
96443 // matchers returns an array of the matched events for each type of entropy.
96444 // eg
96445 // matchers.binary("010") returns ["0", "1", "0"]
96446 // matchers.binary("a10") returns ["1", "0"]
96447 // matchers.hex("a10") returns ["a", "1", "0"]
96448 var matchers = {
96449 binary: function(str) {
96450 return str.match(/[0-1]/gi) || [];
96451 },
96452 base6: function(str) {
96453 return str.match(/[0-5]/gi) || [];
96454 },
96455 dice: function(str) {
96456 return str.match(/[1-6]/gi) || []; // ie dice numbers
96457 },
96458 base10: function(str) {
96459 return str.match(/[0-9]/gi) || [];
96460 },
96461 hex: function(str) {
96462 return str.match(/[0-9A-F]/gi) || [];
96463 },
96464 card: function(str) {
96465 // Format is NumberSuit, eg
96466 // AH ace of hearts
96467 // 8C eight of clubs
96468 // TD ten of diamonds
96469 // JS jack of spades
96470 // QH queen of hearts
96471 // KC king of clubs
96472 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
96473 }
96474 }
96475
96476 // Convert array of cards from ["ac", "4d", "ks"]
96477 // to numbers between 0 and 51 [0, 16, 51]
96478 function convertCardsToInts(cards) {
96479 var ints = [];
96480 var values = "a23456789tjqk";
96481 var suits = "cdhs";
96482 for (var i=0; i<cards.length; i++) {
96483 var card = cards[i].toLowerCase();
96484 var value = card[0];
96485 var suit = card[1];
96486 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
96487 ints.push(asInt);
96488 }
96489 return ints;
96490 }
96491
96492 this.fromString = function(rawEntropyStr) {
96493 // Find type of entropy being used (binary, hex, dice etc)
96494 var base = getBase(rawEntropyStr);
96495 // Convert dice to base6 entropy (ie 1-6 to 0-5)
96496 // This is done by changing all 6s to 0s
96497 if (base.str == "dice") {
96498 var newParts = [];
96499 var newInts = [];
96500 for (var i=0; i<base.parts.length; i++) {
96501 var c = base.parts[i];
96502 if ("12345".indexOf(c) > -1) {
96503 newParts[i] = base.parts[i];
96504 newInts[i] = base.ints[i];
96505 }
96506 else {
96507 newParts[i] = "0";
96508 newInts[i] = 0;
96509 }
96510 }
96511 base.str = "base 6 (dice)";
96512 base.ints = newInts;
96513 base.parts = newParts;
96514 base.matcher = matchers.base6;
96515 }
96516 // Detect empty entropy
96517 if (base.parts.length == 0) {
96518 return {
96519 binaryStr: "",
96520 cleanStr: "",
96521 cleanHtml: "",
96522 base: base,
96523 };
96524 }
96525 // Convert base.ints to BigInteger.
96526 // Due to using unusual bases, eg cards of base52, this is not as simple as
96527 // using BigInteger.parse()
96528 var entropyInt = BigInteger.ZERO;
96529 for (var i=base.ints.length-1; i>=0; i--) {
96530 var thisInt = BigInteger.parse(base.ints[i]);
96531 var power = (base.ints.length - 1) - i;
96532 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
96533 entropyInt = entropyInt.add(additionalEntropy);
96534 }
96535 // Convert entropy to binary
96536 var entropyBin = entropyInt.toString(2);
96537 // If the first integer is small, it must be padded with zeros.
96538 // Otherwise the chance of the first bit being 1 is 100%, which is
96539 // obviously incorrect.
96540 // This is not perfect for non-2^n bases.
96541 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
96542 while (entropyBin.length < expectedBits) {
96543 entropyBin = "0" + entropyBin;
96544 }
96545 // Calculate the number of bits per event
96546 var bitsPerEvent = Math.log2(base.asInt);
96547 // Cards binary must be handled differently, since they're not replaced
96548 if (base.asInt == 52) {
96549 var cardEntropy = processCardEntropy(base.parts);
96550 entropyBin = cardEntropy.binaryStr;
96551 bitsPerEvent = cardEntropy.bitsPerEvent;
96552 }
96553 // Supply a 'filtered' entropy string for display purposes
96554 var entropyClean = base.parts.join("");
96555 var entropyHtml = base.parts.join("");
96556 if (base.asInt == 52) {
96557 entropyClean = base.parts.join(" ").toUpperCase();
96558 entropyClean = entropyClean.replace(/C/g, "\u2663");
96559 entropyClean = entropyClean.replace(/D/g, "\u2666");
96560 entropyClean = entropyClean.replace(/H/g, "\u2665");
96561 entropyClean = entropyClean.replace(/S/g, "\u2660");
96562 entropyHtml = base.parts.join(" ").toUpperCase();
96563 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
96564 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
96565 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
96566 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
96567 }
96568 // Return the result
96569 var e = {
96570 binaryStr: entropyBin,
96571 cleanStr: entropyClean,
96572 cleanHtml: entropyHtml,
96573 bitsPerEvent: bitsPerEvent,
96574 base: base,
96575 }
96576 return e;
96577 }
96578
96579 function getSortedDeck() {
96580 var s = [];
96581 var suits = "CDHS";
96582 var values = "A23456789TJQK";
96583 for (var i=0; i<suits.length; i++) {
96584 for (var j=0; j<values.length; j++) {
96585 s.push(values[j]+suits[i]);
96586 }
96587 }
96588 return s;
96589 }
96590
96591 function getBase(str) {
96592 // Need to get the lowest base for the supplied entropy.
96593 // This prevents interpreting, say, dice rolls as hexadecimal.
96594 var binaryMatches = matchers.binary(str);
96595 var hexMatches = matchers.hex(str);
96596 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
96597 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
96598 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
96599 return {
96600 ints: ints,
96601 parts: binaryMatches,
96602 matcher: matchers.binary,
96603 asInt: 2,
96604 str: "binary",
96605 }
96606 }
96607 var cardMatches = matchers.card(str);
96608 if (cardMatches.length >= hexMatches.length / 2) {
96609 var ints = convertCardsToInts(cardMatches);
96610 return {
96611 ints: ints,
96612 parts: cardMatches,
96613 matcher: matchers.card,
96614 asInt: 52,
96615 str: "card",
96616 }
96617 }
96618 var diceMatches = matchers.dice(str);
96619 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
96620 var ints = diceMatches.map(function(i) { return parseInt(i) });
96621 return {
96622 ints: ints,
96623 parts: diceMatches,
96624 matcher: matchers.dice,
96625 asInt: 6,
96626 str: "dice",
96627 }
96628 }
96629 var base6Matches = matchers.base6(str);
96630 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
96631 var ints = base6Matches.map(function(i) { return parseInt(i) });
96632 return {
96633 ints: ints,
96634 parts: base6Matches,
96635 matcher: matchers.base6,
96636 asInt: 6,
96637 str: "base 6",
96638 }
96639 }
96640 var base10Matches = matchers.base10(str);
96641 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
96642 var ints = base10Matches.map(function(i) { return parseInt(i) });
96643 return {
96644 ints: ints,
96645 parts: base10Matches,
96646 matcher: matchers.base10,
96647 asInt: 10,
96648 str: "base 10",
96649 }
96650 }
96651 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
96652 return {
96653 ints: ints,
96654 parts: hexMatches,
96655 matcher: matchers.hex,
96656 asInt: 16,
96657 str: "hexadecimal",
96658 }
96659 }
96660
96661 // Assume cards are NOT replaced.
96662 // Additional entropy decreases as more cards are used. This means
96663 // total possible entropy is measured using n!, not base^n.
96664 // eg the second last card can be only one of two, not one of fifty two
96665 // so the added entropy for that card is only one bit at most
96666 function processCardEntropy(cards) {
96667 // Track how many instances of each card have been used, and thus
96668 // how many decks are in use.
96669 var cardCounts = {};
96670 var numberOfDecks = 0;
96671 // Work out number of decks by max(duplicates)
96672 for (var i=0; i<cards.length; i++) {
96673 // Get the card that was drawn
96674 var cardLower = cards[i];
96675 var card = cardLower.toUpperCase();
96676 // Initialize the count for this card if needed
96677 if (!(card in cardCounts)) {
96678 cardCounts[card] = 0;
96679 }
96680 cardCounts[card] += 1;
96681 // See if this is max(duplicates)
96682 if (cardCounts[card] > numberOfDecks) {
96683 numberOfDecks = cardCounts[card];
96684 }
96685 }
96686 // Work out the total number of bits for this many decks
96687 // See http://crypto.stackexchange.com/q/41886
96688 var gainedBits = 0;
96689 // Equivalent of Math.log2(factorial(52*numberOfDecks))
96690 // which becomes infinity for numberOfDecks > 4
96691 for (var i=1; i<=52*numberOfDecks; i++) {
96692 gainedBits = gainedBits + Math.log2(i);
96693 }
96694 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
96695 var maxBits = gainedBits - lostBits;
96696 // Convert the drawn cards to a binary representation.
96697 // The exact technique for doing this is unclear.
96698 // See
96699 // http://crypto.stackexchange.com/a/41896
96700 // "I even doubt that this is well defined (only the average entropy
96701 // is, I believe)."
96702 // See
96703 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
96704 // "The binary representation can be the first log(permutations,2) bits
96705 // of the sha-2 hash of the normalized deck string."
96706 //
96707 // In this specific implementation, the first N bits of the hash of the
96708 // normalized cards string is being used. Uppercase, no spaces; eg
96709 // sha256("AH8DQSTC2H")
96710 var totalCards = numberOfDecks * 52;
96711 var percentUsed = cards.length / totalCards;
96712 // Calculate the average number of bits of entropy for the number of
96713 // cards drawn.
96714 var numberOfBits = Math.floor(maxBits * percentUsed);
96715 // Create a normalized string of the selected cards
96716 var normalizedCards = cards.join("").toUpperCase();
96717 // Convert to binary using the SHA256 hash of the normalized cards.
96718 // If the number of bits is more than 256, multiple hashes
96719 // are used until the required number of bits is reached.
96720 var entropyBin = "";
96721 var iterations = 0;
96722 while (entropyBin.length < numberOfBits) {
96723 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
96724 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
96725 for (var i=0; i<hashHex.length; i++) {
96726 var decimal = parseInt(hashHex[i], 16);
96727 var binary = decimal.toString(2);
96728 while (binary.length < 4) {
96729 binary = "0" + binary;
96730 }
96731 entropyBin = entropyBin + binary;
96732 }
96733 iterations = iterations + 1;
96734 }
96735 // Truncate to the appropriate number of bits.
96736 entropyBin = entropyBin.substring(0, numberOfBits);
96737 // Get the number of bits per event
96738 bitsPerEvent = maxBits / totalCards;
96739 return {
96740 binaryStr: entropyBin,
96741 bitsPerEvent: bitsPerEvent,
96742 }
96743 }
96744
96745 // Polyfill for Math.log2
96746 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
96747 Math.log2 = Math.log2 || function(x) {
96748 // The polyfill isn't good enough because of the poor accuracy of
96749 // Math.LOG2E
96750 // log2(8) gave 2.9999999999999996 which when floored causes issues.
96751 // So instead use the BigInteger library to get it right.
96752 return BigInteger.log(x) / BigInteger.log(2);
96753 };
96754
96755 // Depends on BigInteger
96756 function factorial(n) {
96757 if (n == 0) {
96758 return 1;
96759 }
96760 f = BigInteger.ONE;
96761 for (var i=1; i<=n; i++) {
96762 f = f.multiply(new BigInteger(i));
96763 }
96764 return f;
96765 }
96766
96767 })();
96768 </script>
96769 <script>(function() {
96770
96771 // mnemonics is populated as required by getLanguage
96772 var mnemonics = { "english": new Mnemonic("english") };
96773 var mnemonic = mnemonics["english"];
96774 var seed = null;
96775 var bip32RootKey = null;
96776 var bip32ExtendedKey = null;
96777 var network = bitcoinjs.bitcoin.networks.bitcoin;
96778 var addressRowTemplate = $("#address-row-template");
96779
96780 var showIndex = true;
96781 var showAddress = true;
96782 var showPubKey = true;
96783 var showPrivKey = true;
96784 var showQr = false;
96785 var litecoinUseLtub = true;
96786
96787 var entropyChangeTimeoutEvent = null;
96788 var phraseChangeTimeoutEvent = null;
96789 var rootKeyChangedTimeoutEvent = null;
96790
96791 var generationProcesses = [];
96792
96793 var DOM = {};
96794 DOM.network = $(".network");
96795 DOM.bip32Client = $("#bip32-client");
96796 DOM.phraseNetwork = $("#network-phrase");
96797 DOM.useEntropy = $(".use-entropy");
96798 DOM.entropyContainer = $(".entropy-container");
96799 DOM.entropy = $(".entropy");
96800 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
96801 DOM.entropyType = DOM.entropyContainer.find(".type");
96802 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
96803 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
96804 DOM.entropyBits = DOM.entropyContainer.find(".bits");
96805 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
96806 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
96807 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
96808 DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
96809 DOM.entropyChecksum = DOM.entropyContainer.find(".checksum");
96810 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
96811 DOM.entropyWeakEntropyOverrideWarning = DOM.entropyContainer.find(".weak-entropy-override-warning");
96812 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
96813 DOM.phrase = $(".phrase");
96814 DOM.passphrase = $(".passphrase");
96815 DOM.generateContainer = $(".generate-container");
96816 DOM.generate = $(".generate");
96817 DOM.seed = $(".seed");
96818 DOM.rootKey = $(".root-key");
96819 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
96820 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
96821 DOM.extendedPrivKey = $(".extended-priv-key");
96822 DOM.extendedPubKey = $(".extended-pub-key");
96823 DOM.bip32tab = $("#bip32-tab");
96824 DOM.bip44tab = $("#bip44-tab");
96825 DOM.bip49tab = $("#bip49-tab");
96826 DOM.bip84tab = $("#bip84-tab");
96827 DOM.bip141tab = $("#bip141-tab");
96828 DOM.bip32panel = $("#bip32");
96829 DOM.bip44panel = $("#bip44");
96830 DOM.bip49panel = $("#bip49");
96831 DOM.bip32path = $("#bip32-path");
96832 DOM.bip44path = $("#bip44-path");
96833 DOM.bip44purpose = $("#bip44 .purpose");
96834 DOM.bip44coin = $("#bip44 .coin");
96835 DOM.bip44account = $("#bip44 .account");
96836 DOM.bip44accountXprv = $("#bip44 .account-xprv");
96837 DOM.bip44accountXpub = $("#bip44 .account-xpub");
96838 DOM.bip44change = $("#bip44 .change");
96839 DOM.bip49unavailable = $("#bip49 .unavailable");
96840 DOM.bip49available = $("#bip49 .available");
96841 DOM.bip49path = $("#bip49-path");
96842 DOM.bip49purpose = $("#bip49 .purpose");
96843 DOM.bip49coin = $("#bip49 .coin");
96844 DOM.bip49account = $("#bip49 .account");
96845 DOM.bip49accountXprv = $("#bip49 .account-xprv");
96846 DOM.bip49accountXpub = $("#bip49 .account-xpub");
96847 DOM.bip49change = $("#bip49 .change");
96848 DOM.bip84path = $("#bip84-path");
96849 DOM.bip84purpose = $("#bip84 .purpose");
96850 DOM.bip84coin = $("#bip84 .coin");
96851 DOM.bip84account = $("#bip84 .account");
96852 DOM.bip84accountXprv = $("#bip84 .account-xprv");
96853 DOM.bip84accountXpub = $("#bip84 .account-xpub");
96854 DOM.bip84change = $("#bip84 .change");
96855 DOM.bip141unavailable = $("#bip141 .unavailable");
96856 DOM.bip141available = $("#bip141 .available");
96857 DOM.bip141path = $("#bip141-path");
96858 DOM.bip141semantics = $(".bip141-semantics");
96859 DOM.generatedStrength = $(".generate-container .strength");
96860 DOM.generatedStrengthWarning = $(".generate-container .warning");
96861 DOM.hardenedAddresses = $(".hardened-addresses");
96862 DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
96863 DOM.useBitpayAddresses = $(".use-bitpay-addresses");
96864 DOM.useBip38 = $(".use-bip38");
96865 DOM.bip38Password = $(".bip38-password");
96866 DOM.addresses = $(".addresses");
96867 DOM.csvTab = $("#csv-tab a");
96868 DOM.csv = $(".csv");
96869 DOM.rowsToAdd = $(".rows-to-add");
96870 DOM.more = $(".more");
96871 DOM.moreRowsStartIndex = $(".more-rows-start-index");
96872 DOM.feedback = $(".feedback");
96873 DOM.tab = $(".derivation-type a");
96874 DOM.indexToggle = $(".index-toggle");
96875 DOM.addressToggle = $(".address-toggle");
96876 DOM.publicKeyToggle = $(".public-key-toggle");
96877 DOM.privateKeyToggle = $(".private-key-toggle");
96878 DOM.languages = $(".languages a");
96879 DOM.qrContainer = $(".qr-container");
96880 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
96881 DOM.qrImage = DOM.qrContainer.find(".qr-image");
96882 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
96883 DOM.showQrEls = $("[data-show-qr]");
96884
96885 function init() {
96886 // Events
96887 DOM.generatedStrength.on("change", generatedStrengthChanged);
96888 DOM.network.on("change", networkChanged);
96889 DOM.bip32Client.on("change", bip32ClientChanged);
96890 DOM.useEntropy.on("change", setEntropyVisibility);
96891 DOM.entropy.on("input", delayedEntropyChanged);
96892 DOM.entropyMnemonicLength.on("change", entropyChanged);
96893 DOM.phrase.on("input", delayedPhraseChanged);
96894 DOM.passphrase.on("input", delayedPhraseChanged);
96895 DOM.generate.on("click", generateClicked);
96896 DOM.more.on("click", showMore);
96897 DOM.rootKey.on("input", delayedRootKeyChanged);
96898 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
96899 DOM.bip32path.on("input", calcForDerivationPath);
96900 DOM.bip44account.on("input", calcForDerivationPath);
96901 DOM.bip44change.on("input", calcForDerivationPath);
96902 DOM.bip49account.on("input", calcForDerivationPath);
96903 DOM.bip49change.on("input", calcForDerivationPath);
96904 DOM.bip84account.on("input", calcForDerivationPath);
96905 DOM.bip84change.on("input", calcForDerivationPath);
96906 DOM.bip141path.on("input", calcForDerivationPath);
96907 DOM.bip141semantics.on("change", tabChanged);
96908 DOM.tab.on("shown.bs.tab", tabChanged);
96909 DOM.hardenedAddresses.on("change", calcForDerivationPath);
96910 DOM.useBip38.on("change", calcForDerivationPath);
96911 DOM.bip38Password.on("change", calcForDerivationPath);
96912 DOM.indexToggle.on("click", toggleIndexes);
96913 DOM.addressToggle.on("click", toggleAddresses);
96914 DOM.publicKeyToggle.on("click", togglePublicKeys);
96915 DOM.privateKeyToggle.on("click", togglePrivateKeys);
96916 DOM.csvTab.on("click", updateCsv);
96917 DOM.languages.on("click", languageChanged);
96918 DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
96919 setQrEvents(DOM.showQrEls);
96920 disableForms();
96921 hidePending();
96922 hideValidationError();
96923 populateNetworkSelect();
96924 populateClientSelect();
96925 }
96926
96927 // Event handlers
96928
96929 function generatedStrengthChanged() {
96930 var strength = parseInt(DOM.generatedStrength.val());
96931 if (strength < 12) {
96932 DOM.generatedStrengthWarning.removeClass("hidden");
96933 }
96934 else {
96935 DOM.generatedStrengthWarning.addClass("hidden");
96936 }
96937 }
96938
96939 function networkChanged(e) {
96940 clearDerivedKeys();
96941 clearAddressesList();
96942 DOM.litecoinLtubContainer.addClass("hidden");
96943 DOM.useBitpayAddressesContainer.addClass("hidden");
96944 var networkIndex = e.target.value;
96945 var network = networks[networkIndex];
96946 network.onSelect();
96947 if (network.segwitAvailable) {
96948 adjustNetworkForSegwit();
96949 showSegwitAvailable();
96950 }
96951 else {
96952 showSegwitUnavailable();
96953 }
96954 if (seed != null) {
96955 phraseChanged();
96956 }
96957 else {
96958 rootKeyChanged();
96959 }
96960 }
96961
96962 function bip32ClientChanged(e) {
96963 var clientIndex = DOM.bip32Client.val();
96964 if (clientIndex == "custom") {
96965 DOM.bip32path.prop("readonly", false);
96966 }
96967 else {
96968 DOM.bip32path.prop("readonly", true);
96969 clients[clientIndex].onSelect();
96970 if (seed != null) {
96971 phraseChanged();
96972 }
96973 else {
96974 rootKeyChanged();
96975 }
96976 }
96977 }
96978
96979 function setEntropyVisibility() {
96980 if (isUsingOwnEntropy()) {
96981 DOM.entropyContainer.removeClass("hidden");
96982 DOM.generateContainer.addClass("hidden");
96983 DOM.phrase.prop("readonly", true);
96984 DOM.entropy.focus();
96985 entropyChanged();
96986 }
96987 else {
96988 DOM.entropyContainer.addClass("hidden");
96989 DOM.generateContainer.removeClass("hidden");
96990 DOM.phrase.prop("readonly", false);
96991 hidePending();
96992 }
96993 }
96994
96995 function delayedPhraseChanged() {
96996 hideValidationError();
96997 seed = null;
96998 bip32RootKey = null;
96999 bip32ExtendedKey = null;
97000 clearAddressesList();
97001 showPending();
97002 if (phraseChangeTimeoutEvent != null) {
97003 clearTimeout(phraseChangeTimeoutEvent);
97004 }
97005 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
97006 }
97007
97008 function phraseChanged() {
97009 showPending();
97010 setMnemonicLanguage();
97011 // Get the mnemonic phrase
97012 var phrase = DOM.phrase.val();
97013 var errorText = findPhraseErrors(phrase);
97014 if (errorText) {
97015 showValidationError(errorText);
97016 return;
97017 }
97018 // Calculate and display
97019 var passphrase = DOM.passphrase.val();
97020 calcBip32RootKeyFromSeed(phrase, passphrase);
97021 calcForDerivationPath();
97022 // Show the word indexes
97023 showWordIndexes();
97024 }
97025
97026 function tabChanged() {
97027 showPending();
97028 adjustNetworkForSegwit();
97029 var phrase = DOM.phrase.val();
97030 if (phrase != "") {
97031 // Calculate and display for mnemonic
97032 var errorText = findPhraseErrors(phrase);
97033 if (errorText) {
97034 showValidationError(errorText);
97035 return;
97036 }
97037 // Calculate and display
97038 var passphrase = DOM.passphrase.val();
97039 calcBip32RootKeyFromSeed(phrase, passphrase);
97040 }
97041 else {
97042 // Calculate and display for root key
97043 var rootKeyBase58 = DOM.rootKey.val();
97044 var errorText = validateRootKey(rootKeyBase58);
97045 if (errorText) {
97046 showValidationError(errorText);
97047 return;
97048 }
97049 // Calculate and display
97050 calcBip32RootKeyFromBase58(rootKeyBase58);
97051 }
97052 calcForDerivationPath();
97053 }
97054
97055 function delayedEntropyChanged() {
97056 hideValidationError();
97057 showPending();
97058 if (entropyChangeTimeoutEvent != null) {
97059 clearTimeout(entropyChangeTimeoutEvent);
97060 }
97061 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
97062 }
97063
97064 function entropyChanged() {
97065 // If blank entropy, clear mnemonic, addresses, errors
97066 if (DOM.entropy.val().trim().length == 0) {
97067 clearDisplay();
97068 clearEntropyFeedback();
97069 DOM.phrase.val("");
97070 showValidationError("Blank entropy");
97071 return;
97072 }
97073 // Get the current phrase to detect changes
97074 var phrase = DOM.phrase.val();
97075 // Set the phrase from the entropy
97076 setMnemonicFromEntropy();
97077 // Recalc addresses if the phrase has changed
97078 var newPhrase = DOM.phrase.val();
97079 if (newPhrase != phrase) {
97080 if (newPhrase.length == 0) {
97081 clearDisplay();
97082 }
97083 else {
97084 phraseChanged();
97085 }
97086 }
97087 else {
97088 hidePending();
97089 }
97090 }
97091
97092 function delayedRootKeyChanged() {
97093 // Warn if there is an existing mnemonic or passphrase.
97094 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
97095 if (!confirm("This will clear existing mnemonic and passphrase")) {
97096 DOM.rootKey.val(bip32RootKey);
97097 return
97098 }
97099 }
97100 hideValidationError();
97101 showPending();
97102 // Clear existing mnemonic and passphrase
97103 DOM.phrase.val("");
97104 DOM.passphrase.val("");
97105 seed = null;
97106 if (rootKeyChangedTimeoutEvent != null) {
97107 clearTimeout(rootKeyChangedTimeoutEvent);
97108 }
97109 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
97110 }
97111
97112 function rootKeyChanged() {
97113 showPending();
97114 hideValidationError();
97115 var rootKeyBase58 = DOM.rootKey.val();
97116 var errorText = validateRootKey(rootKeyBase58);
97117 if (errorText) {
97118 showValidationError(errorText);
97119 return;
97120 }
97121 // Calculate and display
97122 calcBip32RootKeyFromBase58(rootKeyBase58);
97123 calcForDerivationPath();
97124 }
97125
97126 function litecoinUseLtubChanged() {
97127 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
97128 if (litecoinUseLtub) {
97129 network = bitcoinjs.bitcoin.networks.litecoin;
97130 }
97131 else {
97132 network = bitcoinjs.bitcoin.networks.litecoinXprv;
97133 }
97134 phraseChanged();
97135 }
97136
97137 function calcForDerivationPath() {
97138 clearDerivedKeys();
97139 clearAddressesList();
97140 showPending();
97141 // Don't show segwit if it's selected but network doesn't support it
97142 if (segwitSelected() && !networkHasSegwit()) {
97143 return;
97144 }
97145 // Get the derivation path
97146 var derivationPath = getDerivationPath();
97147 var errorText = findDerivationPathErrors(derivationPath);
97148 if (errorText) {
97149 showValidationError(errorText);
97150 return;
97151 }
97152 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
97153 if (bip44TabSelected()) {
97154 displayBip44Info();
97155 }
97156 else if (bip49TabSelected()) {
97157 displayBip49Info();
97158 }
97159 else if (bip84TabSelected()) {
97160 displayBip84Info();
97161 }
97162 displayBip32Info();
97163 }
97164
97165 function generateClicked() {
97166 if (isUsingOwnEntropy()) {
97167 return;
97168 }
97169 clearDisplay();
97170 showPending();
97171 setTimeout(function() {
97172 setMnemonicLanguage();
97173 var phrase = generateRandomPhrase();
97174 if (!phrase) {
97175 return;
97176 }
97177 phraseChanged();
97178 }, 50);
97179 }
97180
97181 function languageChanged() {
97182 setTimeout(function() {
97183 setMnemonicLanguage();
97184 if (DOM.phrase.val().length > 0) {
97185 var newPhrase = convertPhraseToNewLanguage();
97186 DOM.phrase.val(newPhrase);
97187 phraseChanged();
97188 }
97189 else {
97190 DOM.generate.trigger("click");
97191 }
97192 }, 50);
97193 }
97194
97195 function useBitpayAddressesChange() {
97196 setBitcoinCashNetworkValues();
97197 phraseChanged();
97198 }
97199
97200 function toggleIndexes() {
97201 showIndex = !showIndex;
97202 $("td.index span").toggleClass("invisible");
97203 }
97204
97205 function toggleAddresses() {
97206 showAddress = !showAddress;
97207 $("td.address span").toggleClass("invisible");
97208 }
97209
97210 function togglePublicKeys() {
97211 showPubKey = !showPubKey;
97212 $("td.pubkey span").toggleClass("invisible");
97213 }
97214
97215 function togglePrivateKeys() {
97216 showPrivKey = !showPrivKey;
97217 $("td.privkey span").toggleClass("invisible");
97218 }
97219
97220 // Private methods
97221
97222 function generateRandomPhrase() {
97223 if (!hasStrongRandom()) {
97224 var errorText = "This browser does not support strong randomness";
97225 showValidationError(errorText);
97226 return;
97227 }
97228 // get the amount of entropy to use
97229 var numWords = parseInt(DOM.generatedStrength.val());
97230 var strength = numWords / 3 * 32;
97231 var buffer = new Uint8Array(strength / 8);
97232 // create secure entropy
97233 var data = crypto.getRandomValues(buffer);
97234 // show the words
97235 var words = mnemonic.toMnemonic(data);
97236 DOM.phrase.val(words);
97237 // show the entropy
97238 var entropyHex = uint8ArrayToHex(data);
97239 DOM.entropy.val(entropyHex);
97240 // ensure entropy fields are consistent with what is being displayed
97241 DOM.entropyMnemonicLength.val("raw");
97242 return words;
97243 }
97244
97245 function calcBip32RootKeyFromSeed(phrase, passphrase) {
97246 seed = mnemonic.toSeed(phrase, passphrase);
97247 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
97248 }
97249
97250 function calcBip32RootKeyFromBase58(rootKeyBase58) {
97251 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
97252 }
97253
97254 function calcBip32ExtendedKey(path) {
97255 // Check there's a root key to derive from
97256 if (!bip32RootKey) {
97257 return bip32RootKey;
97258 }
97259 var extendedKey = bip32RootKey;
97260 // Derive the key from the path
97261 var pathBits = path.split("/");
97262 for (var i=0; i<pathBits.length; i++) {
97263 var bit = pathBits[i];
97264 var index = parseInt(bit);
97265 if (isNaN(index)) {
97266 continue;
97267 }
97268 var hardened = bit[bit.length-1] == "'";
97269 var isPriv = !(extendedKey.isNeutered());
97270 var invalidDerivationPath = hardened && !isPriv;
97271 if (invalidDerivationPath) {
97272 extendedKey = null;
97273 }
97274 else if (hardened) {
97275 extendedKey = extendedKey.deriveHardened(index);
97276 }
97277 else {
97278 extendedKey = extendedKey.derive(index);
97279 }
97280 }
97281 return extendedKey
97282 }
97283
97284 function showValidationError(errorText) {
97285 DOM.feedback
97286 .text(errorText)
97287 .show();
97288 }
97289
97290 function hideValidationError() {
97291 DOM.feedback
97292 .text("")
97293 .hide();
97294 }
97295
97296 function findPhraseErrors(phrase) {
97297 // Preprocess the words
97298 phrase = mnemonic.normalizeString(phrase);
97299 var words = phraseToWordArray(phrase);
97300 // Detect blank phrase
97301 if (words.length == 0) {
97302 return "Blank mnemonic";
97303 }
97304 // Check each word
97305 for (var i=0; i<words.length; i++) {
97306 var word = words[i];
97307 var language = getLanguage();
97308 if (WORDLISTS[language].indexOf(word) == -1) {
97309 console.log("Finding closest match to " + word);
97310 var nearestWord = findNearestWord(word);
97311 return word + " not in wordlist, did you mean " + nearestWord + "?";
97312 }
97313 }
97314 // Check the words are valid
97315 var properPhrase = wordArrayToPhrase(words);
97316 var isValid = mnemonic.check(properPhrase);
97317 if (!isValid) {
97318 return "Invalid mnemonic";
97319 }
97320 return false;
97321 }
97322
97323 function validateRootKey(rootKeyBase58) {
97324 try {
97325 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
97326 }
97327 catch (e) {
97328 return "Invalid root key";
97329 }
97330 return "";
97331 }
97332
97333 function getDerivationPath() {
97334 if (bip44TabSelected()) {
97335 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
97336 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
97337 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
97338 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
97339 var path = "m/";
97340 path += purpose + "'/";
97341 path += coin + "'/";
97342 path += account + "'/";
97343 path += change;
97344 DOM.bip44path.val(path);
97345 var derivationPath = DOM.bip44path.val();
97346 console.log("Using derivation path from BIP44 tab: " + derivationPath);
97347 return derivationPath;
97348 }
97349 else if (bip49TabSelected()) {
97350 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
97351 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
97352 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
97353 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
97354 var path = "m/";
97355 path += purpose + "'/";
97356 path += coin + "'/";
97357 path += account + "'/";
97358 path += change;
97359 DOM.bip49path.val(path);
97360 var derivationPath = DOM.bip49path.val();
97361 console.log("Using derivation path from BIP49 tab: " + derivationPath);
97362 return derivationPath;
97363 }
97364 else if (bip84TabSelected()) {
97365 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
97366 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
97367 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
97368 var change = parseIntNoNaN(DOM.bip84change.val(), 0);
97369 var path = "m/";
97370 path += purpose + "'/";
97371 path += coin + "'/";
97372 path += account + "'/";
97373 path += change;
97374 DOM.bip84path.val(path);
97375 var derivationPath = DOM.bip84path.val();
97376 console.log("Using derivation path from BIP84 tab: " + derivationPath);
97377 return derivationPath;
97378 }
97379 else if (bip32TabSelected()) {
97380 var derivationPath = DOM.bip32path.val();
97381 console.log("Using derivation path from BIP32 tab: " + derivationPath);
97382 return derivationPath;
97383 }
97384 else if (bip141TabSelected()) {
97385 var derivationPath = DOM.bip141path.val();
97386 console.log("Using derivation path from BIP141 tab: " + derivationPath);
97387 return derivationPath;
97388 }
97389 else {
97390 console.log("Unknown derivation path");
97391 }
97392 }
97393
97394 function findDerivationPathErrors(path) {
97395 // TODO is not perfect but is better than nothing
97396 // Inspired by
97397 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
97398 // and
97399 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
97400 var maxDepth = 255; // TODO verify this!!
97401 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
97402 if (path[0] != "m") {
97403 return "First character must be 'm'";
97404 }
97405 if (path.length > 1) {
97406 if (path[1] != "/") {
97407 return "Separator must be '/'";
97408 }
97409 var indexes = path.split("/");
97410 if (indexes.length > maxDepth) {
97411 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
97412 }
97413 for (var depth = 1; depth<indexes.length; depth++) {
97414 var index = indexes[depth];
97415 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
97416 if (invalidChars.length > 0) {
97417 return "Invalid characters " + invalidChars + " found at depth " + depth;
97418 }
97419 var indexValue = parseInt(index.replace("'", ""));
97420 if (isNaN(depth)) {
97421 return "Invalid number at depth " + depth;
97422 }
97423 if (indexValue > maxIndexValue) {
97424 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
97425 }
97426 }
97427 }
97428 // Check root key exists or else derivation path is useless!
97429 if (!bip32RootKey) {
97430 return "No root key";
97431 }
97432 // Check no hardened derivation path when using xpub keys
97433 var hardenedPath = path.indexOf("'") > -1;
97434 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
97435 var hardened = hardenedPath || hardenedAddresses;
97436 var isXpubkey = bip32RootKey.isNeutered();
97437 if (hardened && isXpubkey) {
97438 return "Hardened derivation path is invalid with xpub key";
97439 }
97440 return false;
97441 }
97442
97443 function displayBip44Info() {
97444 // Get the derivation path for the account
97445 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
97446 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
97447 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
97448 var path = "m/";
97449 path += purpose + "'/";
97450 path += coin + "'/";
97451 path += account + "'/";
97452 // Calculate the account extended keys
97453 var accountExtendedKey = calcBip32ExtendedKey(path);
97454 var accountXprv = accountExtendedKey.toBase58();
97455 var accountXpub = accountExtendedKey.neutered().toBase58();
97456 // Display the extended keys
97457 DOM.bip44accountXprv.val(accountXprv);
97458 DOM.bip44accountXpub.val(accountXpub);
97459 }
97460
97461 function displayBip49Info() {
97462 // Get the derivation path for the account
97463 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
97464 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
97465 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
97466 var path = "m/";
97467 path += purpose + "'/";
97468 path += coin + "'/";
97469 path += account + "'/";
97470 // Calculate the account extended keys
97471 var accountExtendedKey = calcBip32ExtendedKey(path);
97472 var accountXprv = accountExtendedKey.toBase58();
97473 var accountXpub = accountExtendedKey.neutered().toBase58();
97474 // Display the extended keys
97475 DOM.bip49accountXprv.val(accountXprv);
97476 DOM.bip49accountXpub.val(accountXpub);
97477 }
97478
97479 function displayBip84Info() {
97480 // Get the derivation path for the account
97481 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
97482 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
97483 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
97484 var path = "m/";
97485 path += purpose + "'/";
97486 path += coin + "'/";
97487 path += account + "'/";
97488 // Calculate the account extended keys
97489 var accountExtendedKey = calcBip32ExtendedKey(path);
97490 var accountXprv = accountExtendedKey.toBase58();
97491 var accountXpub = accountExtendedKey.neutered().toBase58();
97492 // Display the extended keys
97493 DOM.bip84accountXprv.val(accountXprv);
97494 DOM.bip84accountXpub.val(accountXpub);
97495 }
97496
97497 function displayBip32Info() {
97498 // Display the key
97499 DOM.seed.val(seed);
97500 var rootKey = bip32RootKey.toBase58();
97501 DOM.rootKey.val(rootKey);
97502 var xprvkeyB58 = "NA";
97503 if (!bip32ExtendedKey.isNeutered()) {
97504 xprvkeyB58 = bip32ExtendedKey.toBase58();
97505 }
97506 var extendedPrivKey = xprvkeyB58;
97507 DOM.extendedPrivKey.val(extendedPrivKey);
97508 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
97509 DOM.extendedPubKey.val(extendedPubKey);
97510 // Display the addresses and privkeys
97511 clearAddressesList();
97512 var initialAddressCount = parseInt(DOM.rowsToAdd.val());
97513 displayAddresses(0, initialAddressCount);
97514 }
97515
97516 function displayAddresses(start, total) {
97517 generationProcesses.push(new (function() {
97518
97519 var rows = [];
97520
97521 this.stop = function() {
97522 for (var i=0; i<rows.length; i++) {
97523 rows[i].shouldGenerate = false;
97524 }
97525 hidePending();
97526 }
97527
97528 for (var i=0; i<total; i++) {
97529 var index = i + start;
97530 var isLast = i == total - 1;
97531 rows.push(new TableRow(index, isLast));
97532 }
97533
97534 })());
97535 }
97536
97537 function segwitSelected() {
97538 return bip49TabSelected() || bip84TabSelected() || bip141TabSelected();
97539 }
97540
97541 function p2wpkhSelected() {
97542 return bip84TabSelected() ||
97543 bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
97544 }
97545
97546 function p2wpkhInP2shSelected() {
97547 return bip49TabSelected() ||
97548 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
97549 }
97550
97551 function TableRow(index, isLast) {
97552
97553 var self = this;
97554 this.shouldGenerate = true;
97555 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
97556 var useBip38 = DOM.useBip38.prop("checked");
97557 var bip38password = DOM.bip38Password.val();
97558 var isSegwit = segwitSelected();
97559 var segwitAvailable = networkHasSegwit();
97560 var isP2wpkh = p2wpkhSelected();
97561 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
97562
97563 function init() {
97564 calculateValues();
97565 }
97566
97567 function calculateValues() {
97568 setTimeout(function() {
97569 if (!self.shouldGenerate) {
97570 return;
97571 }
97572 // derive HDkey for this row of the table
97573 var key = "NA";
97574 if (useHardenedAddresses) {
97575 key = bip32ExtendedKey.deriveHardened(index);
97576 }
97577 else {
97578 key = bip32ExtendedKey.derive(index);
97579 }
97580 // bip38 requires uncompressed keys
97581 // see https://github.com/iancoleman/bip39/issues/140#issuecomment-352164035
97582 var keyPair = key.keyPair;
97583 var useUncompressed = useBip38;
97584 if (useUncompressed) {
97585 keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { compressed: false });
97586 }
97587 // get address
97588 var address = keyPair.getAddress().toString();
97589 // get privkey
97590 var hasPrivkey = !key.isNeutered();
97591 var privkey = "NA";
97592 if (hasPrivkey) {
97593 privkey = keyPair.toWIF(network);
97594 // BIP38 encode private key if required
97595 if (useBip38) {
97596 privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
97597 console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
97598 });
97599 }
97600 }
97601 // get pubkey
97602 var pubkey = keyPair.getPublicKeyBuffer().toString('hex');
97603 var indexText = getDerivationPath() + "/" + index;
97604 if (useHardenedAddresses) {
97605 indexText = indexText + "'";
97606 }
97607 // Ethereum values are different
97608 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
97609 var privKeyBuffer = keyPair.d.toBuffer(32);
97610 privkey = privKeyBuffer.toString('hex');
97611 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
97612 var hexAddress = addressBuffer.toString('hex');
97613 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
97614 address = ethUtil.addHexPrefix(checksumAddress);
97615 privkey = ethUtil.addHexPrefix(privkey);
97616 pubkey = ethUtil.addHexPrefix(pubkey);
97617 }
97618 // Ripple values are different
97619 if (networks[DOM.network.val()].name == "XRP - Ripple") {
97620 privkey = convertRipplePriv(privkey);
97621 address = convertRippleAdrr(address);
97622 }
97623 // Segwit addresses are different
97624 if (isSegwit) {
97625 if (!segwitAvailable) {
97626 return;
97627 }
97628 if (isP2wpkh) {
97629 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
97630 var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
97631 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
97632 }
97633 else if (isP2wpkhInP2sh) {
97634 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
97635 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
97636 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
97637 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
97638 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
97639 }
97640 }
97641 addAddressToList(indexText, address, pubkey, privkey);
97642 if (isLast) {
97643 hidePending();
97644 updateCsv();
97645 }
97646 }, 50)
97647 }
97648
97649 init();
97650
97651 }
97652
97653 function showMore() {
97654 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
97655 if (isNaN(rowsToAdd)) {
97656 rowsToAdd = 20;
97657 DOM.rowsToAdd.val("20");
97658 }
97659 var start = parseInt(DOM.moreRowsStartIndex.val())
97660 if (isNaN(start)) {
97661 start = lastIndexInTable() + 1;
97662 }
97663 else {
97664 var newStart = start + rowsToAdd;
97665 DOM.moreRowsStartIndex.val(newStart);
97666 }
97667 if (rowsToAdd > 200) {
97668 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
97669 msg += "Do you want to continue?";
97670 if (!confirm(msg)) {
97671 return;
97672 }
97673 }
97674 displayAddresses(start, rowsToAdd);
97675 }
97676
97677 function clearDisplay() {
97678 clearAddressesList();
97679 clearKeys();
97680 hideValidationError();
97681 }
97682
97683 function clearAddressesList() {
97684 DOM.addresses.empty();
97685 DOM.csv.val("");
97686 stopGenerating();
97687 }
97688
97689 function stopGenerating() {
97690 while (generationProcesses.length > 0) {
97691 var generation = generationProcesses.shift();
97692 generation.stop();
97693 }
97694 }
97695
97696 function clearKeys() {
97697 clearRootKey();
97698 clearDerivedKeys();
97699 }
97700
97701 function clearRootKey() {
97702 DOM.rootKey.val("");
97703 }
97704
97705 function clearDerivedKeys() {
97706 DOM.extendedPrivKey.val("");
97707 DOM.extendedPubKey.val("");
97708 DOM.bip44accountXprv.val("");
97709 DOM.bip44accountXpub.val("");
97710 }
97711
97712 function addAddressToList(indexText, address, pubkey, privkey) {
97713 var row = $(addressRowTemplate.html());
97714 // Elements
97715 var indexCell = row.find(".index span");
97716 var addressCell = row.find(".address span");
97717 var pubkeyCell = row.find(".pubkey span");
97718 var privkeyCell = row.find(".privkey span");
97719 // Content
97720 indexCell.text(indexText);
97721 addressCell.text(address);
97722 pubkeyCell.text(pubkey);
97723 privkeyCell.text(privkey);
97724 // Visibility
97725 if (!showIndex) {
97726 indexCell.addClass("invisible");
97727 }
97728 if (!showAddress) {
97729 addressCell.addClass("invisible");
97730 }
97731 if (!showPubKey) {
97732 pubkeyCell.addClass("invisible");
97733 }
97734 if (!showPrivKey) {
97735 privkeyCell.addClass("invisible");
97736 }
97737 DOM.addresses.append(row);
97738 var rowShowQrEls = row.find("[data-show-qr]");
97739 setQrEvents(rowShowQrEls);
97740 }
97741
97742 function hasStrongRandom() {
97743 return 'crypto' in window && window['crypto'] !== null;
97744 }
97745
97746 function disableForms() {
97747 $("form").on("submit", function(e) {
97748 e.preventDefault();
97749 });
97750 }
97751
97752 function parseIntNoNaN(val, defaultVal) {
97753 var v = parseInt(val);
97754 if (isNaN(v)) {
97755 return defaultVal;
97756 }
97757 return v;
97758 }
97759
97760 function showPending() {
97761 DOM.feedback
97762 .text("Calculating...")
97763 .show();
97764 }
97765
97766 function findNearestWord(word) {
97767 var language = getLanguage();
97768 var words = WORDLISTS[language];
97769 var minDistance = 99;
97770 var closestWord = words[0];
97771 for (var i=0; i<words.length; i++) {
97772 var comparedTo = words[i];
97773 if (comparedTo.indexOf(word) == 0) {
97774 return comparedTo;
97775 }
97776 var distance = Levenshtein.get(word, comparedTo);
97777 if (distance < minDistance) {
97778 closestWord = comparedTo;
97779 minDistance = distance;
97780 }
97781 }
97782 return closestWord;
97783 }
97784
97785 function hidePending() {
97786 DOM.feedback
97787 .text("")
97788 .hide();
97789 }
97790
97791 function populateNetworkSelect() {
97792 for (var i=0; i<networks.length; i++) {
97793 var network = networks[i];
97794 var option = $("<option>");
97795 option.attr("value", i);
97796 option.text(network.name);
97797 if (network.name == "BTC - Bitcoin") {
97798 option.prop("selected", true);
97799 }
97800 DOM.phraseNetwork.append(option);
97801 }
97802 }
97803
97804 function populateClientSelect() {
97805 for (var i=0; i<clients.length; i++) {
97806 var client = clients[i];
97807 var option = $("<option>");
97808 option.attr("value", i);
97809 option.text(client.name);
97810 DOM.bip32Client.append(option);
97811 }
97812 }
97813
97814 function getLanguage() {
97815 var defaultLanguage = "english";
97816 // Try to get from existing phrase
97817 var language = getLanguageFromPhrase();
97818 // Try to get from url if not from phrase
97819 if (language.length == 0) {
97820 language = getLanguageFromUrl();
97821 }
97822 // Default to English if no other option
97823 if (language.length == 0) {
97824 language = defaultLanguage;
97825 }
97826 return language;
97827 }
97828
97829 function getLanguageFromPhrase(phrase) {
97830 // Check if how many words from existing phrase match a language.
97831 var language = "";
97832 if (!phrase) {
97833 phrase = DOM.phrase.val();
97834 }
97835 if (phrase.length > 0) {
97836 var words = phraseToWordArray(phrase);
97837 var languageMatches = {};
97838 for (l in WORDLISTS) {
97839 // Track how many words match in this language
97840 languageMatches[l] = 0;
97841 for (var i=0; i<words.length; i++) {
97842 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
97843 if (wordInLanguage) {
97844 languageMatches[l]++;
97845 }
97846 }
97847 // Find languages with most word matches.
97848 // This is made difficult due to commonalities between Chinese
97849 // simplified vs traditional.
97850 var mostMatches = 0;
97851 var mostMatchedLanguages = [];
97852 for (var l in languageMatches) {
97853 var numMatches = languageMatches[l];
97854 if (numMatches > mostMatches) {
97855 mostMatches = numMatches;
97856 mostMatchedLanguages = [l];
97857 }
97858 else if (numMatches == mostMatches) {
97859 mostMatchedLanguages.push(l);
97860 }
97861 }
97862 }
97863 if (mostMatchedLanguages.length > 0) {
97864 // Use first language and warn if multiple detected
97865 language = mostMatchedLanguages[0];
97866 if (mostMatchedLanguages.length > 1) {
97867 console.warn("Multiple possible languages");
97868 console.warn(mostMatchedLanguages);
97869 }
97870 }
97871 }
97872 return language;
97873 }
97874
97875 function getLanguageFromUrl() {
97876 for (var language in WORDLISTS) {
97877 if (window.location.hash.indexOf(language) > -1) {
97878 return language;
97879 }
97880 }
97881 return "";
97882 }
97883
97884 function setMnemonicLanguage() {
97885 var language = getLanguage();
97886 // Load the bip39 mnemonic generator for this language if required
97887 if (!(language in mnemonics)) {
97888 mnemonics[language] = new Mnemonic(language);
97889 }
97890 mnemonic = mnemonics[language];
97891 }
97892
97893 function convertPhraseToNewLanguage() {
97894 var oldLanguage = getLanguageFromPhrase();
97895 var newLanguage = getLanguageFromUrl();
97896 var oldPhrase = DOM.phrase.val();
97897 var oldWords = phraseToWordArray(oldPhrase);
97898 var newWords = [];
97899 for (var i=0; i<oldWords.length; i++) {
97900 var oldWord = oldWords[i];
97901 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
97902 var newWord = WORDLISTS[newLanguage][index];
97903 newWords.push(newWord);
97904 }
97905 newPhrase = wordArrayToPhrase(newWords);
97906 return newPhrase;
97907 }
97908
97909 // TODO look at jsbip39 - mnemonic.splitWords
97910 function phraseToWordArray(phrase) {
97911 var words = phrase.split(/\s/g);
97912 var noBlanks = [];
97913 for (var i=0; i<words.length; i++) {
97914 var word = words[i];
97915 if (word.length > 0) {
97916 noBlanks.push(word);
97917 }
97918 }
97919 return noBlanks;
97920 }
97921
97922 // TODO look at jsbip39 - mnemonic.joinWords
97923 function wordArrayToPhrase(words) {
97924 var phrase = words.join(" ");
97925 var language = getLanguageFromPhrase(phrase);
97926 if (language == "japanese" || language == "korean") {
97927 phrase = words.join("\u3000");
97928 }
97929 return phrase;
97930 }
97931
97932 function isUsingOwnEntropy() {
97933 return DOM.useEntropy.prop("checked");
97934 }
97935
97936 function setMnemonicFromEntropy() {
97937 clearEntropyFeedback();
97938 // Get entropy value
97939 var entropyStr = DOM.entropy.val();
97940 // Work out minimum base for entropy
97941 var entropy = Entropy.fromString(entropyStr);
97942 if (entropy.binaryStr.length == 0) {
97943 return;
97944 }
97945 // Show entropy details
97946 showEntropyFeedback(entropy);
97947 // Use entropy hash if not using raw entropy
97948 var bits = entropy.binaryStr;
97949 var mnemonicLength = DOM.entropyMnemonicLength.val();
97950 if (mnemonicLength != "raw") {
97951 // Get bits by hashing entropy with SHA256
97952 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
97953 var hex = sjcl.codec.hex.fromBits(hash);
97954 bits = BigInteger.parse(hex, 16).toString(2);
97955 while (bits.length % 256 != 0) {
97956 bits = "0" + bits;
97957 }
97958 // Truncate hash to suit number of words
97959 mnemonicLength = parseInt(mnemonicLength);
97960 var numberOfBits = 32 * mnemonicLength / 3;
97961 bits = bits.substring(0, numberOfBits);
97962 // show warning for weak entropy override
97963 if (mnemonicLength / 3 * 32 > entropy.binaryStr.length) {
97964 DOM.entropyWeakEntropyOverrideWarning.removeClass("hidden");
97965 }
97966 else {
97967 DOM.entropyWeakEntropyOverrideWarning.addClass("hidden");
97968 }
97969 }
97970 else {
97971 // hide warning for weak entropy override
97972 DOM.entropyWeakEntropyOverrideWarning.addClass("hidden");
97973 }
97974 // Discard trailing entropy
97975 var bitsToUse = Math.floor(bits.length / 32) * 32;
97976 var start = bits.length - bitsToUse;
97977 var binaryStr = bits.substring(start);
97978 // Convert entropy string to numeric array
97979 var entropyArr = [];
97980 for (var i=0; i<binaryStr.length / 8; i++) {
97981 var byteAsBits = binaryStr.substring(i*8, i*8+8);
97982 var entropyByte = parseInt(byteAsBits, 2);
97983 entropyArr.push(entropyByte)
97984 }
97985 // Convert entropy array to mnemonic
97986 var phrase = mnemonic.toMnemonic(entropyArr);
97987 // Set the mnemonic in the UI
97988 DOM.phrase.val(phrase);
97989 // Show the word indexes
97990 showWordIndexes();
97991 // Show the checksum
97992 showChecksum();
97993 }
97994
97995 function clearEntropyFeedback() {
97996 DOM.entropyCrackTime.text("...");
97997 DOM.entropyType.text("");
97998 DOM.entropyWordCount.text("0");
97999 DOM.entropyEventCount.text("0");
98000 DOM.entropyBitsPerEvent.text("0");
98001 DOM.entropyBits.text("0");
98002 DOM.entropyFiltered.html("&nbsp;");
98003 DOM.entropyBinary.html("&nbsp;");
98004 }
98005
98006 function showEntropyFeedback(entropy) {
98007 var numberOfBits = entropy.binaryStr.length;
98008 var timeToCrack = "unknown";
98009 try {
98010 var z = zxcvbn(entropy.base.parts.join(""));
98011 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
98012 if (z.feedback.warning != "") {
98013 timeToCrack = timeToCrack + " - " + z.feedback.warning;
98014 };
98015 }
98016 catch (e) {
98017 console.log("Error detecting entropy strength with zxcvbn:");
98018 console.log(e);
98019 }
98020 var entropyTypeStr = getEntropyTypeStr(entropy);
98021 var wordCount = Math.floor(numberOfBits / 32) * 3;
98022 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
98023 var spacedBinaryStr = addSpacesEveryElevenBits(entropy.binaryStr);
98024 DOM.entropyFiltered.html(entropy.cleanHtml);
98025 DOM.entropyType.text(entropyTypeStr);
98026 DOM.entropyCrackTime.text(timeToCrack);
98027 DOM.entropyEventCount.text(entropy.base.ints.length);
98028 DOM.entropyBits.text(numberOfBits);
98029 DOM.entropyWordCount.text(wordCount);
98030 DOM.entropyBinary.text(spacedBinaryStr);
98031 DOM.entropyBitsPerEvent.text(bitsPerEvent);
98032 // detect and warn of filtering
98033 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
98034 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
98035 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
98036 if (isFiltered) {
98037 DOM.entropyFilterWarning.removeClass('hidden');
98038 }
98039 else {
98040 DOM.entropyFilterWarning.addClass('hidden');
98041 }
98042 }
98043
98044 function getEntropyTypeStr(entropy) {
98045 var typeStr = entropy.base.str;
98046 // Add some detail if these are cards
98047 if (entropy.base.asInt == 52) {
98048 var cardDetail = []; // array of message strings
98049 // Detect duplicates
98050 var dupes = [];
98051 var dupeTracker = {};
98052 for (var i=0; i<entropy.base.parts.length; i++) {
98053 var card = entropy.base.parts[i];
98054 var cardUpper = card.toUpperCase();
98055 if (cardUpper in dupeTracker) {
98056 dupes.push(card);
98057 }
98058 dupeTracker[cardUpper] = true;
98059 }
98060 if (dupes.length > 0) {
98061 var dupeWord = "duplicates";
98062 if (dupes.length == 1) {
98063 dupeWord = "duplicate";
98064 }
98065 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
98066 if (dupes.length > 3) {
98067 msg += "...";
98068 }
98069 cardDetail.push(msg);
98070 }
98071 // Detect full deck
98072 var uniqueCards = [];
98073 for (var uniqueCard in dupeTracker) {
98074 uniqueCards.push(uniqueCard);
98075 }
98076 if (uniqueCards.length == 52) {
98077 cardDetail.unshift("full deck");
98078 }
98079 // Detect missing cards
98080 var values = "A23456789TJQK";
98081 var suits = "CDHS";
98082 var missingCards = [];
98083 for (var i=0; i<suits.length; i++) {
98084 for (var j=0; j<values.length; j++) {
98085 var card = values[j] + suits[i];
98086 if (!(card in dupeTracker)) {
98087 missingCards.push(card);
98088 }
98089 }
98090 }
98091 // Display missing cards if six or less, ie clearly going for full deck
98092 if (missingCards.length > 0 && missingCards.length <= 6) {
98093 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
98094 if (missingCards.length > 3) {
98095 msg += "...";
98096 }
98097 cardDetail.push(msg);
98098 }
98099 // Add card details to typeStr
98100 if (cardDetail.length > 0) {
98101 typeStr += " (" + cardDetail.join(", ") + ")";
98102 }
98103 }
98104 return typeStr;
98105 }
98106
98107 function setQrEvents(els) {
98108 els.on("mouseenter", createQr);
98109 els.on("mouseleave", destroyQr);
98110 els.on("click", toggleQr);
98111 }
98112
98113 function createQr(e) {
98114 var content = e.target.textContent || e.target.value;
98115 if (content) {
98116 var qrEl = kjua({
98117 text: content,
98118 render: "canvas",
98119 size: 310,
98120 ecLevel: 'H',
98121 });
98122 DOM.qrImage.append(qrEl);
98123 if (!showQr) {
98124 DOM.qrHider.addClass("hidden");
98125 }
98126 else {
98127 DOM.qrHider.removeClass("hidden");
98128 }
98129 DOM.qrContainer.removeClass("hidden");
98130 }
98131 }
98132
98133 function destroyQr() {
98134 DOM.qrImage.text("");
98135 DOM.qrContainer.addClass("hidden");
98136 }
98137
98138 function toggleQr() {
98139 showQr = !showQr;
98140 DOM.qrHider.toggleClass("hidden");
98141 DOM.qrHint.toggleClass("hidden");
98142 }
98143
98144 function bip44TabSelected() {
98145 return DOM.bip44tab.hasClass("active");
98146 }
98147
98148 function bip32TabSelected() {
98149 return DOM.bip32tab.hasClass("active");
98150 }
98151
98152 function networkHasSegwit() {
98153 return networks[DOM.network.val()].segwitAvailable;
98154 }
98155
98156 function bip49TabSelected() {
98157 return DOM.bip49tab.hasClass("active");
98158 }
98159
98160 function bip84TabSelected() {
98161 return DOM.bip84tab.hasClass("active");
98162 }
98163
98164 function bip141TabSelected() {
98165 return DOM.bip141tab.hasClass("active");
98166 }
98167
98168 function setHdCoin(coinValue) {
98169 DOM.bip44coin.val(coinValue);
98170 DOM.bip49coin.val(coinValue);
98171 DOM.bip84coin.val(coinValue);
98172 }
98173
98174 function showSegwitAvailable() {
98175 DOM.bip49unavailable.addClass("hidden");
98176 DOM.bip49available.removeClass("hidden");
98177 DOM.bip141unavailable.addClass("hidden");
98178 DOM.bip141available.removeClass("hidden");
98179 }
98180
98181 function showSegwitUnavailable() {
98182 DOM.bip49available.addClass("hidden");
98183 DOM.bip49unavailable.removeClass("hidden");
98184 DOM.bip141available.addClass("hidden");
98185 DOM.bip141unavailable.removeClass("hidden");
98186 }
98187
98188 function useBitpayAddresses() {
98189 return !(DOM.useBitpayAddresses.prop("checked"));
98190 }
98191
98192 function setBitcoinCashNetworkValues() {
98193 if (useBitpayAddresses()) {
98194 network = bitcoinjs.bitcoin.networks.bitcoin;
98195 }
98196 else {
98197 network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
98198 }
98199 }
98200
98201 function adjustNetworkForSegwit() {
98202 // If segwit is selected the xpub/xprv prefixes need to be adjusted
98203 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
98204 // wallet.
98205 // See https://github.com/iancoleman/bip39/issues/125
98206 var segwitNetworks = null;
98207 // if a segwit network is alread selected, need to use base network to
98208 // look up new parameters
98209 if ("baseNetwork" in network) {
98210 network = bitcoinjs.bitcoin.networks[network.baseNetwork];
98211 }
98212 // choose the right segwit params
98213 if (p2wpkhSelected() && "p2wpkh" in network) {
98214 network = network.p2wpkh;
98215 }
98216 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
98217 network = network.p2wpkhInP2sh;
98218 }
98219 }
98220
98221 function lastIndexInTable() {
98222 var pathText = DOM.addresses.find(".index").last().text();
98223 var pathBits = pathText.split("/");
98224 var lastBit = pathBits[pathBits.length-1];
98225 var lastBitClean = lastBit.replace("'", "");
98226 return parseInt(lastBitClean);
98227 }
98228
98229 function uint8ArrayToHex(a) {
98230 var s = ""
98231 for (var i=0; i<a.length; i++) {
98232 var h = a[i].toString(16);
98233 while (h.length < 2) {
98234 h = "0" + h;
98235 }
98236 s = s + h;
98237 }
98238 return s;
98239 }
98240
98241 function showWordIndexes() {
98242 var phrase = DOM.phrase.val();
98243 var words = phraseToWordArray(phrase);
98244 var wordIndexes = [];
98245 var language = getLanguage();
98246 for (var i=0; i<words.length; i++) {
98247 var word = words[i];
98248 var wordIndex = WORDLISTS[language].indexOf(word);
98249 wordIndexes.push(wordIndex);
98250 }
98251 var wordIndexesStr = wordIndexes.join(", ");
98252 DOM.entropyWordIndexes.text(wordIndexesStr);
98253 }
98254
98255 function showChecksum() {
98256 var phrase = DOM.phrase.val();
98257 var words = phraseToWordArray(phrase);
98258 var checksumBitlength = words.length / 3;
98259 var checksum = "";
98260 var binaryStr = "";
98261 var language = getLanguage();
98262 for (var i=words.length-1; i>=0; i--) {
98263 var word = words[i];
98264 var wordIndex = WORDLISTS[language].indexOf(word);
98265 var wordBinary = wordIndex.toString(2);
98266 while (wordBinary.length < 11) {
98267 wordBinary = "0" + wordBinary;
98268 }
98269 var binaryStr = wordBinary + binaryStr;
98270 if (binaryStr.length >= checksumBitlength) {
98271 var start = binaryStr.length - checksumBitlength;
98272 var end = binaryStr.length;
98273 checksum = binaryStr.substring(start, end);
98274 // add spaces so the last group is 11 bits, not the first
98275 checksum = checksum.split("").reverse().join("")
98276 checksum = addSpacesEveryElevenBits(checksum);
98277 checksum = checksum.split("").reverse().join("")
98278 break;
98279 }
98280 }
98281 DOM.entropyChecksum.text(checksum);
98282 }
98283
98284 function updateCsv() {
98285 var tableCsv = "path,address,public key,private key\n";
98286 var rows = DOM.addresses.find("tr");
98287 for (var i=0; i<rows.length; i++) {
98288 var row = $(rows[i]);
98289 var cells = row.find("td");
98290 for (var j=0; j<cells.length; j++) {
98291 var cell = $(cells[j]);
98292 if (!cell.children().hasClass("invisible")) {
98293 tableCsv = tableCsv + cell.text();
98294 }
98295 if (j != cells.length - 1) {
98296 tableCsv = tableCsv + ",";
98297 }
98298 }
98299 tableCsv = tableCsv + "\n";
98300 }
98301 DOM.csv.val(tableCsv);
98302 }
98303
98304 function addSpacesEveryElevenBits(binaryStr) {
98305 return binaryStr.match(/.{1,11}/g).join(" ");
98306 }
98307
98308 var networks = [
98309 {
98310 name: "AC - Asiacoin",
98311 segwitAvailable: false,
98312 onSelect: function() {
98313 network = bitcoinjs.bitcoin.networks.asiacoin;
98314 setHdCoin(51);
98315 },
98316 },
98317 {
98318 name: "ACC - Adcoin",
98319 segwitAvailable: true,
98320 onSelect: function() {
98321 network = bitcoinjs.bitcoin.networks.adcoin;
98322 setHdCoin(161);
98323 },
98324 },
98325 {
98326 name: "AUR - Auroracoin",
98327 segwitAvailable: false,
98328 onSelect: function() {
98329 network = bitcoinjs.bitcoin.networks.auroracoin;
98330 setHdCoin(85);
98331 },
98332 },
98333 {
98334 name: "AXE - Axe",
98335 segwitAvailable: false,
98336 onSelect: function() {
98337 network = bitcoinjs.bitcoin.networks.axe;
98338 setHdCoin(0);
98339 },
98340 },
98341 {
98342 name: "BCA - Bitcoin Atom",
98343 segwitAvailable: true,
98344 onSelect: function() {
98345 network = bitcoinjs.bitcoin.networks.atom;
98346 setHdCoin(185);
98347 },
98348 },
98349 {
98350 name: "BCH - Bitcoin Cash",
98351 segwitAvailable: false,
98352 onSelect: function() {
98353 DOM.useBitpayAddressesContainer.removeClass("hidden");
98354 setBitcoinCashNetworkValues();
98355 setHdCoin(145);
98356 },
98357 },
98358 {
98359 name: "BEET - Beetlecoin",
98360 segwitAvailable: false,
98361 onSelect: function() {
98362 network = bitcoinjs.bitcoin.networks.beetlecoin;
98363 setHdCoin(800);
98364 },
98365 },
98366 {
98367 name: "BELA - Belacoin",
98368 segwitAvailable: false,
98369 onSelect: function() {
98370 network = bitcoinjs.bitcoin.networks.belacoin;
98371 setHdCoin(73);
98372 },
98373 },
98374 {
98375 name: "BLK - BlackCoin",
98376 segwitAvailable: false,
98377 onSelect: function() {
98378 network = bitcoinjs.bitcoin.networks.blackcoin;
98379 setHdCoin(10);
98380 },
98381 },
98382 {
98383 name: "BRIT - Britcoin",
98384 segwitAvailable: false,
98385 onSelect: function() {
98386 network = bitcoinjs.bitcoin.networks.britcoin;
98387 setHdCoin(70);
98388 },
98389 },
98390 {
98391 name: "BSD - Bitsend",
98392 segwitAvailable: true,
98393 onSelect: function() {
98394 network = bitcoinjs.bitcoin.networks.bitsend;
98395 setHdCoin(91);
98396 },
98397 },
98398 {
98399 name: "BTA - Bata",
98400 segwitAvailable: false,
98401 onSelect: function() {
98402 network = bitcoinjs.bitcoin.networks.bata;
98403 setHdCoin(89);
98404 },
98405 },
98406 {
98407 name: "BTC - Bitcoin",
98408 segwitAvailable: true,
98409 onSelect: function() {
98410 network = bitcoinjs.bitcoin.networks.bitcoin;
98411 setHdCoin(0);
98412 },
98413 },
98414 {
98415 name: "BTC - Bitcoin Testnet",
98416 segwitAvailable: true,
98417 onSelect: function() {
98418 network = bitcoinjs.bitcoin.networks.testnet;
98419 setHdCoin(1);
98420 },
98421 },
98422 {
98423 name: "BTG - Bitcoin Gold",
98424 segwitAvailable: true,
98425 onSelect: function() {
98426 network = bitcoinjs.bitcoin.networks.bgold;
98427 setHdCoin(156);
98428 },
98429 },
98430 {
98431 name: "BTX - Bitcore",
98432 segwitAvailable: true,
98433 onSelect: function() {
98434 network = bitcoinjs.bitcoin.networks.bitcore;
98435 setHdCoin(160);
98436 },
98437 },
98438 {
98439 name: "CCN - Cannacoin",
98440 segwitAvailable: false,
98441 onSelect: function() {
98442 network = bitcoinjs.bitcoin.networks.cannacoin;
98443 setHdCoin(19);
98444 },
98445 },
98446 {
98447 name: "CDN - Canadaecoin",
98448 segwitAvailable: false,
98449 onSelect: function() {
98450 network = bitcoinjs.bitcoin.networks.canadaecoin;
98451 setHdCoin(34);
98452 },
98453 },
98454 {
98455 name: "CLAM - Clams",
98456 segwitAvailable: false,
98457 onSelect: function() {
98458 network = bitcoinjs.bitcoin.networks.clam;
98459 setHdCoin(23);
98460 },
98461 },
98462 {
98463 name: "CLUB - Clubcoin",
98464 segwitAvailable: false,
98465 onSelect: function() {
98466 network = bitcoinjs.bitcoin.networks.clubcoin;
98467 setHdCoin(79);
98468 },
98469 },
98470 {
98471 name: "CMP - Compcoin",
98472 segwitAvailable: false,
98473 onSelect: function() {
98474 network = bitcoinjs.bitcoin.networks.compcoin;
98475 setHdCoin(71);
98476 },
98477 },
98478 {
98479 name: "CRAVE - Crave",
98480 segwitAvailable: false,
98481 onSelect: function() {
98482 network = bitcoinjs.bitcoin.networks.crave;
98483 setHdCoin(186);
98484 },
98485 },
98486 {
98487 name: "CRW - Crown",
98488 segwitAvailable: false,
98489 onSelect: function() {
98490 network = bitcoinjs.bitcoin.networks.crown;
98491 setHdCoin(72);
98492 },
98493 },
98494 {
98495 name: "DASH - Dash",
98496 segwitAvailable: false,
98497 onSelect: function() {
98498 network = bitcoinjs.bitcoin.networks.dash;
98499 setHdCoin(5);
98500 },
98501 },
98502 {
98503 name: "DASH - Dash Testnet",
98504 segwitAvailable: false,
98505 onSelect: function() {
98506 network = bitcoinjs.bitcoin.networks.dashtn;
98507 setHdCoin(1);
98508 },
98509 },
98510 {
98511 name: "DFC - Defcoin",
98512 segwitAvailable: false,
98513 onSelect: function() {
98514 network = bitcoinjs.bitcoin.networks.defcoin;
98515 setHdCoin(1337);
98516 },
98517 },
98518 {
98519 name: "DGB - Digibyte",
98520 segwitAvailable: true,
98521 onSelect: function() {
98522 network = bitcoinjs.bitcoin.networks.digibyte;
98523 setHdCoin(20);
98524 },
98525 },
98526 {
98527 name: "DGC - Digitalcoin",
98528 segwitAvailable: false,
98529 onSelect: function() {
98530 network = bitcoinjs.bitcoin.networks.digitalcoin;
98531 setHdCoin(18);
98532 },
98533 },
98534 {
98535 name: "DMD - Diamond",
98536 segwitAvailable: false,
98537 onSelect: function() {
98538 network = bitcoinjs.bitcoin.networks.diamond;
98539 setHdCoin(152);
98540 },
98541 },
98542 {
98543 name: "DNR - Denarius",
98544 segwitAvailable: false,
98545 onSelect: function() {
98546 network = bitcoinjs.bitcoin.networks.denarius;
98547 setHdCoin(116);
98548 },
98549 },
98550 {
98551 name: "DOGE - Dogecoin",
98552 segwitAvailable: false,
98553 onSelect: function() {
98554 network = bitcoinjs.bitcoin.networks.dogecoin;
98555 setHdCoin(3);
98556 },
98557 },
98558 {
98559 name: "ECN - Ecoin",
98560 segwitAvailable: false,
98561 onSelect: function() {
98562 network = bitcoinjs.bitcoin.networks.ecoin;
98563 setHdCoin(115);
98564 },
98565 },
98566 {
98567 name: "EDRC - Edrcoin",
98568 segwitAvailable: false,
98569 onSelect: function() {
98570 network = bitcoinjs.bitcoin.networks.edrcoin;
98571 setHdCoin(56);
98572 },
98573 },
98574 {
98575 name: "EFL - Egulden",
98576 segwitAvailable: true,
98577 onSelect: function() {
98578 network = bitcoinjs.bitcoin.networks.egulden;
98579 setHdCoin(78);
98580 },
98581 },
98582 {
98583 name: "EMC2 - Einsteinium",
98584 segwitAvailable: false,
98585 onSelect: function() {
98586 network = bitcoinjs.bitcoin.networks.einsteinium;
98587 setHdCoin(41);
98588 },
98589 },
98590 {
98591 name: "ERC - Europecoin",
98592 segwitAvailable: false,
98593 onSelect: function() {
98594 network = bitcoinjs.bitcoin.networks.europecoin;
98595 setHdCoin(151);
98596 },
98597 },
98598 {
98599 name: "ETH - Ethereum",
98600 segwitAvailable: false,
98601 onSelect: function() {
98602 network = bitcoinjs.bitcoin.networks.bitcoin;
98603 setHdCoin(60);
98604 },
98605 },
98606 {
98607 name: "EXCL - Exclusivecoin",
98608 segwitAvailable: false,
98609 onSelect: function() {
98610 network = bitcoinjs.bitcoin.networks.exclusivecoin;
98611 setHdCoin(190);
98612 },
98613 },
98614 {
98615 name: "FJC - Fujicoin",
98616 segwitAvailable: true,
98617 onSelect: function() {
98618 network = bitcoinjs.bitcoin.networks.fujicoin;
98619 setHdCoin(75);
98620 },
98621 },
98622 {
98623 name: "FLASH - Flashcoin",
98624 segwitAvailable: false,
98625 onSelect: function() {
98626 network = bitcoinjs.bitcoin.networks.flashcoin;
98627 setHdCoin(120);
98628 },
98629 },
98630 {
98631 name: "FRST - Firstcoin",
98632 segwitAvailable: false,
98633 onSelect: function() {
98634 network = bitcoinjs.bitcoin.networks.firstcoin;
98635 setHdCoin(167);
98636 },
98637 },
98638 {
98639 name: "FTC - Feathercoin",
98640 segwitAvailable: true,
98641 onSelect: function() {
98642 network = bitcoinjs.bitcoin.networks.feathercoin;
98643 setHdCoin(8);
98644 },
98645 },
98646 {
98647 name: "GAME - GameCredits",
98648 segwitAvailable: false,
98649 onSelect: function() {
98650 network = bitcoinjs.bitcoin.networks.game;
98651 setHdCoin(101);
98652 },
98653 },
98654 {
98655 name: "GBX - Gobyte",
98656 segwitAvailable: false,
98657 onSelect: function() {
98658 network = bitcoinjs.bitcoin.networks.gobyte;
98659 setHdCoin(176);
98660 },
98661 },
98662 {
98663 name: "GCR - GCRCoin",
98664 segwitAvailable: false,
98665 onSelect: function() {
98666 network = bitcoinjs.bitcoin.networks.gcr;
98667 setHdCoin(79);
98668 },
98669 },
98670 {
98671 name: "GRC - Gridcoin",
98672 segwitAvailable: false,
98673 onSelect: function() {
98674 network = bitcoinjs.bitcoin.networks.gridcoin;
98675 setHdCoin(84);
98676 },
98677 },
98678 {
98679 name: "HNC - Helleniccoin",
98680 segwitAvailable: false,
98681 onSelect: function() {
98682 network = bitcoinjs.bitcoin.networks.helleniccoin;
98683 setHdCoin(168);
98684 },
98685 },
98686 {
98687 name: "INSN - Insane",
98688 segwitAvailable: false,
98689 onSelect: function() {
98690 network = bitcoinjs.bitcoin.networks.insane;
98691 setHdCoin(68);
98692 },
98693 },
98694 {
98695 name: "IOP - Iop",
98696 segwitAvailable: true,
98697 onSelect: function() {
98698 network = bitcoinjs.bitcoin.networks.iop;
98699 setHdCoin(66);
98700 },
98701 },
98702 {
98703 name: "IXC - Ixcoin",
98704 segwitAvailable: false,
98705 onSelect: function() {
98706 network = bitcoinjs.bitcoin.networks.ixcoin;
98707 setHdCoin(86);
98708 },
98709 },
98710 {
98711 name: "JBS - Jumbucks",
98712 segwitAvailable: false,
98713 onSelect: function() {
98714 network = bitcoinjs.bitcoin.networks.jumbucks;
98715 setHdCoin(26);
98716 },
98717 },
98718 {
98719 name: "KMD - Komodo",
98720 bip49available: false,
98721 onSelect: function() {
98722 network = bitcoinjs.bitcoin.networks.komodo;
98723 setHdCoin(141);
98724 },
98725 },
98726 {
98727 name: "LBC - Library Credits",
98728 segwitAvailable: false,
98729 onSelect: function() {
98730 network = bitcoinjs.bitcoin.networks.lbry;
98731 setHdCoin(140);
98732 },
98733 },
98734 {
98735 name: "LCC - Litecoincash",
98736 segwitAvailable: true,
98737 onSelect: function() {
98738 network = bitcoinjs.bitcoin.networks.litecoincash;
98739 setHdCoin(192);
98740 },
98741 },
98742 {
98743 name: "LDCN - Landcoin",
98744 segwitAvailable: false,
98745 onSelect: function() {
98746 network = bitcoinjs.bitcoin.networks.landcoin;
98747 setHdCoin(63);
98748 },
98749 },
98750 {
98751 name: "LINX - Linx",
98752 segwitAvailable: false,
98753 onSelect: function() {
98754 network = bitcoinjs.bitcoin.networks.linx;
98755 setHdCoin(114);
98756 },
98757 },
98758 {
98759 name: "LTC - Litecoin",
98760 segwitAvailable: true,
98761 onSelect: function() {
98762 network = bitcoinjs.bitcoin.networks.litecoin;
98763 setHdCoin(2);
98764 DOM.litecoinLtubContainer.removeClass("hidden");
98765 },
98766 },
98767 {
98768 name: "LYNX - Lynx",
98769 segwitAvailable: false,
98770 onSelect: function() {
98771 network = bitcoinjs.bitcoin.networks.lynx;
98772 setHdCoin(191);
98773 },
98774 },
98775 {
98776 name: "MAZA - Maza",
98777 segwitAvailable: false,
98778 onSelect: function() {
98779 network = bitcoinjs.bitcoin.networks.maza;
98780 setHdCoin(13);
98781 },
98782 },
98783 {
98784 name: "MNX - Minexcoin",
98785 segwitAvailable: true,
98786 onSelect: function() {
98787 network = bitcoinjs.bitcoin.networks.minexcoin;
98788 setHdCoin(182);
98789 },
98790 },
98791 {
98792 name: "MONA - Monacoin",
98793 segwitAvailable: true,
98794 onSelect: function() {
98795 network = bitcoinjs.bitcoin.networks.monacoin,
98796 setHdCoin(22);
98797 },
98798 },
98799 {
98800 name: "NAV - Navcoin",
98801 segwitAvailable: true,
98802 onSelect: function() {
98803 network = bitcoinjs.bitcoin.networks.navcoin;
98804 setHdCoin(130);
98805 },
98806 },
98807 {
98808 name: "NEBL - Neblio",
98809 segwitAvailable: false,
98810 onSelect: function() {
98811 network = bitcoinjs.bitcoin.networks.neblio;
98812 setHdCoin(146);
98813 },
98814 },
98815 {
98816 name: "NEOS - Neoscoin",
98817 segwitAvailable: false,
98818 onSelect: function() {
98819 network = bitcoinjs.bitcoin.networks.neoscoin;
98820 setHdCoin(25);
98821 },
98822 },
98823 {
98824 name: "NLG - Gulden",
98825 segwitAvailable: false,
98826 onSelect: function() {
98827 network = bitcoinjs.bitcoin.networks.gulden;
98828 setHdCoin(87);
98829 },
98830 },
98831 {
98832 name: "NMC - Namecoin",
98833 segwitAvailable: false,
98834 onSelect: function() {
98835 network = bitcoinjs.bitcoin.networks.namecoin;
98836 setHdCoin(7);
98837 },
98838 },
98839 {
98840 name: "NRO - Neurocoin",
98841 segwitAvailable: false,
98842 onSelect: function() {
98843 network = bitcoinjs.bitcoin.networks.neurocoin;
98844 setHdCoin(110);
98845 },
98846 },
98847 {
98848 name: "NSR - Nushares",
98849 segwitAvailable: false,
98850 onSelect: function() {
98851 network = bitcoinjs.bitcoin.networks.nushares;
98852 setHdCoin(11);
98853 },
98854 },
98855 {
98856 name: "NYC - Newyorkc",
98857 segwitAvailable: false,
98858 onSelect: function() {
98859 network = bitcoinjs.bitcoin.networks.newyorkc;
98860 setHdCoin(179);
98861 },
98862 },
98863 {
98864 name: "NVC - Novacoin",
98865 segwitAvailable: false,
98866 onSelect: function() {
98867 network = bitcoinjs.bitcoin.networks.novacoin;
98868 setHdCoin(50);
98869 },
98870 },
98871 {
98872 name: "OK - Okcash",
98873 segwitAvailable: false,
98874 onSelect: function() {
98875 network = bitcoinjs.bitcoin.networks.okcash;
98876 setHdCoin(69);
98877 },
98878 },
98879 {
98880 name: "OMNI - Omnicore",
98881 segwitAvailable: true,
98882 onSelect: function() {
98883 network = bitcoinjs.bitcoin.networks.omnicore;
98884 setHdCoin(200);
98885 },
98886 },
98887 {
98888 name: "ONX - Onixcoin",
98889 segwitAvailable: false,
98890 onSelect: function() {
98891 network = bitcoinjs.bitcoin.networks.onixcoin;
98892 setHdCoin(174);
98893 },
98894 },
98895 {
98896 name: "PINK - Pinkcoin",
98897 segwitAvailable: false,
98898 onSelect: function() {
98899 network = bitcoinjs.bitcoin.networks.pinkcoin;
98900 setHdCoin(117);
98901 },
98902 },
98903 {
98904 name: "PIVX - PIVX",
98905 segwitAvailable: false,
98906 onSelect: function() {
98907 network = bitcoinjs.bitcoin.networks.pivx;
98908 setHdCoin(119);
98909 },
98910 },
98911 {
98912 name: "PIVX - PIVX Testnet",
98913 segwitAvailable: false,
98914 onSelect: function() {
98915 network = bitcoinjs.bitcoin.networks.pivxtestnet;
98916 setHdCoin(1);
98917 },
98918 },
98919 {
98920 name: "POSW - POSWcoin",
98921 segwitAvailable: false,
98922 onSelect: function() {
98923 network = bitcoinjs.bitcoin.networks.poswcoin;
98924 setHdCoin(47);
98925 },
98926 },
98927 {
98928 name: "POT - Potcoin",
98929 segwitAvailable: false,
98930 onSelect: function() {
98931 network = bitcoinjs.bitcoin.networks.potcoin;
98932 setHdCoin(81);
98933 },
98934 },
98935 {
98936 name: "PPC - Peercoin",
98937 segwitAvailable: false,
98938 onSelect: function() {
98939 network = bitcoinjs.bitcoin.networks.peercoin;
98940 setHdCoin(6);
98941 },
98942 },
98943 {
98944 name: "PSB - Pesobit",
98945 segwitAvailable: false,
98946 onSelect: function() {
98947 network = bitcoinjs.bitcoin.networks.pesobit;
98948 setHdCoin(62);
98949 },
98950 },
98951 {
98952 name: "PUT - Putincoin",
98953 segwitAvailable: false,
98954 onSelect: function() {
98955 network = bitcoinjs.bitcoin.networks.putincoin;
98956 setHdCoin(122);
98957 },
98958 },
98959 {
98960 name: "RBY - Rubycoin",
98961 segwitAvailable: false,
98962 onSelect: function() {
98963 network = bitcoinjs.bitcoin.networks.rubycoin;
98964 setHdCoin(16);
98965 },
98966 },
98967 {
98968 name: "RDD - Reddcoin",
98969 segwitAvailable: false,
98970 onSelect: function() {
98971 network = bitcoinjs.bitcoin.networks.reddoin;
98972 setHdCoin(4);
98973 },
98974 },
98975 {
98976 name: "RVR - RevolutionVR",
98977 segwitAvailable: false,
98978 onSelect: function() {
98979 network = bitcoinjs.bitcoin.networks.revolutionvr;
98980 setHdCoin(129);
98981 },
98982 },
98983 {
98984 name: "SDC - ShadowCash",
98985 segwitAvailable: false,
98986 onSelect: function() {
98987 network = bitcoinjs.bitcoin.networks.shadow;
98988 setHdCoin(35);
98989 },
98990 },
98991 {
98992 name: "SDC - ShadowCash Testnet",
98993 segwitAvailable: false,
98994 onSelect: function() {
98995 network = bitcoinjs.bitcoin.networks.shadowtn;
98996 setHdCoin(1);
98997 },
98998 },
98999 {
99000 name: "SLM - Slimcoin",
99001 segwitAvailable: false,
99002 onSelect: function() {
99003 network = bitcoinjs.bitcoin.networks.slimcoin;
99004 setHdCoin(63);
99005 },
99006 },
99007 {
99008 name: "SLM - Slimcoin Testnet",
99009 segwitAvailable: false,
99010 onSelect: function() {
99011 network = bitcoinjs.bitcoin.networks.slimcointn;
99012 setHdCoin(111);
99013 },
99014 },
99015 {
99016 name: "SLR - Solarcoin",
99017 segwitAvailable: false,
99018 onSelect: function() {
99019 network = bitcoinjs.bitcoin.networks.solarcoin;
99020 setHdCoin(58);
99021 },
99022 },
99023 {
99024 name: "SMLY - Smileycoin",
99025 segwitAvailable: false,
99026 onSelect: function() {
99027 network = bitcoinjs.bitcoin.networks.smileycoin;
99028 setHdCoin(59);
99029 },
99030 },
99031 {
99032 name: "STRAT - Stratis",
99033 segwitAvailable: false,
99034 onSelect: function() {
99035 network = bitcoinjs.bitcoin.networks.stratis;
99036 setHdCoin(105);
99037 },
99038 },
99039 {
99040 name: "SYS - Syscoin",
99041 segwitAvailable: true,
99042 onSelect: function() {
99043 network = bitcoinjs.bitcoin.networks.syscoin;
99044 setHdCoin(57);
99045 },
99046 },
99047 {
99048 name: "THC - Hempcoin",
99049 segwitAvailable: false,
99050 onSelect: function() {
99051 network = bitcoinjs.bitcoin.networks.hempcoin;
99052 setHdCoin(113);
99053 },
99054 },
99055 {
99056 name: "TOA - Toa",
99057 segwitAvailable: false,
99058 onSelect: function() {
99059 network = bitcoinjs.bitcoin.networks.toa;
99060 setHdCoin(159);
99061 },
99062 },
99063 {
99064 name: "USC - Ultimatesecurecash",
99065 segwitAvailable: false,
99066 onSelect: function() {
99067 network = bitcoinjs.bitcoin.networks.ultimatesecurecash;
99068 setHdCoin(112);
99069 },
99070 },
99071 {
99072 name: "USNBT - NuBits",
99073 segwitAvailable: false,
99074 onSelect: function() {
99075 network = bitcoinjs.bitcoin.networks.nubits;
99076 setHdCoin(12);
99077 },
99078 },
99079 {
99080 name: "UNO - Unobtanium",
99081 segwitAvailable: false,
99082 onSelect: function() {
99083 network = bitcoinjs.bitcoin.networks.unobtanium;
99084 setHdCoin(92);
99085 },
99086 },
99087 {
99088 name: "VASH - Vpncoin",
99089 segwitAvailable: false,
99090 onSelect: function() {
99091 network = bitcoinjs.bitcoin.networks.vpncoin;
99092 setHdCoin(33);
99093 },
99094 },
99095 {
99096 name: "VIA - Viacoin",
99097 segwitAvailable: false,
99098 onSelect: function() {
99099 network = bitcoinjs.bitcoin.networks.viacoin;
99100 setHdCoin(14);
99101 },
99102 },
99103 {
99104 name: "VIA - Viacoin Testnet",
99105 segwitAvailable: false,
99106 onSelect: function() {
99107 network = bitcoinjs.bitcoin.networks.viacointestnet;
99108 setHdCoin(1);
99109 },
99110 },
99111 {
99112 name: "VIVO - Vivo",
99113 segwitAvailable: false,
99114 onSelect: function() {
99115 network = bitcoinjs.bitcoin.networks.vivo;
99116 setHdCoin(166);
99117 },
99118 },
99119 {
99120 name: "VTC - Vertcoin",
99121 segwitAvailable: false,
99122 onSelect: function() {
99123 network = bitcoinjs.bitcoin.networks.vertcoin;
99124 setHdCoin(28);
99125 },
99126 },
99127 {
99128 name: "WC - Wincoin",
99129 segwitAvailable: false,
99130 onSelect: function() {
99131 network = bitcoinjs.bitcoin.networks.wincoin;
99132 setHdCoin(181);
99133 },
99134 },
99135 {
99136 name: "XBC - Bitcoinplus",
99137 segwitAvailable: false,
99138 onSelect: function() {
99139 network = bitcoinjs.bitcoin.networks.bitcoinplus;
99140 setHdCoin(65);
99141 },
99142 },
99143 {
99144 name: "XMY - Myriadcoin",
99145 segwitAvailable: false,
99146 onSelect: function() {
99147 network = bitcoinjs.bitcoin.networks.myriadcoin;
99148 setHdCoin(90);
99149 },
99150 },
99151 {
99152 name: "XRP - Ripple",
99153 segwitAvailable: false,
99154 onSelect: function() {
99155 network = bitcoinjs.bitcoin.networks.bitcoin;
99156 setHdCoin(144);
99157 },
99158 },
99159 {
99160 name: "XVC - Vcash",
99161 segwitAvailable: false,
99162 onSelect: function() {
99163 network = bitcoinjs.bitcoin.networks.vcash;
99164 setHdCoin(127);
99165 },
99166 },
99167 {
99168 name: "XVG - Verge",
99169 segwitAvailable: false,
99170 onSelect: function() {
99171 network = bitcoinjs.bitcoin.networks.verge;
99172 setHdCoin(77);
99173 },
99174 },
99175 {
99176 name: "XWC - Whitecoin",
99177 segwitAvailable: false,
99178 onSelect: function() {
99179 network = bitcoinjs.bitcoin.networks.whitecoin;
99180 setHdCoin(155);
99181 },
99182 },
99183 {
99184 name: "XZC - Zcoin",
99185 segwitAvailable: true,
99186 onSelect: function() {
99187 network = bitcoinjs.bitcoin.networks.zcoin;
99188 setHdCoin(136);
99189 },
99190 },
99191 ]
99192
99193 var clients = [
99194 {
99195 name: "Bitcoin Core",
99196 onSelect: function() {
99197 DOM.bip32path.val("m/0'/0'");
99198 DOM.hardenedAddresses.prop('checked', true);
99199 },
99200 },
99201 {
99202 name: "blockchain.info",
99203 onSelect: function() {
99204 DOM.bip32path.val("m/44'/0'/0'");
99205 DOM.hardenedAddresses.prop('checked', false);
99206 },
99207 },
99208 {
99209 name: "MultiBit HD",
99210 onSelect: function() {
99211 DOM.bip32path.val("m/0'/0");
99212 DOM.hardenedAddresses.prop('checked', false);
99213 },
99214 }
99215 ]
99216
99217 init();
99218
99219 })();
99220 </script>
99221 </body>
99222 </html>